network_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package service // import "github.com/docker/docker/integration/service"
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/api/types/network"
  7. "github.com/docker/docker/integration/internal/container"
  8. net "github.com/docker/docker/integration/internal/network"
  9. "github.com/docker/docker/integration/internal/swarm"
  10. "gotest.tools/v3/assert"
  11. is "gotest.tools/v3/assert/cmp"
  12. "gotest.tools/v3/skip"
  13. )
  14. func TestDockerNetworkConnectAlias(t *testing.T) {
  15. skip.If(t, testEnv.DaemonInfo.OSType == "windows")
  16. defer setupTest(t)()
  17. d := swarm.NewSwarm(t, testEnv)
  18. defer d.Stop(t)
  19. client := d.NewClientT(t)
  20. defer client.Close()
  21. ctx := context.Background()
  22. name := t.Name() + "test-alias"
  23. net.CreateNoError(ctx, t, client, name,
  24. net.WithDriver("overlay"),
  25. net.WithAttachable(),
  26. )
  27. cID1 := container.Create(ctx, t, client, func(c *container.TestContainerConfig) {
  28. c.NetworkingConfig = &network.NetworkingConfig{
  29. EndpointsConfig: map[string]*network.EndpointSettings{
  30. name: {},
  31. },
  32. }
  33. })
  34. err := client.NetworkConnect(ctx, name, cID1, &network.EndpointSettings{
  35. Aliases: []string{
  36. "aaa",
  37. },
  38. })
  39. assert.NilError(t, err)
  40. err = client.ContainerStart(ctx, cID1, types.ContainerStartOptions{})
  41. assert.NilError(t, err)
  42. ng1, err := client.ContainerInspect(ctx, cID1)
  43. assert.NilError(t, err)
  44. assert.Check(t, is.Equal(len(ng1.NetworkSettings.Networks[name].Aliases), 2))
  45. assert.Check(t, is.Equal(ng1.NetworkSettings.Networks[name].Aliases[0], "aaa"))
  46. cID2 := container.Create(ctx, t, client, func(c *container.TestContainerConfig) {
  47. c.NetworkingConfig = &network.NetworkingConfig{
  48. EndpointsConfig: map[string]*network.EndpointSettings{
  49. name: {},
  50. },
  51. }
  52. })
  53. err = client.NetworkConnect(ctx, name, cID2, &network.EndpointSettings{
  54. Aliases: []string{
  55. "bbb",
  56. },
  57. })
  58. assert.NilError(t, err)
  59. err = client.ContainerStart(ctx, cID2, types.ContainerStartOptions{})
  60. assert.NilError(t, err)
  61. ng2, err := client.ContainerInspect(ctx, cID2)
  62. assert.NilError(t, err)
  63. assert.Check(t, is.Equal(len(ng2.NetworkSettings.Networks[name].Aliases), 2))
  64. assert.Check(t, is.Equal(ng2.NetworkSettings.Networks[name].Aliases[0], "bbb"))
  65. }
  66. func TestDockerNetworkReConnect(t *testing.T) {
  67. skip.If(t, testEnv.DaemonInfo.OSType == "windows")
  68. defer setupTest(t)()
  69. d := swarm.NewSwarm(t, testEnv)
  70. defer d.Stop(t)
  71. client := d.NewClientT(t)
  72. defer client.Close()
  73. ctx := context.Background()
  74. name := t.Name() + "dummyNet"
  75. net.CreateNoError(ctx, t, client, name,
  76. net.WithDriver("overlay"),
  77. net.WithAttachable(),
  78. )
  79. c1 := container.Create(ctx, t, client, func(c *container.TestContainerConfig) {
  80. c.NetworkingConfig = &network.NetworkingConfig{
  81. EndpointsConfig: map[string]*network.EndpointSettings{
  82. name: {},
  83. },
  84. }
  85. })
  86. err := client.NetworkConnect(ctx, name, c1, &network.EndpointSettings{})
  87. assert.NilError(t, err)
  88. err = client.ContainerStart(ctx, c1, types.ContainerStartOptions{})
  89. assert.NilError(t, err)
  90. n1, err := client.ContainerInspect(ctx, c1)
  91. assert.NilError(t, err)
  92. err = client.NetworkConnect(ctx, name, c1, &network.EndpointSettings{})
  93. assert.ErrorContains(t, err, "is already attached to network")
  94. n2, err := client.ContainerInspect(ctx, c1)
  95. assert.NilError(t, err)
  96. assert.Check(t, is.DeepEqual(n1, n2))
  97. }