| package system |
| |
| import ( |
| "net/http" |
| "os" |
| "path/filepath" |
| "runtime" |
| "testing" |
| |
| "github.com/moby/moby/api/types/build" |
| "github.com/moby/moby/api/types/swarm" |
| "github.com/moby/moby/client" |
| "github.com/moby/moby/v2/internal/testutil" |
| "github.com/moby/moby/v2/internal/testutil/daemon" |
| "github.com/moby/moby/v2/internal/testutil/request" |
| "gotest.tools/v3/assert" |
| is "gotest.tools/v3/assert/cmp" |
| "gotest.tools/v3/skip" |
| ) |
| |
| func TestPingCacheHeaders(t *testing.T) { |
| ctx := setupTest(t) |
| |
| res, _, err := request.Get(ctx, "/_ping") |
| assert.NilError(t, err) |
| assert.Equal(t, res.StatusCode, http.StatusOK) |
| |
| assert.Assert(t, is.DeepEqual(res.Header.Values("Cache-Control"), []string{"no-cache, no-store, must-revalidate"})) |
| assert.Assert(t, is.DeepEqual(res.Header.Values("Pragma"), []string{"no-cache"})) |
| } |
| |
| func TestPingGet(t *testing.T) { |
| ctx := setupTest(t) |
| |
| res, body, err := request.Get(ctx, "/_ping") |
| assert.NilError(t, err) |
| |
| b, err := request.ReadBody(body) |
| assert.NilError(t, err) |
| assert.Equal(t, string(b), "OK") |
| assert.Equal(t, res.StatusCode, http.StatusOK) |
| assert.Check(t, res.Header.Get("Api-Version") != "") |
| } |
| |
| func TestPingHead(t *testing.T) { |
| ctx := setupTest(t) |
| |
| res, body, err := request.Head(ctx, "/_ping") |
| assert.NilError(t, err) |
| |
| b, err := request.ReadBody(body) |
| assert.NilError(t, err) |
| assert.Equal(t, 0, len(b)) |
| assert.Equal(t, res.StatusCode, http.StatusOK) |
| assert.Check(t, res.Header.Get("Api-Version") != "") |
| } |
| |
| func TestPingSwarmHeader(t *testing.T) { |
| skip.If(t, testEnv.IsRemoteDaemon) |
| skip.If(t, testEnv.DaemonInfo.OSType == "windows") |
| |
| ctx := setupTest(t) |
| d := daemon.New(t) |
| d.StartNode(t) |
| defer d.Stop(t) |
| apiClient := d.NewClientT(t) |
| defer apiClient.Close() |
| |
| t.Run("before swarm init", func(t *testing.T) { |
| ctx := testutil.StartSpan(ctx, t) |
| p, err := apiClient.Ping(ctx, client.PingOptions{}) |
| assert.NilError(t, err) |
| assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateInactive) |
| assert.Equal(t, p.SwarmStatus.ControlAvailable, false) |
| }) |
| |
| _, err := apiClient.SwarmInit(ctx, client.SwarmInitOptions{ListenAddr: "127.0.0.1", AdvertiseAddr: "127.0.0.1:2377"}) |
| assert.NilError(t, err) |
| |
| t.Run("after swarm init", func(t *testing.T) { |
| ctx := testutil.StartSpan(ctx, t) |
| p, err := apiClient.Ping(ctx, client.PingOptions{}) |
| assert.NilError(t, err) |
| assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateActive) |
| assert.Equal(t, p.SwarmStatus.ControlAvailable, true) |
| }) |
| |
| _, err = apiClient.SwarmLeave(ctx, client.SwarmLeaveOptions{Force: true}) |
| assert.NilError(t, err) |
| |
| t.Run("after swarm leave", func(t *testing.T) { |
| ctx := testutil.StartSpan(ctx, t) |
| p, err := apiClient.Ping(ctx, client.PingOptions{}) |
| assert.NilError(t, err) |
| assert.Equal(t, p.SwarmStatus.NodeState, swarm.LocalNodeStateInactive) |
| assert.Equal(t, p.SwarmStatus.ControlAvailable, false) |
| }) |
| } |
| |
| func TestPingBuilderHeader(t *testing.T) { |
| skip.If(t, testEnv.IsRemoteDaemon) |
| skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot spin up additional daemons on windows") |
| |
| t.Parallel() |
| |
| ctx := testutil.StartSpan(baseContext, t) |
| d := daemon.New(t) |
| apiClient := d.NewClientT(t) |
| defer apiClient.Close() |
| |
| t.Run("default config", func(t *testing.T) { |
| testutil.StartSpan(ctx, t) |
| d.Start(t, "--iptables=false", "--ip6tables=false") |
| defer d.Stop(t) |
| |
| expected := build.BuilderBuildKit |
| if runtime.GOOS == "windows" { |
| expected = build.BuilderV1 |
| } |
| |
| p, err := apiClient.Ping(ctx, client.PingOptions{}) |
| assert.NilError(t, err) |
| assert.Equal(t, p.BuilderVersion, expected) |
| }) |
| |
| t.Run("buildkit disabled", func(t *testing.T) { |
| testutil.StartSpan(ctx, t) |
| cfg := filepath.Join(d.RootDir(), "daemon.json") |
| err := os.WriteFile(cfg, []byte(`{"features": { "buildkit": false }}`), 0o644) |
| assert.NilError(t, err) |
| d.Start(t, "--config-file", cfg, "--iptables=false", "--ip6tables=false") |
| defer d.Stop(t) |
| |
| expected := build.BuilderV1 |
| p, err := apiClient.Ping(ctx, client.PingOptions{}) |
| assert.NilError(t, err) |
| assert.Equal(t, p.BuilderVersion, expected) |
| }) |
| } |