github.com/rawahars/moby@v24.0.4+incompatible/libnetwork/service_common_test.go (about)

     1  package libnetwork
     2  
     3  import (
     4  	"net"
     5  	"runtime"
     6  	"testing"
     7  
     8  	"github.com/docker/docker/libnetwork/resolvconf"
     9  	"github.com/docker/docker/libnetwork/testutils"
    10  	"gotest.tools/v3/assert"
    11  	is "gotest.tools/v3/assert/cmp"
    12  	"gotest.tools/v3/skip"
    13  )
    14  
    15  func TestCleanupServiceDiscovery(t *testing.T) {
    16  	skip.If(t, runtime.GOOS == "windows", "test only works on linux")
    17  
    18  	defer testutils.SetupTestOSContext(t)()
    19  	c, err := New()
    20  	assert.NilError(t, err)
    21  	defer c.Stop()
    22  
    23  	cleanup := func(n Network) {
    24  		if err := n.Delete(); err != nil {
    25  			t.Error(err)
    26  		}
    27  	}
    28  	n1, err := c.NewNetwork("bridge", "net1", "", nil)
    29  	assert.NilError(t, err)
    30  	defer cleanup(n1)
    31  
    32  	n2, err := c.NewNetwork("bridge", "net2", "", nil)
    33  	assert.NilError(t, err)
    34  	defer cleanup(n2)
    35  
    36  	n1.(*network).addSvcRecords("N1ep1", "service_test", "serviceID1", net.ParseIP("192.168.0.1"), net.IP{}, true, "test")
    37  	n1.(*network).addSvcRecords("N2ep2", "service_test", "serviceID2", net.ParseIP("192.168.0.2"), net.IP{}, true, "test")
    38  
    39  	n2.(*network).addSvcRecords("N2ep1", "service_test", "serviceID1", net.ParseIP("192.168.1.1"), net.IP{}, true, "test")
    40  	n2.(*network).addSvcRecords("N2ep2", "service_test", "serviceID2", net.ParseIP("192.168.1.2"), net.IP{}, true, "test")
    41  
    42  	if len(c.svcRecords) != 2 {
    43  		t.Fatalf("Service record not added correctly:%v", c.svcRecords)
    44  	}
    45  
    46  	// cleanup net1
    47  	c.cleanupServiceDiscovery(n1.ID())
    48  
    49  	if len(c.svcRecords) != 1 {
    50  		t.Fatalf("Service record not cleaned correctly:%v", c.svcRecords)
    51  	}
    52  
    53  	c.cleanupServiceDiscovery("")
    54  
    55  	if len(c.svcRecords) != 0 {
    56  		t.Fatalf("Service record not cleaned correctly:%v", c.svcRecords)
    57  	}
    58  }
    59  
    60  func TestDNSOptions(t *testing.T) {
    61  	skip.If(t, runtime.GOOS == "windows", "test only works on linux")
    62  
    63  	c, err := New()
    64  	assert.NilError(t, err)
    65  
    66  	sb, err := c.NewSandbox("cnt1", nil)
    67  	assert.NilError(t, err)
    68  
    69  	cleanup := func(s *Sandbox) {
    70  		if err := s.Delete(); err != nil {
    71  			t.Error(err)
    72  		}
    73  	}
    74  
    75  	defer cleanup(sb)
    76  	sb.startResolver(false)
    77  
    78  	err = sb.setupDNS()
    79  	assert.NilError(t, err)
    80  	err = sb.rebuildDNS()
    81  	assert.NilError(t, err)
    82  	currRC, err := resolvconf.GetSpecific(sb.config.resolvConfPath)
    83  	assert.NilError(t, err)
    84  	dnsOptionsList := resolvconf.GetOptions(currRC.Content)
    85  	assert.Check(t, is.Len(dnsOptionsList, 1))
    86  	assert.Check(t, is.Equal("ndots:0", dnsOptionsList[0]))
    87  
    88  	sb.config.dnsOptionsList = []string{"ndots:5"}
    89  	err = sb.setupDNS()
    90  	assert.NilError(t, err)
    91  	currRC, err = resolvconf.GetSpecific(sb.config.resolvConfPath)
    92  	assert.NilError(t, err)
    93  	dnsOptionsList = resolvconf.GetOptions(currRC.Content)
    94  	assert.Check(t, is.Len(dnsOptionsList, 1))
    95  	assert.Check(t, is.Equal("ndots:5", dnsOptionsList[0]))
    96  
    97  	err = sb.rebuildDNS()
    98  	assert.NilError(t, err)
    99  	currRC, err = resolvconf.GetSpecific(sb.config.resolvConfPath)
   100  	assert.NilError(t, err)
   101  	dnsOptionsList = resolvconf.GetOptions(currRC.Content)
   102  	assert.Check(t, is.Len(dnsOptionsList, 1))
   103  	assert.Check(t, is.Equal("ndots:5", dnsOptionsList[0]))
   104  
   105  	sb2, err := c.NewSandbox("cnt2", nil)
   106  	assert.NilError(t, err)
   107  	defer cleanup(sb2)
   108  	sb2.startResolver(false)
   109  
   110  	sb2.config.dnsOptionsList = []string{"ndots:0"}
   111  	err = sb2.setupDNS()
   112  	assert.NilError(t, err)
   113  	err = sb2.rebuildDNS()
   114  	assert.NilError(t, err)
   115  	currRC, err = resolvconf.GetSpecific(sb2.config.resolvConfPath)
   116  	assert.NilError(t, err)
   117  	dnsOptionsList = resolvconf.GetOptions(currRC.Content)
   118  	assert.Check(t, is.Len(dnsOptionsList, 1))
   119  	assert.Check(t, is.Equal("ndots:0", dnsOptionsList[0]))
   120  
   121  	sb2.config.dnsOptionsList = []string{"ndots:foobar"}
   122  	err = sb2.setupDNS()
   123  	assert.NilError(t, err)
   124  	err = sb2.rebuildDNS()
   125  	assert.Error(t, err, "invalid number for ndots option: foobar")
   126  
   127  	sb2.config.dnsOptionsList = []string{"ndots:-1"}
   128  	err = sb2.setupDNS()
   129  	assert.NilError(t, err)
   130  	err = sb2.rebuildDNS()
   131  	assert.Error(t, err, "invalid number for ndots option: -1")
   132  }