@@ -318,6 +318,106 @@ func TestAuxAddresses(t *testing.T) {
318318 }
319319}
320320
321+ func TestSRVServiceQuery (t * testing.T ) {
322+ c , err := New ()
323+ if err != nil {
324+ t .Fatal (err )
325+ }
326+ defer c .Stop ()
327+
328+ n , err := c .NewNetwork ("bridge" , "net1" , "" , nil )
329+ if err != nil {
330+ t .Fatal (err )
331+ }
332+ defer func () {
333+ if err := n .Delete (); err != nil {
334+ t .Fatal (err )
335+ }
336+ }()
337+
338+ ep , err := n .CreateEndpoint ("testep" )
339+ if err != nil {
340+ t .Fatal (err )
341+ }
342+
343+ sb , err := c .NewSandbox ("c1" )
344+ if err != nil {
345+ t .Fatal (err )
346+ }
347+ defer func () {
348+ if err := sb .Delete (); err != nil {
349+ t .Fatal (err )
350+ }
351+ }()
352+
353+ err = ep .Join (sb )
354+ if err != nil {
355+ t .Fatal (err )
356+ }
357+
358+ sr := svcInfo {
359+ svcMap : make (map [string ][]net.IP ),
360+ svcIPv6Map : make (map [string ][]net.IP ),
361+ ipMap : make (map [string ]string ),
362+ service : make (map [string ][]servicePorts ),
363+ }
364+ // backing container for the service
365+ cTarget := serviceTarget {
366+ name : "task1.web.swarm" ,
367+ ip : net .ParseIP ("192.168.10.2" ),
368+ port : 80 ,
369+ }
370+ // backing host for the service
371+ hTarget := serviceTarget {
372+ name : "node1.docker-cluster" ,
373+ ip : net .ParseIP ("10.10.10.2" ),
374+ port : 45321 ,
375+ }
376+ httpPort := servicePorts {
377+ portName : "_http" ,
378+ proto : "_tcp" ,
379+ target : []serviceTarget {cTarget },
380+ }
381+
382+ extHTTPPort := servicePorts {
383+ portName : "_host_http" ,
384+ proto : "_tcp" ,
385+ target : []serviceTarget {hTarget },
386+ }
387+ sr .service ["web.swarm" ] = append (sr .service ["web.swarm" ], httpPort )
388+ sr .service ["web.swarm" ] = append (sr .service ["web.swarm" ], extHTTPPort )
389+
390+ c .(* controller ).svcRecords [n .ID ()] = sr
391+
392+ _ , ip , err := ep .Info ().Sandbox ().ResolveService ("_http._tcp.web.swarm" )
393+ if err != nil {
394+ t .Fatal (err )
395+ }
396+ if len (ip ) == 0 {
397+ t .Fatal (err )
398+ }
399+ if ip [0 ].String () != "192.168.10.2" {
400+ t .Fatal (err )
401+ }
402+
403+ _ , ip , err = ep .Info ().Sandbox ().ResolveService ("_host_http._tcp.web.swarm" )
404+ if err != nil {
405+ t .Fatal (err )
406+ }
407+ if len (ip ) == 0 {
408+ t .Fatal (err )
409+ }
410+ if ip [0 ].String () != "10.10.10.2" {
411+ t .Fatal (err )
412+ }
413+
414+ // Try resolving a service name with invalid protocol, should fail..
415+ _ , _ , err = ep .Info ().Sandbox ().ResolveService ("_http._icmp.web.swarm" )
416+ if err == nil {
417+ t .Fatal (err )
418+ }
419+ }
420+
321421func TestIpamReleaseOnNetDriverFailures (t * testing.T ) {
322422 if ! testutils .IsRunningInContainer () {
323423 defer testutils .SetupTestOSContext (t )()
0 commit comments