Browse code

fix panic on --label-add

Signed-off-by: Brian Goff <cpuguy83@gmail.com>

Brian Goff authored on 2016/07/26 04:54:38
Showing 3 changed files
... ...
@@ -249,7 +249,7 @@ func updatePlacement(flags *pflag.FlagSet, placement *swarm.Placement) {
249 249
 
250 250
 func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
251 251
 	if flags.Changed(flagLabelAdd) {
252
-		if field == nil {
252
+		if *field == nil {
253 253
 			*field = map[string]string{}
254 254
 		}
255 255
 
... ...
@@ -259,7 +259,7 @@ func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
259 259
 		}
260 260
 	}
261 261
 
262
-	if field != nil && flags.Changed(flagLabelRemove) {
262
+	if *field != nil && flags.Changed(flagLabelRemove) {
263 263
 		toRemove := flags.Lookup(flagLabelRemove).Value.(*opts.ListOpts).GetAll()
264 264
 		for _, label := range toRemove {
265 265
 			delete(*field, label)
... ...
@@ -120,7 +120,6 @@ func (d *SwarmDaemon) getService(c *check.C, id string) *swarm.Service {
120 120
 	c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out)))
121 121
 	c.Assert(err, checker.IsNil)
122 122
 	c.Assert(json.Unmarshal(out, &service), checker.IsNil)
123
-	c.Assert(service.ID, checker.Equals, id)
124 123
 	return &service
125 124
 }
126 125
 
... ...
@@ -43,3 +43,44 @@ func (s *DockerSwarmSuite) TestServiceUpdatePort(c *check.C) {
43 43
 	}
44 44
 	c.Assert(portConfig, checker.DeepEquals, expected)
45 45
 }
46
+
47
+func (s *DockerSwarmSuite) TestServiceUpdateLabel(c *check.C) {
48
+	d := s.AddDaemon(c, true, true)
49
+	out, err := d.Cmd("service", "create", "--name=test", "busybox", "top")
50
+	c.Assert(err, checker.IsNil, check.Commentf(out))
51
+	service := d.getService(c, "test")
52
+	c.Assert(service.Spec.Labels, checker.HasLen, 0)
53
+
54
+	// add label to empty set
55
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
56
+	c.Assert(err, checker.IsNil, check.Commentf(out))
57
+	service = d.getService(c, "test")
58
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
59
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
60
+
61
+	// add label to non-empty set
62
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo2=bar")
63
+	c.Assert(err, checker.IsNil, check.Commentf(out))
64
+	service = d.getService(c, "test")
65
+	c.Assert(service.Spec.Labels, checker.HasLen, 2)
66
+	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "bar")
67
+
68
+	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo2")
69
+	c.Assert(err, checker.IsNil, check.Commentf(out))
70
+	service = d.getService(c, "test")
71
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
72
+	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "")
73
+
74
+	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo")
75
+	c.Assert(err, checker.IsNil, check.Commentf(out))
76
+	service = d.getService(c, "test")
77
+	c.Assert(service.Spec.Labels, checker.HasLen, 0)
78
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "")
79
+
80
+	// now make sure we can add again
81
+	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
82
+	c.Assert(err, checker.IsNil, check.Commentf(out))
83
+	service = d.getService(c, "test")
84
+	c.Assert(service.Spec.Labels, checker.HasLen, 1)
85
+	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
86
+}