Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
| ... | ... |
@@ -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) {
|