github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/integration/system/ping_test.go (about) 1 package system // import "github.com/Prakhar-Agarwal-byte/moby/integration/system" 2 3 import ( 4 "net/http" 5 "os" 6 "path/filepath" 7 "runtime" 8 "strings" 9 "testing" 10 11 "github.com/Prakhar-Agarwal-byte/moby/api/types" 12 "github.com/Prakhar-Agarwal-byte/moby/api/types/swarm" 13 "github.com/Prakhar-Agarwal-byte/moby/api/types/versions" 14 "github.com/Prakhar-Agarwal-byte/moby/testutil" 15 "github.com/Prakhar-Agarwal-byte/moby/testutil/daemon" 16 "github.com/Prakhar-Agarwal-byte/moby/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 ctx := setupTest(t) 24 25 res, _, err := request.Get(ctx, "/_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 ctx := setupTest(t) 35 36 res, body, err := request.Get(ctx, "/_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 ctx := setupTest(t) 49 50 res, body, err := request.Head(ctx, "/_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 ctx := 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 71 t.Run("before swarm init", func(t *testing.T) { 72 ctx := testutil.StartSpan(ctx, 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 ctx := testutil.StartSpan(ctx, t) 84 p, err := client.Ping(ctx) 85 assert.NilError(t, err) 86 assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateActive) 87 assert.Equal(t, p.SwarmStatus.ControlAvailable, true) 88 }) 89 90 err = client.SwarmLeave(ctx, true) 91 assert.NilError(t, err) 92 93 t.Run("after swarm leave", func(t *testing.T) { 94 ctx := testutil.StartSpan(ctx, t) 95 p, err := client.Ping(ctx) 96 assert.NilError(t, err) 97 assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateInactive) 98 assert.Equal(t, p.SwarmStatus.ControlAvailable, false) 99 }) 100 } 101 102 func TestPingBuilderHeader(t *testing.T) { 103 skip.If(t, testEnv.IsRemoteDaemon) 104 skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot spin up additional daemons on windows") 105 106 ctx := setupTest(t) 107 d := daemon.New(t) 108 client := d.NewClientT(t) 109 defer client.Close() 110 111 t.Run("default config", func(t *testing.T) { 112 testutil.StartSpan(ctx, t) 113 d.Start(t) 114 defer d.Stop(t) 115 116 expected := types.BuilderBuildKit 117 if runtime.GOOS == "windows" { 118 expected = types.BuilderV1 119 } 120 121 p, err := client.Ping(ctx) 122 assert.NilError(t, err) 123 assert.Equal(t, p.BuilderVersion, expected) 124 }) 125 126 t.Run("buildkit disabled", func(t *testing.T) { 127 testutil.StartSpan(ctx, t) 128 cfg := filepath.Join(d.RootDir(), "daemon.json") 129 err := os.WriteFile(cfg, []byte(`{"features": { "buildkit": false }}`), 0o644) 130 assert.NilError(t, err) 131 d.Start(t, "--config-file", cfg) 132 defer d.Stop(t) 133 134 expected := types.BuilderV1 135 p, err := client.Ping(ctx) 136 assert.NilError(t, err) 137 assert.Equal(t, p.BuilderVersion, expected) 138 }) 139 } 140 141 func hdr(res *http.Response, name string) string { 142 val, ok := res.Header[http.CanonicalHeaderKey(name)] 143 if !ok || len(val) == 0 { 144 return "" 145 } 146 return strings.Join(val, ", ") 147 }