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