| // +build !windows |
| |
| package system // import "github.com/docker/docker/integration/system" |
| |
| import ( |
| "context" |
| "fmt" |
| "net" |
| "net/http" |
| "testing" |
| |
| "github.com/docker/docker/testutil/daemon" |
| req "github.com/docker/docker/testutil/request" |
| "gotest.tools/v3/assert" |
| is "gotest.tools/v3/assert/cmp" |
| "gotest.tools/v3/skip" |
| ) |
| |
| func TestInfoBinaryCommits(t *testing.T) { |
| defer setupTest(t)() |
| client := testEnv.APIClient() |
| |
| info, err := client.Info(context.Background()) |
| assert.NilError(t, err) |
| |
| assert.Check(t, "N/A" != info.ContainerdCommit.ID) |
| assert.Check(t, is.Equal(info.ContainerdCommit.Expected, info.ContainerdCommit.ID)) |
| |
| assert.Check(t, "N/A" != info.InitCommit.ID) |
| assert.Check(t, is.Equal(info.InitCommit.Expected, info.InitCommit.ID)) |
| |
| assert.Check(t, "N/A" != info.RuncCommit.ID) |
| assert.Check(t, is.Equal(info.RuncCommit.Expected, info.RuncCommit.ID)) |
| } |
| |
| func TestInfoAPIVersioned(t *testing.T) { |
| // Windows only supports 1.25 or later |
| |
| res, body, err := req.Get("/v1.20/info") |
| assert.NilError(t, err) |
| assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusOK)) |
| |
| b, err := req.ReadBody(body) |
| assert.NilError(t, err) |
| |
| out := string(b) |
| assert.Check(t, is.Contains(out, "ExecutionDriver")) |
| assert.Check(t, is.Contains(out, "not supported")) |
| } |
| |
| // TestInfoDiscoveryBackend verifies that a daemon run with `--cluster-advertise` and |
| // `--cluster-store` properly returns the backend's endpoint in info output. |
| func TestInfoDiscoveryBackend(t *testing.T) { |
| skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") |
| |
| const ( |
| discoveryBackend = "consul://consuladdr:consulport/some/path" |
| discoveryAdvertise = "1.1.1.1:2375" |
| ) |
| |
| d := daemon.New(t) |
| d.Start(t, "--cluster-store="+discoveryBackend, "--cluster-advertise="+discoveryAdvertise) |
| defer d.Stop(t) |
| |
| info := d.Info(t) |
| assert.Equal(t, info.ClusterStore, discoveryBackend) |
| assert.Equal(t, info.ClusterAdvertise, discoveryAdvertise) |
| } |
| |
| // TestInfoDiscoveryInvalidAdvertise verifies that a daemon run with |
| // an invalid `--cluster-advertise` configuration |
| func TestInfoDiscoveryInvalidAdvertise(t *testing.T) { |
| skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") |
| d := daemon.New(t) |
| |
| // --cluster-advertise with an invalid string is an error |
| err := d.StartWithError("--cluster-store=consul://consuladdr:consulport/some/path", "--cluster-advertise=invalid") |
| if err == nil { |
| d.Stop(t) |
| } |
| assert.ErrorContains(t, err, "", "expected error when starting daemon") |
| |
| // --cluster-advertise without --cluster-store is also an error |
| err = d.StartWithError("--cluster-advertise=1.1.1.1:2375") |
| if err == nil { |
| d.Stop(t) |
| } |
| assert.ErrorContains(t, err, "", "expected error when starting daemon") |
| } |
| |
| // TestInfoDiscoveryAdvertiseInterfaceName verifies that a daemon run with `--cluster-advertise` |
| // configured with interface name properly show the advertise ip-address in info output. |
| func TestInfoDiscoveryAdvertiseInterfaceName(t *testing.T) { |
| skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") |
| skip.If(t, testEnv.IsRootless, "rootless mode has different view of network") |
| // TODO should we check for networking availability (integration-cli suite checks for networking through `Network()`) |
| |
| d := daemon.New(t) |
| const ( |
| discoveryStore = "consul://consuladdr:consulport/some/path" |
| discoveryInterface = "eth0" |
| ) |
| |
| d.Start(t, "--cluster-store="+discoveryStore, fmt.Sprintf("--cluster-advertise=%s:2375", discoveryInterface)) |
| defer d.Stop(t) |
| |
| iface, err := net.InterfaceByName(discoveryInterface) |
| assert.NilError(t, err) |
| addrs, err := iface.Addrs() |
| assert.NilError(t, err) |
| assert.Assert(t, len(addrs) > 0) |
| ip, _, err := net.ParseCIDR(addrs[0].String()) |
| assert.NilError(t, err) |
| |
| info := d.Info(t) |
| assert.Equal(t, info.ClusterStore, discoveryStore) |
| assert.Equal(t, info.ClusterAdvertise, ip.String()+":2375") |
| } |