github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/integration/system/ping_test.go (about) 1 package system // import "github.com/docker/docker/integration/system" 2 3 import ( 4 "context" 5 "net/http" 6 "os" 7 "path/filepath" 8 "runtime" 9 "strings" 10 "testing" 11 12 "github.com/docker/docker/api/types" 13 "github.com/docker/docker/api/types/swarm" 14 "github.com/docker/docker/api/types/versions" 15 "github.com/docker/docker/testutil/daemon" 16 "github.com/docker/docker/testutil/request" 17 "gotest.tools/v3/assert" 18 "gotest.tools/v3/skip" 19 ) 20 21 func TestPingCacheHeaders(t *testing.T) { 22 skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature") 23 defer setupTest(t)() 24 25 res, _, err := request.Get("/_ping") 26 assert.NilError(t, err) 27 assert.Equal(t, res.StatusCode, http.StatusOK) 28 29 assert.Equal(t, hdr(res, "Cache-Control"), "no-cache, no-store, must-revalidate") 30 assert.Equal(t, hdr(res, "Pragma"), "no-cache") 31 } 32 33 func TestPingGet(t *testing.T) { 34 defer setupTest(t)() 35 36 res, body, err := request.Get("/_ping") 37 assert.NilError(t, err) 38 39 b, err := request.ReadBody(body) 40 assert.NilError(t, err) 41 assert.Equal(t, string(b), "OK") 42 assert.Equal(t, res.StatusCode, http.StatusOK) 43 assert.Check(t, hdr(res, "API-Version") != "") 44 } 45 46 func TestPingHead(t *testing.T) { 47 skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "skip test from new feature") 48 defer setupTest(t)() 49 50 res, body, err := request.Head("/_ping") 51 assert.NilError(t, err) 52 53 b, err := request.ReadBody(body) 54 assert.NilError(t, err) 55 assert.Equal(t, 0, len(b)) 56 assert.Equal(t, res.StatusCode, http.StatusOK) 57 assert.Check(t, hdr(res, "API-Version") != "") 58 } 59 60 func TestPingSwarmHeader(t *testing.T) { 61 skip.If(t, testEnv.IsRemoteDaemon) 62 skip.If(t, testEnv.DaemonInfo.OSType == "windows") 63 64 defer setupTest(t)() 65 d := daemon.New(t) 66 d.Start(t) 67 defer d.Stop(t) 68 client := d.NewClientT(t) 69 defer client.Close() 70 ctx := context.TODO() 71 72 t.Run("before swarm init", func(t *testing.T) { 73 p, err := client.Ping(ctx) 74 assert.NilError(t, err) 75 assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateInactive) 76 assert.Equal(t, p.SwarmStatus.ControlAvailable, false) 77 }) 78 79 _, err := client.SwarmInit(ctx, swarm.InitRequest{ListenAddr: "127.0.0.1", AdvertiseAddr: "127.0.0.1:2377"}) 80 assert.NilError(t, err) 81 82 t.Run("after swarm init", func(t *testing.T) { 83 p, err := client.Ping(ctx) 84 assert.NilError(t, err) 85 assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateActive) 86 assert.Equal(t, p.SwarmStatus.ControlAvailable, true) 87 }) 88 89 err = client.SwarmLeave(ctx, true) 90 assert.NilError(t, err) 91 92 t.Run("after swarm leave", func(t *testing.T) { 93 p, err := client.Ping(ctx) 94 assert.NilError(t, err) 95 assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateInactive) 96 assert.Equal(t, p.SwarmStatus.ControlAvailable, false) 97 }) 98 } 99 100 func TestPingBuilderHeader(t *testing.T) { 101 skip.If(t, testEnv.IsRemoteDaemon) 102 skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot spin up additional daemons on windows") 103 104 defer setupTest(t)() 105 d := daemon.New(t) 106 client := d.NewClientT(t) 107 defer client.Close() 108 ctx := context.TODO() 109 110 t.Run("default config", func(t *testing.T) { 111 d.Start(t) 112 defer d.Stop(t) 113 114 var expected = types.BuilderBuildKit 115 if runtime.GOOS == "windows" { 116 expected = types.BuilderV1 117 } 118 119 p, err := client.Ping(ctx) 120 assert.NilError(t, err) 121 assert.Equal(t, p.BuilderVersion, expected) 122 }) 123 124 t.Run("buildkit disabled", func(t *testing.T) { 125 cfg := filepath.Join(d.RootDir(), "daemon.json") 126 err := os.WriteFile(cfg, []byte(`{"features": { "buildkit": false }}`), 0644) 127 assert.NilError(t, err) 128 d.Start(t, "--config-file", cfg) 129 defer d.Stop(t) 130 131 var expected = types.BuilderV1 132 p, err := client.Ping(ctx) 133 assert.NilError(t, err) 134 assert.Equal(t, p.BuilderVersion, expected) 135 }) 136 } 137 138 func hdr(res *http.Response, name string) string { 139 val, ok := res.Header[http.CanonicalHeaderKey(name)] 140 if !ok || len(val) == 0 { 141 return "" 142 } 143 return strings.Join(val, ", ") 144 }