service_common_test.go 4.0 KB

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