integration-cli/docker_api_swarm_secret_test.go
69afd304
 // +build !windows
 
 package main
 
 import (
 	"net/http"
 
 	"github.com/docker/docker/api/types/swarm"
 	"github.com/docker/docker/integration-cli/checker"
 	"github.com/go-check/check"
0fd5a654
 	"golang.org/x/net/context"
69afd304
 )
 
 func (s *DockerSwarmSuite) TestAPISwarmSecretsEmptyList(c *check.C) {
 	d := s.AddDaemon(c, true, true)
 
 	secrets := d.ListSecrets(c)
 	c.Assert(secrets, checker.NotNil)
 	c.Assert(len(secrets), checker.Equals, 0, check.Commentf("secrets: %#v", secrets))
 }
 
 func (s *DockerSwarmSuite) TestAPISwarmSecretsCreate(c *check.C) {
 	d := s.AddDaemon(c, true, true)
 
 	testName := "test_secret"
f257f77c
 	secretSpec := swarm.SecretSpec{
2333b39b
 		Annotations: swarm.Annotations{
69afd304
 			Name: testName,
 		},
2333b39b
 		Data: []byte("TESTINGDATA"),
f257f77c
 	}
 
 	id := d.CreateSecret(c, secretSpec)
69afd304
 	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
 
 	secrets := d.ListSecrets(c)
 	c.Assert(len(secrets), checker.Equals, 1, check.Commentf("secrets: %#v", secrets))
 	name := secrets[0].Spec.Annotations.Name
 	c.Assert(name, checker.Equals, testName, check.Commentf("secret: %s", name))
f257f77c
 
 	// create an already existing secret, daemon should return a status code of 409
 	status, out, err := d.SockRequest("POST", "/secrets/create", secretSpec)
 	c.Assert(err, checker.IsNil)
 	c.Assert(status, checker.Equals, http.StatusConflict, check.Commentf("secret create: %s", string(out)))
69afd304
 }
 
 func (s *DockerSwarmSuite) TestAPISwarmSecretsDelete(c *check.C) {
 	d := s.AddDaemon(c, true, true)
 
 	testName := "test_secret"
2333b39b
 	id := d.CreateSecret(c, swarm.SecretSpec{Annotations: swarm.Annotations{
 		Name: testName,
 	},
 		Data: []byte("TESTINGDATA"),
69afd304
 	})
 	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
 
 	secret := d.GetSecret(c, id)
 	c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
 
 	d.DeleteSecret(c, secret.ID)
f257f77c
 
0fd5a654
 	cli, err := d.NewClient()
f257f77c
 	c.Assert(err, checker.IsNil)
0fd5a654
 	defer cli.Close()
 
 	_, _, err = cli.SecretInspectWithRaw(context.Background(), id)
81bb9978
 	c.Assert(err.Error(), checker.Contains, "No such secret")
f257f77c
 
0fd5a654
 	id = "non-existing"
 	err = cli.SecretRemove(context.Background(), id)
81bb9978
 	c.Assert(err.Error(), checker.Contains, "No such secret: non-existing")
69afd304
 }
9d30525a
 
 func (s *DockerSwarmSuite) TestAPISwarmSecretsUpdate(c *check.C) {
 	d := s.AddDaemon(c, true, true)
 
 	testName := "test_secret"
 	id := d.CreateSecret(c, swarm.SecretSpec{
2333b39b
 		Annotations: swarm.Annotations{
9d30525a
 			Name: testName,
 			Labels: map[string]string{
 				"test": "test1",
 			},
 		},
2333b39b
 		Data: []byte("TESTINGDATA"),
9d30525a
 	})
 	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
 
 	secret := d.GetSecret(c, id)
 	c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
 
 	// test UpdateSecret with full ID
 	d.UpdateSecret(c, id, func(s *swarm.Secret) {
 		s.Spec.Labels = map[string]string{
 			"test": "test1",
 		}
 	})
 
 	secret = d.GetSecret(c, id)
 	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test1", check.Commentf("secret: %v", secret))
 
 	// test UpdateSecret with full name
 	d.UpdateSecret(c, secret.Spec.Name, func(s *swarm.Secret) {
 		s.Spec.Labels = map[string]string{
 			"test": "test2",
 		}
 	})
 
 	secret = d.GetSecret(c, id)
 	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test2", check.Commentf("secret: %v", secret))
 
 	// test UpdateSecret with prefix ID
 	d.UpdateSecret(c, id[:1], func(s *swarm.Secret) {
 		s.Spec.Labels = map[string]string{
 			"test": "test3",
 		}
 	})
 
 	secret = d.GetSecret(c, id)
 	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test3", check.Commentf("secret: %v", secret))
 
 	// test UpdateSecret in updating Data which is not supported in daemon
 	// this test will produce an error in func UpdateSecret
 	secret = d.GetSecret(c, id)
 	secret.Spec.Data = []byte("TESTINGDATA2")
 
0fd5a654
 	cli, err := d.NewClient()
 	c.Assert(err, checker.IsNil)
 	defer cli.Close()
 
 	expected := "only updates to Labels are allowed"
9d30525a
 
0fd5a654
 	err = cli.SecretUpdate(context.Background(), secret.ID, secret.Version, secret.Spec)
 	c.Assert(err.Error(), checker.Contains, expected)
9d30525a
 }