github.com/MaximeAubanel/moby@v1.13.1/integration-cli/docker_cli_service_update_test.go (about)

     1  // +build !windows
     2  
     3  package main
     4  
     5  import (
     6  	"encoding/json"
     7  	"fmt"
     8  
     9  	"github.com/docker/docker/api/types/swarm"
    10  	"github.com/docker/docker/pkg/integration/checker"
    11  	"github.com/go-check/check"
    12  )
    13  
    14  func (s *DockerSwarmSuite) TestServiceUpdatePort(c *check.C) {
    15  	d := s.AddDaemon(c, true, true)
    16  
    17  	serviceName := "TestServiceUpdatePort"
    18  	serviceArgs := append([]string{"service", "create", "--name", serviceName, "-p", "8080:8081", defaultSleepImage}, sleepCommandForDaemonPlatform()...)
    19  
    20  	// Create a service with a port mapping of 8080:8081.
    21  	out, err := d.Cmd(serviceArgs...)
    22  	c.Assert(err, checker.IsNil)
    23  	waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 1)
    24  
    25  	// Update the service: changed the port mapping from 8080:8081 to 8082:8083.
    26  	_, err = d.Cmd("service", "update", "--publish-add", "8082:8083", "--publish-rm", "8081", serviceName)
    27  	c.Assert(err, checker.IsNil)
    28  
    29  	// Inspect the service and verify port mapping
    30  	expected := []swarm.PortConfig{
    31  		{
    32  			Protocol:      "tcp",
    33  			PublishedPort: 8082,
    34  			TargetPort:    8083,
    35  			PublishMode:   "ingress",
    36  		},
    37  	}
    38  
    39  	out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.EndpointSpec.Ports }}", serviceName)
    40  	c.Assert(err, checker.IsNil)
    41  
    42  	var portConfig []swarm.PortConfig
    43  	if err := json.Unmarshal([]byte(out), &portConfig); err != nil {
    44  		c.Fatalf("invalid JSON in inspect result: %v (%s)", err, out)
    45  	}
    46  	c.Assert(portConfig, checker.DeepEquals, expected)
    47  }
    48  
    49  func (s *DockerSwarmSuite) TestServiceUpdateLabel(c *check.C) {
    50  	d := s.AddDaemon(c, true, true)
    51  	out, err := d.Cmd("service", "create", "--name=test", "busybox", "top")
    52  	c.Assert(err, checker.IsNil, check.Commentf(out))
    53  	service := d.getService(c, "test")
    54  	c.Assert(service.Spec.Labels, checker.HasLen, 0)
    55  
    56  	// add label to empty set
    57  	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
    58  	c.Assert(err, checker.IsNil, check.Commentf(out))
    59  	service = d.getService(c, "test")
    60  	c.Assert(service.Spec.Labels, checker.HasLen, 1)
    61  	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
    62  
    63  	// add label to non-empty set
    64  	out, err = d.Cmd("service", "update", "test", "--label-add", "foo2=bar")
    65  	c.Assert(err, checker.IsNil, check.Commentf(out))
    66  	service = d.getService(c, "test")
    67  	c.Assert(service.Spec.Labels, checker.HasLen, 2)
    68  	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "bar")
    69  
    70  	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo2")
    71  	c.Assert(err, checker.IsNil, check.Commentf(out))
    72  	service = d.getService(c, "test")
    73  	c.Assert(service.Spec.Labels, checker.HasLen, 1)
    74  	c.Assert(service.Spec.Labels["foo2"], checker.Equals, "")
    75  
    76  	out, err = d.Cmd("service", "update", "test", "--label-rm", "foo")
    77  	c.Assert(err, checker.IsNil, check.Commentf(out))
    78  	service = d.getService(c, "test")
    79  	c.Assert(service.Spec.Labels, checker.HasLen, 0)
    80  	c.Assert(service.Spec.Labels["foo"], checker.Equals, "")
    81  
    82  	// now make sure we can add again
    83  	out, err = d.Cmd("service", "update", "test", "--label-add", "foo=bar")
    84  	c.Assert(err, checker.IsNil, check.Commentf(out))
    85  	service = d.getService(c, "test")
    86  	c.Assert(service.Spec.Labels, checker.HasLen, 1)
    87  	c.Assert(service.Spec.Labels["foo"], checker.Equals, "bar")
    88  }
    89  
    90  func (s *DockerSwarmSuite) TestServiceUpdateSecrets(c *check.C) {
    91  	d := s.AddDaemon(c, true, true)
    92  	testName := "test_secret"
    93  	id := d.createSecret(c, swarm.SecretSpec{
    94  		swarm.Annotations{
    95  			Name: testName,
    96  		},
    97  		[]byte("TESTINGDATA"),
    98  	})
    99  	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
   100  	testTarget := "testing"
   101  	serviceName := "test"
   102  
   103  	out, err := d.Cmd("service", "create", "--name", serviceName, "busybox", "top")
   104  	c.Assert(err, checker.IsNil, check.Commentf(out))
   105  
   106  	// add secret
   107  	out, err = d.cmdRetryOutOfSequence("service", "update", "test", "--secret-add", fmt.Sprintf("source=%s,target=%s", testName, testTarget))
   108  	c.Assert(err, checker.IsNil, check.Commentf(out))
   109  
   110  	out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Secrets }}", serviceName)
   111  	c.Assert(err, checker.IsNil)
   112  
   113  	var refs []swarm.SecretReference
   114  	c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
   115  	c.Assert(refs, checker.HasLen, 1)
   116  
   117  	c.Assert(refs[0].SecretName, checker.Equals, testName)
   118  	c.Assert(refs[0].File, checker.Not(checker.IsNil))
   119  	c.Assert(refs[0].File.Name, checker.Equals, testTarget)
   120  
   121  	// remove
   122  	out, err = d.cmdRetryOutOfSequence("service", "update", "test", "--secret-rm", testName)
   123  	c.Assert(err, checker.IsNil, check.Commentf(out))
   124  
   125  	out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Secrets }}", serviceName)
   126  	c.Assert(err, checker.IsNil)
   127  
   128  	c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil)
   129  	c.Assert(refs, checker.HasLen, 0)
   130  }