@@ -26,6 +26,7 @@ import (
26
26
"time"
27
27
28
28
"github.com/aws/aws-sdk-go/aws"
29
+ "github.com/aws/aws-sdk-go/aws/request"
29
30
sd "github.com/aws/aws-sdk-go/service/servicediscovery"
30
31
"github.com/stretchr/testify/assert"
31
32
"github.com/stretchr/testify/require"
@@ -38,6 +39,10 @@ import (
38
39
// Compile time check for interface conformance
39
40
var _ AWSSDClient = & AWSSDClientStub {}
40
41
42
+ var (
43
+ ErrNamespaceNotFound = errors .New ("Namespace not found" )
44
+ )
45
+
41
46
type AWSSDClientStub struct {
42
47
// map[namespace_id]namespace
43
48
namespaces map [string ]* sd.Namespace
@@ -91,18 +96,31 @@ func (s *AWSSDClientStub) GetService(input *sd.GetServiceInput) (*sd.GetServiceO
91
96
return nil , errors .New ("service not found" )
92
97
}
93
98
94
- func (s * AWSSDClientStub ) ListInstancesPages ( input * sd.ListInstancesInput , fn func (* sd.ListInstancesOutput , bool ) bool ) error {
95
- instances := make ([]* sd.InstanceSummary , 0 )
99
+ func (s * AWSSDClientStub ) DiscoverInstancesWithContext ( ctx context. Context , input * sd.DiscoverInstancesInput , opts ... request. Option ) (* sd.DiscoverInstancesOutput , error ) {
100
+ instances := make ([]* sd.HttpInstanceSummary , 0 )
96
101
97
- for _ , inst := range s .instances [* input .ServiceId ] {
98
- instances = append (instances , instanceToInstanceSummary (inst ))
102
+ var foundNs bool
103
+ for _ , ns := range s .namespaces {
104
+ if aws .StringValue (ns .Name ) == aws .StringValue (input .NamespaceName ) {
105
+ foundNs = true
106
+
107
+ for _ , srv := range s .services [* ns .Id ] {
108
+ if aws .StringValue (srv .Name ) == aws .StringValue (input .ServiceName ) {
109
+ for _ , inst := range s .instances [* srv .Id ] {
110
+ instances = append (instances , instanceToHTTPInstanceSummary (inst ))
111
+ }
112
+ }
113
+ }
114
+ }
99
115
}
100
116
101
- fn ( & sd. ListInstancesOutput {
102
- Instances : instances ,
103
- }, true )
117
+ if ! foundNs {
118
+ return nil , ErrNamespaceNotFound
119
+ }
104
120
105
- return nil
121
+ return & sd.DiscoverInstancesOutput {
122
+ Instances : instances ,
123
+ }, nil
106
124
}
107
125
108
126
func (s * AWSSDClientStub ) ListNamespacesPages (input * sd.ListNamespacesInput , fn func (* sd.ListNamespacesOutput , bool ) bool ) error {
@@ -203,6 +221,19 @@ func newTestAWSSDProvider(api AWSSDClient, domainFilter endpoint.DomainFilter, n
203
221
}
204
222
}
205
223
224
+ // nolint: deadcode
225
+ // used for unit test
226
+ func instanceToHTTPInstanceSummary (instance * sd.Instance ) * sd.HttpInstanceSummary {
227
+ if instance == nil {
228
+ return nil
229
+ }
230
+
231
+ return & sd.HttpInstanceSummary {
232
+ InstanceId : instance .Id ,
233
+ Attributes : instance .Attributes ,
234
+ }
235
+ }
236
+
206
237
func TestAWSSDProvider_Records (t * testing.T ) {
207
238
namespaces := map [string ]* sd.Namespace {
208
239
"private" : {
@@ -463,72 +494,6 @@ func TestAWSSDProvider_ListServicesByNamespace(t *testing.T) {
463
494
}
464
495
}
465
496
466
- func TestAWSSDProvider_ListInstancesByService (t * testing.T ) {
467
- namespaces := map [string ]* sd.Namespace {
468
- "private" : {
469
- Id : aws .String ("private" ),
470
- Name : aws .String ("private.com" ),
471
- Type : aws .String (sd .NamespaceTypeDnsPrivate ),
472
- },
473
- }
474
-
475
- services := map [string ]map [string ]* sd.Service {
476
- "private" : {
477
- "srv1" : {
478
- Id : aws .String ("srv1" ),
479
- Name : aws .String ("service1" ),
480
- },
481
- "srv2" : {
482
- Id : aws .String ("srv2" ),
483
- Name : aws .String ("service2" ),
484
- },
485
- },
486
- }
487
-
488
- instances := map [string ]map [string ]* sd.Instance {
489
- "srv1" : {
490
- "inst1" : {
491
- Id : aws .String ("inst1" ),
492
- Attributes : map [string ]* string {
493
- sdInstanceAttrIPV4 : aws .String ("1.2.3.4" ),
494
- },
495
- },
496
- "inst2" : {
497
- Id : aws .String ("inst2" ),
498
- Attributes : map [string ]* string {
499
- sdInstanceAttrIPV4 : aws .String ("1.2.3.5" ),
500
- },
501
- },
502
- },
503
- }
504
-
505
- api := & AWSSDClientStub {
506
- namespaces : namespaces ,
507
- services : services ,
508
- instances : instances ,
509
- }
510
-
511
- provider := newTestAWSSDProvider (api , endpoint .NewDomainFilter ([]string {}), "" , "" )
512
-
513
- result , err := provider .ListInstancesByServiceID (services ["private" ]["srv1" ].Id )
514
- require .NoError (t , err )
515
-
516
- expectedInstances := []* sd.InstanceSummary {instanceToInstanceSummary (instances ["srv1" ]["inst1" ]), instanceToInstanceSummary (instances ["srv1" ]["inst2" ])}
517
-
518
- expectedMap := make (map [string ]* sd.InstanceSummary )
519
- resultMap := make (map [string ]* sd.InstanceSummary )
520
- for _ , inst := range expectedInstances {
521
- expectedMap [* inst .Id ] = inst
522
- }
523
- for _ , inst := range result {
524
- resultMap [* inst .Id ] = inst
525
- }
526
-
527
- if ! reflect .DeepEqual (resultMap , expectedMap ) {
528
- t .Errorf ("AWSSDProvider.ListInstancesByServiceID() error = %v, wantErr %v" , result , expectedInstances )
529
- }
530
- }
531
-
532
497
func TestAWSSDProvider_CreateService (t * testing.T ) {
533
498
namespaces := map [string ]* sd.Namespace {
534
499
"private" : {
0 commit comments