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