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  }