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  }