github.com/yogeshlonkar/moby@v1.13.2-0.20201203103638-c0b64beaea94/integration-cli/docker_cli_stack_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "os" 7 "sort" 8 "strings" 9 10 "github.com/docker/docker/api/types/swarm" 11 "github.com/docker/docker/pkg/integration/checker" 12 "github.com/go-check/check" 13 ) 14 15 func (s *DockerSwarmSuite) TestStackRemoveUnknown(c *check.C) { 16 d := s.AddDaemon(c, true, true) 17 18 stackArgs := append([]string{"stack", "remove", "UNKNOWN_STACK"}) 19 20 out, err := d.Cmd(stackArgs...) 21 c.Assert(err, checker.IsNil) 22 c.Assert(out, check.Equals, "Nothing found in stack: UNKNOWN_STACK\n") 23 } 24 25 func (s *DockerSwarmSuite) TestStackPSUnknown(c *check.C) { 26 d := s.AddDaemon(c, true, true) 27 28 stackArgs := append([]string{"stack", "ps", "UNKNOWN_STACK"}) 29 30 out, err := d.Cmd(stackArgs...) 31 c.Assert(err, checker.IsNil) 32 c.Assert(out, check.Equals, "Nothing found in stack: UNKNOWN_STACK\n") 33 } 34 35 func (s *DockerSwarmSuite) TestStackServicesUnknown(c *check.C) { 36 d := s.AddDaemon(c, true, true) 37 38 stackArgs := append([]string{"stack", "services", "UNKNOWN_STACK"}) 39 40 out, err := d.Cmd(stackArgs...) 41 c.Assert(err, checker.IsNil) 42 c.Assert(out, check.Equals, "Nothing found in stack: UNKNOWN_STACK\n") 43 } 44 45 func (s *DockerSwarmSuite) TestStackDeployComposeFile(c *check.C) { 46 d := s.AddDaemon(c, true, true) 47 48 testStackName := "testdeploy" 49 stackArgs := []string{ 50 "stack", "deploy", 51 "--compose-file", "fixtures/deploy/default.yaml", 52 testStackName, 53 } 54 out, err := d.Cmd(stackArgs...) 55 c.Assert(err, checker.IsNil, check.Commentf(out)) 56 57 out, err = d.Cmd("stack", "ls") 58 c.Assert(err, checker.IsNil) 59 c.Assert(out, check.Equals, "NAME SERVICES\n"+"testdeploy 2\n") 60 61 out, err = d.Cmd("stack", "rm", testStackName) 62 c.Assert(err, checker.IsNil) 63 out, err = d.Cmd("stack", "ls") 64 c.Assert(err, checker.IsNil) 65 c.Assert(out, check.Equals, "NAME SERVICES\n") 66 } 67 68 func (s *DockerSwarmSuite) TestStackDeployWithSecretsTwice(c *check.C) { 69 d := s.AddDaemon(c, true, true) 70 71 out, err := d.Cmd("secret", "create", "outside", "fixtures/secrets/default") 72 c.Assert(err, checker.IsNil, check.Commentf(out)) 73 74 testStackName := "testdeploy" 75 stackArgs := []string{ 76 "stack", "deploy", 77 "--compose-file", "fixtures/deploy/secrets.yaml", 78 testStackName, 79 } 80 out, err = d.Cmd(stackArgs...) 81 c.Assert(err, checker.IsNil, check.Commentf(out)) 82 83 out, err = d.Cmd("service", "inspect", "--format", "{{ json .Spec.TaskTemplate.ContainerSpec.Secrets }}", "testdeploy_web") 84 c.Assert(err, checker.IsNil) 85 86 var refs []swarm.SecretReference 87 c.Assert(json.Unmarshal([]byte(out), &refs), checker.IsNil) 88 c.Assert(refs, checker.HasLen, 3) 89 90 sort.Sort(sortSecrets(refs)) 91 c.Assert(refs[0].SecretName, checker.Equals, "outside") 92 c.Assert(refs[1].SecretName, checker.Equals, "testdeploy_special") 93 c.Assert(refs[1].File.Name, checker.Equals, "special") 94 c.Assert(refs[2].SecretName, checker.Equals, "testdeploy_super") 95 c.Assert(refs[2].File.Name, checker.Equals, "foo.txt") 96 c.Assert(refs[2].File.Mode, checker.Equals, os.FileMode(0400)) 97 98 // Deploy again to ensure there are no errors when secret hasn't changed 99 out, err = d.Cmd(stackArgs...) 100 c.Assert(err, checker.IsNil, check.Commentf(out)) 101 } 102 103 func (s *DockerSwarmSuite) TestStackRemove(c *check.C) { 104 d := s.AddDaemon(c, true, true) 105 106 stackName := "testdeploy" 107 stackArgs := []string{ 108 "stack", "deploy", 109 "--compose-file", "fixtures/deploy/remove.yaml", 110 stackName, 111 } 112 out, err := d.Cmd(stackArgs...) 113 c.Assert(err, checker.IsNil, check.Commentf(out)) 114 115 out, err = d.Cmd("stack", "ps", stackName) 116 c.Assert(err, checker.IsNil) 117 c.Assert(strings.Split(strings.TrimSpace(out), "\n"), checker.HasLen, 2) 118 119 out, err = d.Cmd("stack", "rm", stackName) 120 c.Assert(err, checker.IsNil, check.Commentf(out)) 121 c.Assert(out, checker.Contains, "Removing service testdeploy_web") 122 c.Assert(out, checker.Contains, "Removing network testdeploy_default") 123 c.Assert(out, checker.Contains, "Removing secret testdeploy_special") 124 } 125 126 type sortSecrets []swarm.SecretReference 127 128 func (s sortSecrets) Len() int { return len(s) } 129 func (s sortSecrets) Swap(i, j int) { s[i], s[j] = s[j], s[i] } 130 func (s sortSecrets) Less(i, j int) bool { return s[i].SecretName < s[j].SecretName } 131 132 // testDAB is the DAB JSON used for testing. 133 // TODO: Use template/text and substitute "Image" with the result of 134 // `docker inspect --format '{{index .RepoDigests 0}}' busybox:latest` 135 const testDAB = `{ 136 "Version": "0.1", 137 "Services": { 138 "srv1": { 139 "Image": "busybox@sha256:e4f93f6ed15a0cdd342f5aae387886fba0ab98af0a102da6276eaf24d6e6ade0", 140 "Command": ["top"] 141 }, 142 "srv2": { 143 "Image": "busybox@sha256:e4f93f6ed15a0cdd342f5aae387886fba0ab98af0a102da6276eaf24d6e6ade0", 144 "Command": ["tail"], 145 "Args": ["-f", "/dev/null"] 146 } 147 } 148 }` 149 150 func (s *DockerSwarmSuite) TestStackDeployWithDAB(c *check.C) { 151 testRequires(c, ExperimentalDaemon) 152 // setup 153 testStackName := "test" 154 testDABFileName := testStackName + ".dab" 155 defer os.RemoveAll(testDABFileName) 156 err := ioutil.WriteFile(testDABFileName, []byte(testDAB), 0444) 157 c.Assert(err, checker.IsNil) 158 d := s.AddDaemon(c, true, true) 159 // deploy 160 stackArgs := []string{ 161 "stack", "deploy", 162 "--bundle-file", testDABFileName, 163 testStackName, 164 } 165 out, err := d.Cmd(stackArgs...) 166 c.Assert(err, checker.IsNil) 167 c.Assert(out, checker.Contains, "Loading bundle from test.dab\n") 168 c.Assert(out, checker.Contains, "Creating service test_srv1\n") 169 c.Assert(out, checker.Contains, "Creating service test_srv2\n") 170 // ls 171 stackArgs = []string{"stack", "ls"} 172 out, err = d.Cmd(stackArgs...) 173 c.Assert(err, checker.IsNil) 174 c.Assert(out, check.Equals, "NAME SERVICES\n"+"test 2\n") 175 // rm 176 stackArgs = []string{"stack", "rm", testStackName} 177 out, err = d.Cmd(stackArgs...) 178 c.Assert(err, checker.IsNil) 179 c.Assert(out, checker.Contains, "Removing service test_srv1\n") 180 c.Assert(out, checker.Contains, "Removing service test_srv2\n") 181 // ls (empty) 182 stackArgs = []string{"stack", "ls"} 183 out, err = d.Cmd(stackArgs...) 184 c.Assert(err, checker.IsNil) 185 c.Assert(out, check.Equals, "NAME SERVICES\n") 186 }