Browse code

Merge pull request #49677 from vvoland/integration-cli-bump-cli

integration-cli: Update default CLI version to v18.06.3-ce

Paweł Gronowski authored on 2025/04/11 19:32:36
Showing 4 changed files
... ...
@@ -13,7 +13,7 @@ ARG DOCKERCLI_REPOSITORY="https://github.com/docker/cli.git"
13 13
 
14 14
 # cli version used for integration-cli tests
15 15
 ARG DOCKERCLI_INTEGRATION_REPOSITORY="https://github.com/docker/cli.git"
16
-ARG DOCKERCLI_INTEGRATION_VERSION=v17.06.2-ce
16
+ARG DOCKERCLI_INTEGRATION_VERSION=v18.06.3-ce
17 17
 # BUILDX_VERSION is the version of buildx to install in the dev container.
18 18
 ARG BUILDX_VERSION=0.20.1
19 19
 ARG COMPOSE_VERSION=v2.33.1
... ...
@@ -1,7 +1,7 @@
1 1
 #!/bin/sh
2 2
 
3 3
 : ${DOCKERCLI_CHANNEL:=stable}
4
-: ${DOCKERCLI_VERSION:=17.06.2-ce}
4
+: ${DOCKERCLI_VERSION:=18.06.3-ce}
5 5
 
6 6
 install_dockercli() {
7 7
 	echo "Install docker/cli version $DOCKERCLI_VERSION from $DOCKERCLI_CHANNEL"
... ...
@@ -6256,7 +6256,7 @@ func (s *DockerCLIBuildSuite) TestBuildEmitsEvents(t *testing.T) {
6256 6256
 						"--since", before.Format(time.RFC3339),
6257 6257
 					),
6258 6258
 					cli.WithTimeout(time.Millisecond*300),
6259
-					cli.WithEnvironmentVariables("DOCKER_API_VERSION=v1.46"), // FIXME(thaJeztah): integration-cli runs docker CLI 17.06; we're "upgrading" the API version to a version it doesn't support here ;)
6259
+					cli.WithEnvironmentVariables("DOCKER_API_VERSION=v1.46"), // FIXME(thaJeztah): integration-cli runs docker CLI 18.06; we're "upgrading" the API version to a version it doesn't support here ;)
6260 6260
 				)
6261 6261
 
6262 6262
 				stdout := cmd.Stdout()
... ...
@@ -19,6 +19,7 @@ import (
19 19
 
20 20
 	"github.com/cloudflare/cfssl/helpers"
21 21
 	"github.com/docker/docker/api/types/swarm"
22
+	"github.com/docker/docker/api/types/versions"
22 23
 	"github.com/docker/docker/integration-cli/checker"
23 24
 	"github.com/docker/docker/integration-cli/cli"
24 25
 	"github.com/docker/docker/integration-cli/daemon"
... ...
@@ -51,15 +52,15 @@ func (s *DockerSwarmSuite) TestSwarmUpdate(c *testing.T) {
51 51
 	assert.NilError(c, err, out)
52 52
 
53 53
 	spec := getSpec()
54
-	assert.Equal(c, spec.CAConfig.NodeCertExpiry, 30*time.Hour)
55
-	assert.Equal(c, spec.Dispatcher.HeartbeatPeriod, 11*time.Second)
54
+	assert.Check(c, is.Equal(spec.CAConfig.NodeCertExpiry, 30*time.Hour))
55
+	assert.Check(c, is.Equal(spec.Dispatcher.HeartbeatPeriod, 11*time.Second))
56 56
 
57 57
 	// setting anything under 30m for cert-expiry is not allowed
58 58
 	out, err = d.Cmd("swarm", "update", "--cert-expiry", "15m")
59 59
 	assert.ErrorContains(c, err, "")
60 60
 	assert.Assert(c, is.Contains(out, "minimum certificate expiry time"))
61 61
 	spec = getSpec()
62
-	assert.Equal(c, spec.CAConfig.NodeCertExpiry, 30*time.Hour)
62
+	assert.Check(c, is.Equal(spec.CAConfig.NodeCertExpiry, 30*time.Hour))
63 63
 
64 64
 	// passing an external CA (this is without starting a root rotation) does not fail
65 65
 	cli.Docker(cli.Args("swarm", "update", "--external-ca", "protocol=cfssl,url=https://something.org",
... ...
@@ -69,10 +70,18 @@ func (s *DockerSwarmSuite) TestSwarmUpdate(c *testing.T) {
69 69
 	expected, err := os.ReadFile("fixtures/https/ca.pem")
70 70
 	assert.NilError(c, err)
71 71
 
72
-	spec = getSpec()
73
-	assert.Equal(c, len(spec.CAConfig.ExternalCAs), 2)
74
-	assert.Equal(c, spec.CAConfig.ExternalCAs[0].CACert, "")
75
-	assert.Equal(c, spec.CAConfig.ExternalCAs[1].CACert, string(expected))
72
+	version := cli.Docker(cli.Args("version", "--format", "{{ .Client.Version }}"), cli.Daemon(d)).Stdout()
73
+	version = strings.TrimSpace(version)
74
+	// This was broken in v18.06
75
+	// See: https://github.com/docker/cli/pull/5995
76
+	if version != "" && versions.LessThan(version, "18.06") {
77
+		spec = getSpec()
78
+		sw := d.GetSwarm(c)
79
+		if assert.Check(c, is.Len(spec.CAConfig.ExternalCAs, 2)) {
80
+			assert.Check(c, is.Equal(spec.CAConfig.ExternalCAs[0].CACert, sw.TLSInfo.TrustRoot))
81
+			assert.Check(c, is.Equal(spec.CAConfig.ExternalCAs[1].CACert, string(expected)))
82
+		}
83
+	}
76 84
 
77 85
 	// passing an invalid external CA fails
78 86
 	tempFile := fs.NewFile(c, "testfile", fs.WithContent("fakecert"))
... ...
@@ -117,18 +126,29 @@ func (s *DockerSwarmSuite) TestSwarmInit(c *testing.T) {
117 117
 	assert.NilError(c, err)
118 118
 
119 119
 	spec := getSpec()
120
-	assert.Equal(c, spec.CAConfig.NodeCertExpiry, 30*time.Hour)
121
-	assert.Equal(c, spec.Dispatcher.HeartbeatPeriod, 11*time.Second)
122
-	assert.Equal(c, len(spec.CAConfig.ExternalCAs), 2)
123
-	assert.Equal(c, spec.CAConfig.ExternalCAs[0].CACert, "")
124
-	assert.Equal(c, spec.CAConfig.ExternalCAs[1].CACert, string(expected))
120
+	assert.Check(c, is.Equal(spec.CAConfig.NodeCertExpiry, 30*time.Hour))
121
+	assert.Check(c, is.Equal(spec.Dispatcher.HeartbeatPeriod, 11*time.Second))
122
+
123
+	version := cli.Docker(cli.Args("version", "--format", "{{ .Client.Version }}"), cli.Daemon(d)).Stdout()
124
+	version = strings.TrimSpace(version)
125
+	// This was broken in v18.06
126
+	// See: https://github.com/docker/cli/pull/5995
127
+	if version != "" && versions.LessThan(version, "18.06") {
128
+		if assert.Check(c, is.Len(spec.CAConfig.ExternalCAs, 2)) {
129
+			// TODO: Should this actually be:
130
+			// assert.Check(c, is.Equal(spec.CAConfig.ExternalCAs[0].CACert, sw.TLSInfo.TrustRoot))
131
+			assert.Check(c, is.Equal(spec.CAConfig.ExternalCAs[0].CACert, ""))
132
+
133
+			assert.Check(c, is.Equal(spec.CAConfig.ExternalCAs[1].CACert, string(expected)))
134
+		}
135
+	}
125 136
 
126 137
 	assert.NilError(c, d.SwarmLeave(ctx, c, true))
127 138
 	cli.Docker(cli.Args("swarm", "init"), cli.Daemon(d)).Assert(c, icmd.Success)
128 139
 
129 140
 	spec = getSpec()
130
-	assert.Equal(c, spec.CAConfig.NodeCertExpiry, 90*24*time.Hour)
131
-	assert.Equal(c, spec.Dispatcher.HeartbeatPeriod, 5*time.Second)
141
+	assert.Check(c, is.Equal(spec.CAConfig.NodeCertExpiry, 90*24*time.Hour))
142
+	assert.Check(c, is.Equal(spec.Dispatcher.HeartbeatPeriod, 5*time.Second))
132 143
 }
133 144
 
134 145
 func (s *DockerSwarmSuite) TestSwarmInitIPv6(c *testing.T) {
... ...
@@ -176,7 +196,7 @@ func (s *DockerSwarmSuite) TestSwarmServiceTemplatingHostname(c *testing.T) {
176 176
 	ctx := testutil.GetContext(c)
177 177
 	d := s.AddDaemon(ctx, c, true, true)
178 178
 	hostname, err := d.Cmd("node", "inspect", "--format", "{{.Description.Hostname}}", "self")
179
-	assert.Assert(c, err == nil, hostname)
179
+	assert.NilError(c, err, hostname)
180 180
 
181 181
 	out, err := d.Cmd("service", "create", "--detach", "--no-resolve-image", "--name", "test", "--hostname", "{{.Service.Name}}-{{.Task.Slot}}-{{.Node.Hostname}}", "busybox", "top")
182 182
 	assert.NilError(c, err, out)
... ...
@@ -216,19 +236,19 @@ func (s *DockerSwarmSuite) TestSwarmServiceListFilter(c *testing.T) {
216 216
 	// We search checker.Contains with `name+" "` to prevent prefix only.
217 217
 	out, err = d.Cmd("service", "ls", "--filter", filter1)
218 218
 	assert.NilError(c, err, out)
219
-	assert.Assert(c, strings.Contains(out, name1+" "), out)
220
-	assert.Assert(c, !strings.Contains(out, name2+" "), out)
221
-	assert.Assert(c, !strings.Contains(out, name3+" "), out)
219
+	assert.Check(c, is.Contains(out, name1+" "))
220
+	assert.Check(c, !strings.Contains(out, name2+" "), out)
221
+	assert.Check(c, !strings.Contains(out, name3+" "), out)
222 222
 	out, err = d.Cmd("service", "ls", "--filter", filter2)
223 223
 	assert.NilError(c, err, out)
224
-	assert.Assert(c, strings.Contains(out, name1+" "), out)
225
-	assert.Assert(c, strings.Contains(out, name2+" "), out)
226
-	assert.Assert(c, !strings.Contains(out, name3+" "), out)
224
+	assert.Check(c, is.Contains(out, name1+" "))
225
+	assert.Check(c, is.Contains(out, name2+" "))
226
+	assert.Check(c, !strings.Contains(out, name3+" "))
227 227
 	out, err = d.Cmd("service", "ls")
228 228
 	assert.NilError(c, err, out)
229
-	assert.Assert(c, strings.Contains(out, name1+" "), out)
230
-	assert.Assert(c, strings.Contains(out, name2+" "), out)
231
-	assert.Assert(c, strings.Contains(out, name3+" "), out)
229
+	assert.Check(c, is.Contains(out, name1+" "))
230
+	assert.Check(c, is.Contains(out, name2+" "))
231
+	assert.Check(c, is.Contains(out, name3+" "))
232 232
 }
233 233
 
234 234
 func (s *DockerSwarmSuite) TestSwarmNodeListFilter(c *testing.T) {
... ...
@@ -244,7 +264,7 @@ func (s *DockerSwarmSuite) TestSwarmNodeListFilter(c *testing.T) {
244 244
 
245 245
 	out, err = d.Cmd("node", "ls", "--filter", filter)
246 246
 	assert.NilError(c, err, out)
247
-	assert.Assert(c, strings.Contains(out, name), out)
247
+	assert.Assert(c, is.Contains(out, name))
248 248
 	out, err = d.Cmd("node", "ls", "--filter", "name=none")
249 249
 	assert.NilError(c, err, out)
250 250
 	assert.Assert(c, !strings.Contains(out, name), out)
... ...
@@ -266,9 +286,9 @@ func (s *DockerSwarmSuite) TestSwarmNodeTaskListFilter(c *testing.T) {
266 266
 
267 267
 	out, err = d.Cmd("node", "ps", "--filter", filter, "self")
268 268
 	assert.NilError(c, err, out)
269
-	assert.Assert(c, strings.Contains(out, name+".1"), out)
270
-	assert.Assert(c, strings.Contains(out, name+".2"), out)
271
-	assert.Assert(c, strings.Contains(out, name+".3"), out)
269
+	assert.Check(c, is.Contains(out, name+".1"))
270
+	assert.Check(c, is.Contains(out, name+".2"))
271
+	assert.Check(c, is.Contains(out, name+".3"))
272 272
 	out, err = d.Cmd("node", "ps", "--filter", "name=none", "self")
273 273
 	assert.NilError(c, err, out)
274 274
 	assert.Assert(c, !strings.Contains(out, name+".1"), out)
... ...
@@ -295,13 +315,13 @@ func (s *DockerSwarmSuite) TestSwarmPublishAdd(c *testing.T) {
295 295
 	assert.NilError(c, err, out)
296 296
 
297 297
 	_, err = d.CmdRetryOutOfSequence("service", "update", "--detach", "--publish-add", "80:80", "--publish-add", "80:20", name)
298
-	assert.ErrorContains(c, err, "")
298
+	assert.Check(c, is.ErrorContains(err, ""))
299 299
 
300 300
 	// this last command does not have to be retried because service inspect
301 301
 	// does not return out of sequence errors.
302 302
 	out, err = d.Cmd("service", "inspect", "--format", "{{ .Spec.EndpointSpec.Ports }}", name)
303 303
 	assert.NilError(c, err, out)
304
-	assert.Equal(c, strings.TrimSpace(out), "[{ tcp 80 80 ingress}]")
304
+	assert.Check(c, is.Equal(strings.TrimSpace(out), "[{ tcp 80 80 ingress}]"))
305 305
 }
306 306
 
307 307
 func (s *DockerSwarmSuite) TestSwarmServiceWithGroup(c *testing.T) {
... ...
@@ -324,7 +344,7 @@ func (s *DockerSwarmSuite) TestSwarmServiceWithGroup(c *testing.T) {
324 324
 
325 325
 	out, err = d.Cmd("exec", container, "id")
326 326
 	assert.NilError(c, err, out)
327
-	assert.Equal(c, strings.TrimSpace(out), "uid=0(root) gid=0(root) groups=0(root),10(wheel),29(audio),50(staff),777")
327
+	assert.Check(c, is.Equal(strings.TrimSpace(out), "uid=0(root) gid=0(root) groups=0(root),10(wheel),29(audio),50(staff),777"))
328 328
 }
329 329
 
330 330
 func (s *DockerSwarmSuite) TestSwarmContainerAutoStart(c *testing.T) {