diff --git a/components/engine/integration-cli/docker_api_swarm_secret_test.go b/components/engine/integration-cli/docker_api_swarm_secret_test.go deleted file mode 100644 index c30e2237d8..0000000000 --- a/components/engine/integration-cli/docker_api_swarm_secret_test.go +++ /dev/null @@ -1,136 +0,0 @@ -// +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" - "golang.org/x/net/context" -) - -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" - secretSpec := swarm.SecretSpec{ - Annotations: swarm.Annotations{ - Name: testName, - }, - Data: []byte("TESTINGDATA"), - } - - id := d.CreateSecret(c, secretSpec) - 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)) - - // 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))) -} - -func (s *DockerSwarmSuite) TestAPISwarmSecretsDelete(c *check.C) { - d := s.AddDaemon(c, true, true) - - testName := "test_secret" - id := d.CreateSecret(c, swarm.SecretSpec{Annotations: swarm.Annotations{ - Name: testName, - }, - Data: []byte("TESTINGDATA"), - }) - 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) - - cli, err := d.NewClient() - c.Assert(err, checker.IsNil) - defer cli.Close() - - _, _, err = cli.SecretInspectWithRaw(context.Background(), id) - c.Assert(err.Error(), checker.Contains, "No such secret") - - id = "non-existing" - err = cli.SecretRemove(context.Background(), id) - c.Assert(err.Error(), checker.Contains, "No such secret: non-existing") -} - -func (s *DockerSwarmSuite) TestAPISwarmSecretsUpdate(c *check.C) { - d := s.AddDaemon(c, true, true) - - testName := "test_secret" - id := d.CreateSecret(c, swarm.SecretSpec{ - Annotations: swarm.Annotations{ - Name: testName, - Labels: map[string]string{ - "test": "test1", - }, - }, - Data: []byte("TESTINGDATA"), - }) - 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") - - cli, err := d.NewClient() - c.Assert(err, checker.IsNil) - defer cli.Close() - - expected := "only updates to Labels are allowed" - - err = cli.SecretUpdate(context.Background(), secret.ID, secret.Version, secret.Spec) - c.Assert(err.Error(), checker.Contains, expected) -} diff --git a/components/engine/integration/secret/secret_test.go b/components/engine/integration/secret/secret_test.go index 3915bf5e82..a6e9983e23 100644 --- a/components/engine/integration/secret/secret_test.go +++ b/components/engine/integration/secret/secret_test.go @@ -9,6 +9,7 @@ import ( swarmtypes "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/client" "github.com/docker/docker/integration/internal/swarm" + "github.com/docker/docker/internal/testutil" "github.com/gotestyourself/gotestyourself/skip" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -35,7 +36,7 @@ func TestSecretInspect(t *testing.T) { secret, _, err = client.SecretInspectWithRaw(context.Background(), testName) require.NoError(t, err) - assert.Equal(t, secret.ID, secretID) + assert.Equal(t, secretID, secretID) } func TestSecretList(t *testing.T) { @@ -124,3 +125,110 @@ func createSecret(ctx context.Context, t *testing.T, client client.APIClient, na assert.NotEqual(t, secret.ID, "") return secret.ID } + +func TestSecretsCreate(t *testing.T) { + skip.If(t, testEnv.DaemonInfo.OSType != "linux") + + defer setupTest(t)() + d := swarm.NewSwarm(t, testEnv) + defer d.Stop(t) + client, err := client.NewClientWithOpts(client.WithHost((d.Sock()))) + require.NoError(t, err) + + ctx := context.Background() + + testName := "test_secret" + createSecret(ctx, t, client, testName, []byte("TESTINGDATA"), nil) + require.NoError(t, err) + + // create an already existin secret, daemon should return a status code of 409 + _, err = client.SecretCreate(ctx, swarmtypes.SecretSpec{ + Annotations: swarmtypes.Annotations{ + Name: testName, + }, + Data: []byte("TESTINGDATA"), + }) + testutil.ErrorContains(t, err, "already exists") +} + +func TestSecretsDelete(t *testing.T) { + skip.If(t, testEnv.DaemonInfo.OSType != "linux") + + defer setupTest(t)() + d := swarm.NewSwarm(t, testEnv) + defer d.Stop(t) + client, err := client.NewClientWithOpts(client.WithHost((d.Sock()))) + require.NoError(t, err) + + ctx := context.Background() + + testName := "test_secret" + secretID := createSecret(ctx, t, client, testName, []byte("TESTINGDATA"), nil) + require.NoError(t, err) + + insp, _, err := client.SecretInspectWithRaw(ctx, secretID) + require.NoError(t, err) + assert.Equal(t, insp.ID, secretID) + + err = client.SecretRemove(ctx, secretID) + require.NoError(t, err) + + _, _, err = client.SecretInspectWithRaw(ctx, secretID) + testutil.ErrorContains(t, err, "No such secret") + + err = client.SecretRemove(ctx, "non-existin") + testutil.ErrorContains(t, err, "No such secret: non-existin") +} + +func TestSecretsUpdate(t *testing.T) { + skip.If(t, testEnv.DaemonInfo.OSType != "linux") + + defer setupTest(t)() + d := swarm.NewSwarm(t, testEnv) + defer d.Stop(t) + client, err := client.NewClientWithOpts(client.WithHost((d.Sock()))) + require.NoError(t, err) + + ctx := context.Background() + + testName := "test_secret" + secretID := createSecret(ctx, t, client, testName, []byte("TESTINGDATA"), nil) + require.NoError(t, err) + + insp, _, err := client.SecretInspectWithRaw(ctx, secretID) + require.NoError(t, err) + assert.Equal(t, insp.ID, secretID) + + // test UpdateSecret with full ID + insp.Spec.Labels = map[string]string{"test": "test1"} + err = client.SecretUpdate(ctx, secretID, insp.Version, insp.Spec) + require.NoError(t, err) + + insp, _, err = client.SecretInspectWithRaw(ctx, secretID) + require.NoError(t, err) + assert.Equal(t, insp.Spec.Labels["test"], "test1") + + // test UpdateSecret with full name + insp.Spec.Labels = map[string]string{"test": "test2"} + err = client.SecretUpdate(ctx, testName, insp.Version, insp.Spec) + require.NoError(t, err) + + insp, _, err = client.SecretInspectWithRaw(ctx, secretID) + require.NoError(t, err) + assert.Equal(t, insp.Spec.Labels["test"], "test2") + + // test UpdateSecret with prefix ID + insp.Spec.Labels = map[string]string{"test": "test3"} + err = client.SecretUpdate(ctx, secretID[:1], insp.Version, insp.Spec) + require.NoError(t, err) + + insp, _, err = client.SecretInspectWithRaw(ctx, secretID) + require.NoError(t, err) + assert.Equal(t, insp.Spec.Labels["test"], "test3") + + // test UpdateSecret in updating Data which is not supported in daemon + // this test will produce an error in func UpdateSecret + insp.Spec.Data = []byte("TESTINGDATA2") + err = client.SecretUpdate(ctx, secretID, insp.Version, insp.Spec) + testutil.ErrorContains(t, err, "only updates to Labels are allowed") +}