|
...
|
...
|
@@ -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) {
|