github.com/wozhu6104/docker@v20.10.10+incompatible/integration/system/info_linux_test.go (about) 1 // +build !windows 2 3 package system // import "github.com/docker/docker/integration/system" 4 5 import ( 6 "context" 7 "fmt" 8 "net" 9 "net/http" 10 "testing" 11 12 "github.com/docker/docker/testutil/daemon" 13 req "github.com/docker/docker/testutil/request" 14 "gotest.tools/v3/assert" 15 is "gotest.tools/v3/assert/cmp" 16 "gotest.tools/v3/skip" 17 ) 18 19 func TestInfoBinaryCommits(t *testing.T) { 20 defer setupTest(t)() 21 client := testEnv.APIClient() 22 23 info, err := client.Info(context.Background()) 24 assert.NilError(t, err) 25 26 assert.Check(t, "N/A" != info.ContainerdCommit.ID) 27 assert.Check(t, is.Equal(info.ContainerdCommit.Expected, info.ContainerdCommit.ID)) 28 29 assert.Check(t, "N/A" != info.InitCommit.ID) 30 assert.Check(t, is.Equal(info.InitCommit.Expected, info.InitCommit.ID)) 31 32 assert.Check(t, "N/A" != info.RuncCommit.ID) 33 assert.Check(t, is.Equal(info.RuncCommit.Expected, info.RuncCommit.ID)) 34 } 35 36 func TestInfoAPIVersioned(t *testing.T) { 37 // Windows only supports 1.25 or later 38 39 res, body, err := req.Get("/v1.20/info") 40 assert.NilError(t, err) 41 assert.Check(t, is.DeepEqual(res.StatusCode, http.StatusOK)) 42 43 b, err := req.ReadBody(body) 44 assert.NilError(t, err) 45 46 out := string(b) 47 assert.Check(t, is.Contains(out, "ExecutionDriver")) 48 assert.Check(t, is.Contains(out, "not supported")) 49 } 50 51 // TestInfoDiscoveryBackend verifies that a daemon run with `--cluster-advertise` and 52 // `--cluster-store` properly returns the backend's endpoint in info output. 53 func TestInfoDiscoveryBackend(t *testing.T) { 54 skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") 55 56 const ( 57 discoveryBackend = "consul://consuladdr:consulport/some/path" 58 discoveryAdvertise = "1.1.1.1:2375" 59 ) 60 61 d := daemon.New(t) 62 d.Start(t, "--cluster-store="+discoveryBackend, "--cluster-advertise="+discoveryAdvertise) 63 defer d.Stop(t) 64 65 info := d.Info(t) 66 assert.Equal(t, info.ClusterStore, discoveryBackend) 67 assert.Equal(t, info.ClusterAdvertise, discoveryAdvertise) 68 } 69 70 // TestInfoDiscoveryInvalidAdvertise verifies that a daemon run with 71 // an invalid `--cluster-advertise` configuration 72 func TestInfoDiscoveryInvalidAdvertise(t *testing.T) { 73 skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") 74 d := daemon.New(t) 75 76 // --cluster-advertise with an invalid string is an error 77 err := d.StartWithError("--cluster-store=consul://consuladdr:consulport/some/path", "--cluster-advertise=invalid") 78 if err == nil { 79 d.Stop(t) 80 } 81 assert.ErrorContains(t, err, "", "expected error when starting daemon") 82 83 // --cluster-advertise without --cluster-store is also an error 84 err = d.StartWithError("--cluster-advertise=1.1.1.1:2375") 85 if err == nil { 86 d.Stop(t) 87 } 88 assert.ErrorContains(t, err, "", "expected error when starting daemon") 89 } 90 91 // TestInfoDiscoveryAdvertiseInterfaceName verifies that a daemon run with `--cluster-advertise` 92 // configured with interface name properly show the advertise ip-address in info output. 93 func TestInfoDiscoveryAdvertiseInterfaceName(t *testing.T) { 94 skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon") 95 skip.If(t, testEnv.IsRootless, "rootless mode has different view of network") 96 // TODO should we check for networking availability (integration-cli suite checks for networking through `Network()`) 97 98 d := daemon.New(t) 99 const ( 100 discoveryStore = "consul://consuladdr:consulport/some/path" 101 discoveryInterface = "eth0" 102 ) 103 104 d.Start(t, "--cluster-store="+discoveryStore, fmt.Sprintf("--cluster-advertise=%s:2375", discoveryInterface)) 105 defer d.Stop(t) 106 107 iface, err := net.InterfaceByName(discoveryInterface) 108 assert.NilError(t, err) 109 addrs, err := iface.Addrs() 110 assert.NilError(t, err) 111 assert.Assert(t, len(addrs) > 0) 112 ip, _, err := net.ParseCIDR(addrs[0].String()) 113 assert.NilError(t, err) 114 115 info := d.Info(t) 116 assert.Equal(t, info.ClusterStore, discoveryStore) 117 assert.Equal(t, info.ClusterAdvertise, ip.String()+":2375") 118 }