Browse code

Add api tests for secret update

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>

Tonis Tiigi authored on 2016/06/17 04:12:38
Showing 2 changed files
... ...
@@ -114,6 +114,7 @@ func (d *SwarmDaemon) info() (swarm.Info, error) {
114 114
 
115 115
 type serviceConstructor func(*swarm.Service)
116 116
 type nodeConstructor func(*swarm.Node)
117
+type specConstructor func(*swarm.Spec)
117 118
 
118 119
 func (d *SwarmDaemon) createService(c *check.C, f ...serviceConstructor) string {
119 120
 	var service swarm.Service
... ...
@@ -185,3 +186,19 @@ func (d *SwarmDaemon) listNodes(c *check.C) []swarm.Node {
185 185
 	c.Assert(json.Unmarshal(out, &nodes), checker.IsNil)
186 186
 	return nodes
187 187
 }
188
+
189
+func (d *SwarmDaemon) updateSwarm(c *check.C, f ...specConstructor) {
190
+	var sw swarm.Swarm
191
+	status, out, err := d.SockRequest("GET", "/swarm", nil)
192
+	c.Assert(err, checker.IsNil)
193
+	c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
194
+	c.Assert(json.Unmarshal(out, &sw), checker.IsNil)
195
+
196
+	for _, fn := range f {
197
+		fn(&sw.Spec)
198
+	}
199
+	url := fmt.Sprintf("/swarm/update?version=%d", sw.Version.Index)
200
+	status, out, err = d.SockRequest("POST", url, sw.Spec)
201
+	c.Assert(err, checker.IsNil)
202
+	c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
203
+}
... ...
@@ -145,6 +145,74 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
145 145
 	info, err = d2.info()
146 146
 	c.Assert(err, checker.IsNil)
147 147
 	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
148
+
149
+	// change secret
150
+	d1.updateSwarm(c, func(s *swarm.Spec) {
151
+		for i := range s.AcceptancePolicy.Policies {
152
+			p := "foobaz"
153
+			s.AcceptancePolicy.Policies[i].Secret = &p
154
+		}
155
+	})
156
+
157
+	err = d2.Join(d1.listenAddr, "foobar", "", false)
158
+	c.Assert(err, checker.NotNil)
159
+	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
160
+	info, err = d2.info()
161
+	c.Assert(err, checker.IsNil)
162
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
163
+
164
+	c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
165
+	info, err = d2.info()
166
+	c.Assert(err, checker.IsNil)
167
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
168
+	c.Assert(d2.Leave(false), checker.IsNil)
169
+	info, err = d2.info()
170
+	c.Assert(err, checker.IsNil)
171
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
172
+
173
+	// change policy, don't change secret
174
+	d1.updateSwarm(c, func(s *swarm.Spec) {
175
+		for i, p := range s.AcceptancePolicy.Policies {
176
+			if p.Role == swarm.NodeRoleManager {
177
+				s.AcceptancePolicy.Policies[i].Autoaccept = false
178
+			}
179
+			s.AcceptancePolicy.Policies[i].Secret = nil
180
+		}
181
+	})
182
+
183
+	err = d2.Join(d1.listenAddr, "", "", false)
184
+	c.Assert(err, checker.NotNil)
185
+	c.Assert(err.Error(), checker.Contains, "secret token is necessary")
186
+	info, err = d2.info()
187
+	c.Assert(err, checker.IsNil)
188
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
189
+
190
+	c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
191
+	info, err = d2.info()
192
+	c.Assert(err, checker.IsNil)
193
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
194
+	c.Assert(d2.Leave(false), checker.IsNil)
195
+	info, err = d2.info()
196
+	c.Assert(err, checker.IsNil)
197
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
198
+
199
+	// clear secret
200
+	d1.updateSwarm(c, func(s *swarm.Spec) {
201
+		for i := range s.AcceptancePolicy.Policies {
202
+			p := ""
203
+			s.AcceptancePolicy.Policies[i].Secret = &p
204
+		}
205
+	})
206
+
207
+	c.Assert(d2.Join(d1.listenAddr, "", "", false), checker.IsNil)
208
+	info, err = d2.info()
209
+	c.Assert(err, checker.IsNil)
210
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
211
+	c.Assert(d2.Leave(false), checker.IsNil)
212
+	info, err = d2.info()
213
+	c.Assert(err, checker.IsNil)
214
+	c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
215
+
148 216
 }
149 217
 
150 218
 func (s *DockerSwarmSuite) TestApiSwarmCAHash(c *check.C) {