Browse code

Switch node management tests to api types

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
(cherry picked from commit 22b34d64496c9b6ebae5e2b4a98ecd9a172cc557)

Tonis Tiigi authored on 2016/06/20 11:00:45
Showing 3 changed files
... ...
@@ -8,6 +8,7 @@ import (
8 8
 
9 9
 	"github.com/docker/docker/cliconfig"
10 10
 	"github.com/docker/docker/pkg/reexec"
11
+	"github.com/docker/engine-api/types/swarm"
11 12
 	"github.com/go-check/check"
12 13
 )
13 14
 
... ...
@@ -213,12 +214,15 @@ func (s *DockerSwarmSuite) AddDaemon(c *check.C, joinSwarm, manager bool) *Swarm
213 213
 
214 214
 	if joinSwarm == true {
215 215
 		if len(s.daemons) > 0 {
216
-			c.Assert(d.Join(s.daemons[0].listenAddr, "", "", manager), check.IsNil)
216
+			c.Assert(d.Join(swarm.JoinRequest{
217
+				RemoteAddrs: []string{s.daemons[0].listenAddr},
218
+				Manager:     manager}), check.IsNil)
217 219
 		} else {
218
-			aa := make(map[string]bool)
219
-			aa["worker"] = true
220
-			aa["manager"] = true
221
-			c.Assert(d.Init(aa, ""), check.IsNil)
220
+			c.Assert(d.Init(swarm.InitRequest{
221
+				Spec: swarm.Spec{
222
+					AcceptancePolicy: autoAcceptPolicy,
223
+				},
224
+			}), check.IsNil)
222 225
 		}
223 226
 	}
224 227
 
... ...
@@ -21,22 +21,18 @@ type SwarmDaemon struct {
21 21
 	listenAddr string
22 22
 }
23 23
 
24
-// Init initializes a new swarm cluster.
25
-func (d *SwarmDaemon) Init(autoAccept map[string]bool, secret string) error {
26
-	req := swarm.InitRequest{
27
-		ListenAddr: d.listenAddr,
28
-	}
29
-	for _, role := range []swarm.NodeRole{swarm.NodeRoleManager, swarm.NodeRoleWorker} {
30
-		policy := swarm.Policy{
31
-			Role:       role,
32
-			Autoaccept: autoAccept[strings.ToLower(string(role))],
33
-		}
34
-
35
-		if secret != "" {
36
-			policy.Secret = &secret
37
-		}
24
+// default policy in tests is allow-all
25
+var autoAcceptPolicy = swarm.AcceptancePolicy{
26
+	Policies: []swarm.Policy{
27
+		{Role: swarm.NodeRoleWorker, Autoaccept: true},
28
+		{Role: swarm.NodeRoleManager, Autoaccept: true},
29
+	},
30
+}
38 31
 
39
-		req.Spec.AcceptancePolicy.Policies = append(req.Spec.AcceptancePolicy.Policies, policy)
32
+// Init initializes a new swarm cluster.
33
+func (d *SwarmDaemon) Init(req swarm.InitRequest) error {
34
+	if req.ListenAddr == "" {
35
+		req.ListenAddr = d.listenAddr
40 36
 	}
41 37
 	status, out, err := d.SockRequest("POST", "/swarm/init", req)
42 38
 	if status != http.StatusOK {
... ...
@@ -53,17 +49,10 @@ func (d *SwarmDaemon) Init(autoAccept map[string]bool, secret string) error {
53 53
 	return nil
54 54
 }
55 55
 
56
-// Join joins a current daemon with existing cluster.
57
-func (d *SwarmDaemon) Join(remoteAddr, secret, cahash string, manager bool) error {
58
-	req := swarm.JoinRequest{
59
-		ListenAddr:  d.listenAddr,
60
-		RemoteAddrs: []string{remoteAddr},
61
-		Manager:     manager,
62
-		CACertHash:  cahash,
63
-	}
64
-
65
-	if secret != "" {
66
-		req.Secret = secret
56
+// Join joins a daemon to an existing cluster.
57
+func (d *SwarmDaemon) Join(req swarm.JoinRequest) error {
58
+	if req.ListenAddr == "" {
59
+		req.ListenAddr = d.listenAddr
67 60
 	}
68 61
 	status, out, err := d.SockRequest("POST", "/swarm/join", req)
69 62
 	if status != http.StatusOK {
... ...
@@ -38,7 +38,7 @@ func (s *DockerSwarmSuite) TestApiSwarmInit(c *check.C) {
38 38
 	c.Assert(info.ControlAvailable, checker.Equals, false)
39 39
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
40 40
 
41
-	c.Assert(d2.Join(d1.listenAddr, "", "", false), checker.IsNil)
41
+	c.Assert(d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
42 42
 
43 43
 	info, err = d2.info()
44 44
 	c.Assert(err, checker.IsNil)
... ...
@@ -76,10 +76,19 @@ func (s *DockerSwarmSuite) TestApiSwarmManualAcceptanceSecret(c *check.C) {
76 76
 
77 77
 func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret string) {
78 78
 	d1 := s.AddDaemon(c, false, false)
79
-	c.Assert(d1.Init(map[string]bool{}, secret), checker.IsNil)
79
+	c.Assert(d1.Init(swarm.InitRequest{
80
+		Spec: swarm.Spec{
81
+			AcceptancePolicy: swarm.AcceptancePolicy{
82
+				Policies: []swarm.Policy{
83
+					{Role: swarm.NodeRoleWorker, Secret: &secret},
84
+					{Role: swarm.NodeRoleManager, Secret: &secret},
85
+				},
86
+			},
87
+		},
88
+	}), checker.IsNil)
80 89
 
81 90
 	d2 := s.AddDaemon(c, false, false)
82
-	err := d2.Join(d1.listenAddr, "", "", false)
91
+	err := d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
83 92
 	c.Assert(err, checker.NotNil)
84 93
 	if secret == "" {
85 94
 		c.Assert(err.Error(), checker.Contains, "needs to be accepted")
... ...
@@ -97,7 +106,7 @@ func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret strin
97 97
 		c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
98 98
 	}
99 99
 	d3 := s.AddDaemon(c, false, false)
100
-	c.Assert(d3.Join(d1.listenAddr, secret, "", false), checker.NotNil)
100
+	c.Assert(d3.Join(swarm.JoinRequest{Secret: secret, RemoteAddrs: []string{d1.listenAddr}}), checker.NotNil)
101 101
 	info, err := d3.info()
102 102
 	c.Assert(err, checker.IsNil)
103 103
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStatePending)
... ...
@@ -120,26 +129,34 @@ func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret strin
120 120
 
121 121
 func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
122 122
 	d1 := s.AddDaemon(c, false, false)
123
-	aa := make(map[string]bool)
124
-	aa["worker"] = true
125
-	c.Assert(d1.Init(aa, "foobar"), checker.IsNil)
123
+	secret := "foobar"
124
+	c.Assert(d1.Init(swarm.InitRequest{
125
+		Spec: swarm.Spec{
126
+			AcceptancePolicy: swarm.AcceptancePolicy{
127
+				Policies: []swarm.Policy{
128
+					{Role: swarm.NodeRoleWorker, Autoaccept: true, Secret: &secret},
129
+					{Role: swarm.NodeRoleManager, Secret: &secret},
130
+				},
131
+			},
132
+		},
133
+	}), checker.IsNil)
126 134
 
127 135
 	d2 := s.AddDaemon(c, false, false)
128
-	err := d2.Join(d1.listenAddr, "", "", false)
136
+	err := d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
129 137
 	c.Assert(err, checker.NotNil)
130 138
 	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
131 139
 	info, err := d2.info()
132 140
 	c.Assert(err, checker.IsNil)
133 141
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
134 142
 
135
-	err = d2.Join(d1.listenAddr, "foobaz", "", false)
143
+	err = d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}})
136 144
 	c.Assert(err, checker.NotNil)
137 145
 	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
138 146
 	info, err = d2.info()
139 147
 	c.Assert(err, checker.IsNil)
140 148
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
141 149
 
142
-	c.Assert(d2.Join(d1.listenAddr, "foobar", "", false), checker.IsNil)
150
+	c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobar", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
143 151
 	info, err = d2.info()
144 152
 	c.Assert(err, checker.IsNil)
145 153
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
... ...
@@ -156,14 +173,14 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
156 156
 		}
157 157
 	})
158 158
 
159
-	err = d2.Join(d1.listenAddr, "foobar", "", false)
159
+	err = d2.Join(swarm.JoinRequest{Secret: "foobar", RemoteAddrs: []string{d1.listenAddr}})
160 160
 	c.Assert(err, checker.NotNil)
161 161
 	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
162 162
 	info, err = d2.info()
163 163
 	c.Assert(err, checker.IsNil)
164 164
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
165 165
 
166
-	c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
166
+	c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
167 167
 	info, err = d2.info()
168 168
 	c.Assert(err, checker.IsNil)
169 169
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
... ...
@@ -182,14 +199,14 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
182 182
 		}
183 183
 	})
184 184
 
185
-	err = d2.Join(d1.listenAddr, "", "", false)
185
+	err = d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
186 186
 	c.Assert(err, checker.NotNil)
187 187
 	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
188 188
 	info, err = d2.info()
189 189
 	c.Assert(err, checker.IsNil)
190 190
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
191 191
 
192
-	c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
192
+	c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
193 193
 	info, err = d2.info()
194 194
 	c.Assert(err, checker.IsNil)
195 195
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
... ...
@@ -206,7 +223,7 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
206 206
 		}
207 207
 	})
208 208
 
209
-	c.Assert(d2.Join(d1.listenAddr, "", "", false), checker.IsNil)
209
+	c.Assert(d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
210 210
 	info, err = d2.info()
211 211
 	c.Assert(err, checker.IsNil)
212 212
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
... ...
@@ -220,17 +237,26 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
220 220
 func (s *DockerSwarmSuite) TestApiSwarmCAHash(c *check.C) {
221 221
 	d1 := s.AddDaemon(c, true, true)
222 222
 	d2 := s.AddDaemon(c, false, false)
223
-	err := d2.Join(d1.listenAddr, "", "foobar", false)
223
+	err := d2.Join(swarm.JoinRequest{CACertHash: "foobar", RemoteAddrs: []string{d1.listenAddr}})
224 224
 	c.Assert(err, checker.NotNil)
225 225
 	c.Assert(err.Error(), checker.Contains, "invalid checksum digest format")
226 226
 
227 227
 	c.Assert(len(d1.CACertHash), checker.GreaterThan, 0)
228
-	c.Assert(d2.Join(d1.listenAddr, "", d1.CACertHash, false), checker.IsNil)
228
+	c.Assert(d2.Join(swarm.JoinRequest{CACertHash: d1.CACertHash, RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
229 229
 }
230 230
 
231 231
 func (s *DockerSwarmSuite) TestApiSwarmPromoteDemote(c *check.C) {
232 232
 	d1 := s.AddDaemon(c, false, false)
233
-	c.Assert(d1.Init(map[string]bool{"worker": true}, ""), checker.IsNil)
233
+	c.Assert(d1.Init(swarm.InitRequest{
234
+		Spec: swarm.Spec{
235
+			AcceptancePolicy: swarm.AcceptancePolicy{
236
+				Policies: []swarm.Policy{
237
+					{Role: swarm.NodeRoleWorker, Autoaccept: true},
238
+					{Role: swarm.NodeRoleManager},
239
+				},
240
+			},
241
+		},
242
+	}), checker.IsNil)
234 243
 	d2 := s.AddDaemon(c, true, false)
235 244
 
236 245
 	info, err := d2.info()
... ...
@@ -561,7 +587,9 @@ func (s *DockerSwarmSuite) TestApiSwarmLeaveOnPendingJoin(c *check.C) {
561 561
 	c.Assert(err, checker.IsNil)
562 562
 	id = strings.TrimSpace(id)
563 563
 
564
-	go d2.Join("nosuchhost:1234", "", "", false) // will block on pending state
564
+	go d2.Join(swarm.JoinRequest{
565
+		RemoteAddrs: []string{"nosuchhost:1234"},
566
+	}) // will block on pending state
565 567
 
566 568
 	for i := 0; ; i++ {
567 569
 		info, err := d2.info()
... ...
@@ -587,7 +615,9 @@ func (s *DockerSwarmSuite) TestApiSwarmLeaveOnPendingJoin(c *check.C) {
587 587
 // #23705
588 588
 func (s *DockerSwarmSuite) TestApiSwarmRestoreOnPendingJoin(c *check.C) {
589 589
 	d := s.AddDaemon(c, false, false)
590
-	go d.Join("nosuchhost:1234", "", "", false) // will block on pending state
590
+	go d.Join(swarm.JoinRequest{
591
+		RemoteAddrs: []string{"nosuchhost:1234"},
592
+	}) // will block on pending state
591 593
 
592 594
 	for i := 0; ; i++ {
593 595
 		info, err := d.info()