inspect_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package network // import "github.com/docker/docker/integration/network"
  2. import (
  3. "testing"
  4. "github.com/docker/docker/api/types"
  5. "github.com/docker/docker/integration/internal/network"
  6. "github.com/docker/docker/integration/internal/swarm"
  7. "github.com/docker/docker/testutil"
  8. "gotest.tools/v3/assert"
  9. "gotest.tools/v3/poll"
  10. "gotest.tools/v3/skip"
  11. )
  12. func TestInspectNetwork(t *testing.T) {
  13. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME")
  14. skip.If(t, testEnv.IsRootless, "rootless mode doesn't support Swarm-mode")
  15. ctx := setupTest(t)
  16. d := swarm.NewSwarm(ctx, t, testEnv)
  17. defer d.Stop(t)
  18. c := d.NewClientT(t)
  19. defer c.Close()
  20. networkName := "Overlay" + t.Name()
  21. overlayID := network.CreateNoError(ctx, t, c, networkName,
  22. network.WithDriver("overlay"),
  23. )
  24. var instances uint64 = 2
  25. serviceName := "TestService" + t.Name()
  26. serviceID := swarm.CreateService(ctx, t, d,
  27. swarm.ServiceWithReplicas(instances),
  28. swarm.ServiceWithName(serviceName),
  29. swarm.ServiceWithNetwork(networkName),
  30. )
  31. poll.WaitOn(t, swarm.RunningTasksCount(ctx, c, serviceID, instances), swarm.ServicePoll)
  32. tests := []struct {
  33. name string
  34. network string
  35. opts types.NetworkInspectOptions
  36. }{
  37. {
  38. name: "full network id",
  39. network: overlayID,
  40. opts: types.NetworkInspectOptions{
  41. Verbose: true,
  42. },
  43. },
  44. {
  45. name: "partial network id",
  46. network: overlayID[0:11],
  47. opts: types.NetworkInspectOptions{
  48. Verbose: true,
  49. },
  50. },
  51. {
  52. name: "network name",
  53. network: networkName,
  54. opts: types.NetworkInspectOptions{
  55. Verbose: true,
  56. },
  57. },
  58. {
  59. name: "network name and swarm scope",
  60. network: networkName,
  61. opts: types.NetworkInspectOptions{
  62. Verbose: true,
  63. Scope: "swarm",
  64. },
  65. },
  66. }
  67. for _, tc := range tests {
  68. tc := tc
  69. t.Run(tc.name, func(t *testing.T) {
  70. ctx := testutil.StartSpan(ctx, t)
  71. nw, err := c.NetworkInspect(ctx, tc.network, tc.opts)
  72. assert.NilError(t, err)
  73. if service, ok := nw.Services[serviceName]; ok {
  74. assert.Equal(t, len(service.Tasks), int(instances))
  75. }
  76. assert.Assert(t, nw.IPAM.Config != nil)
  77. for _, cfg := range nw.IPAM.Config {
  78. assert.Assert(t, cfg.Gateway != "")
  79. assert.Assert(t, cfg.Subnet != "")
  80. }
  81. })
  82. }
  83. // TODO find out why removing networks is needed; other tests fail if the network is not removed, even though they run on a new daemon.
  84. err := c.ServiceRemove(ctx, serviceID)
  85. assert.NilError(t, err)
  86. poll.WaitOn(t, swarm.NoTasksForService(ctx, c, serviceID), swarm.ServicePoll)
  87. err = c.NetworkRemove(ctx, overlayID)
  88. assert.NilError(t, err)
  89. poll.WaitOn(t, network.IsRemoved(ctx, c, overlayID), swarm.NetworkPoll)
  90. }