github.com/lazyboychen7/engine@v17.12.1-ce-rc2+incompatible/integration-cli/docker_api_swarm_secret_test.go (about)

     1  // +build !windows
     2  
     3  package main
     4  
     5  import (
     6  	"net/http"
     7  
     8  	"github.com/docker/docker/api/types/swarm"
     9  	"github.com/docker/docker/integration-cli/checker"
    10  	"github.com/go-check/check"
    11  	"golang.org/x/net/context"
    12  )
    13  
    14  func (s *DockerSwarmSuite) TestAPISwarmSecretsEmptyList(c *check.C) {
    15  	d := s.AddDaemon(c, true, true)
    16  
    17  	secrets := d.ListSecrets(c)
    18  	c.Assert(secrets, checker.NotNil)
    19  	c.Assert(len(secrets), checker.Equals, 0, check.Commentf("secrets: %#v", secrets))
    20  }
    21  
    22  func (s *DockerSwarmSuite) TestAPISwarmSecretsCreate(c *check.C) {
    23  	d := s.AddDaemon(c, true, true)
    24  
    25  	testName := "test_secret"
    26  	secretSpec := swarm.SecretSpec{
    27  		Annotations: swarm.Annotations{
    28  			Name: testName,
    29  		},
    30  		Data: []byte("TESTINGDATA"),
    31  	}
    32  
    33  	id := d.CreateSecret(c, secretSpec)
    34  	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
    35  
    36  	secrets := d.ListSecrets(c)
    37  	c.Assert(len(secrets), checker.Equals, 1, check.Commentf("secrets: %#v", secrets))
    38  	name := secrets[0].Spec.Annotations.Name
    39  	c.Assert(name, checker.Equals, testName, check.Commentf("secret: %s", name))
    40  
    41  	// create an already existing secret, daemon should return a status code of 409
    42  	status, out, err := d.SockRequest("POST", "/secrets/create", secretSpec)
    43  	c.Assert(err, checker.IsNil)
    44  	c.Assert(status, checker.Equals, http.StatusConflict, check.Commentf("secret create: %s", string(out)))
    45  }
    46  
    47  func (s *DockerSwarmSuite) TestAPISwarmSecretsDelete(c *check.C) {
    48  	d := s.AddDaemon(c, true, true)
    49  
    50  	testName := "test_secret"
    51  	id := d.CreateSecret(c, swarm.SecretSpec{Annotations: swarm.Annotations{
    52  		Name: testName,
    53  	},
    54  		Data: []byte("TESTINGDATA"),
    55  	})
    56  	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
    57  
    58  	secret := d.GetSecret(c, id)
    59  	c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
    60  
    61  	d.DeleteSecret(c, secret.ID)
    62  
    63  	cli, err := d.NewClient()
    64  	c.Assert(err, checker.IsNil)
    65  	defer cli.Close()
    66  
    67  	_, _, err = cli.SecretInspectWithRaw(context.Background(), id)
    68  	c.Assert(err.Error(), checker.Contains, "No such secret")
    69  
    70  	id = "non-existing"
    71  	err = cli.SecretRemove(context.Background(), id)
    72  	c.Assert(err.Error(), checker.Contains, "No such secret: non-existing")
    73  }
    74  
    75  func (s *DockerSwarmSuite) TestAPISwarmSecretsUpdate(c *check.C) {
    76  	d := s.AddDaemon(c, true, true)
    77  
    78  	testName := "test_secret"
    79  	id := d.CreateSecret(c, swarm.SecretSpec{
    80  		Annotations: swarm.Annotations{
    81  			Name: testName,
    82  			Labels: map[string]string{
    83  				"test": "test1",
    84  			},
    85  		},
    86  		Data: []byte("TESTINGDATA"),
    87  	})
    88  	c.Assert(id, checker.Not(checker.Equals), "", check.Commentf("secrets: %s", id))
    89  
    90  	secret := d.GetSecret(c, id)
    91  	c.Assert(secret.ID, checker.Equals, id, check.Commentf("secret: %v", secret))
    92  
    93  	// test UpdateSecret with full ID
    94  	d.UpdateSecret(c, id, func(s *swarm.Secret) {
    95  		s.Spec.Labels = map[string]string{
    96  			"test": "test1",
    97  		}
    98  	})
    99  
   100  	secret = d.GetSecret(c, id)
   101  	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test1", check.Commentf("secret: %v", secret))
   102  
   103  	// test UpdateSecret with full name
   104  	d.UpdateSecret(c, secret.Spec.Name, func(s *swarm.Secret) {
   105  		s.Spec.Labels = map[string]string{
   106  			"test": "test2",
   107  		}
   108  	})
   109  
   110  	secret = d.GetSecret(c, id)
   111  	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test2", check.Commentf("secret: %v", secret))
   112  
   113  	// test UpdateSecret with prefix ID
   114  	d.UpdateSecret(c, id[:1], func(s *swarm.Secret) {
   115  		s.Spec.Labels = map[string]string{
   116  			"test": "test3",
   117  		}
   118  	})
   119  
   120  	secret = d.GetSecret(c, id)
   121  	c.Assert(secret.Spec.Labels["test"], checker.Equals, "test3", check.Commentf("secret: %v", secret))
   122  
   123  	// test UpdateSecret in updating Data which is not supported in daemon
   124  	// this test will produce an error in func UpdateSecret
   125  	secret = d.GetSecret(c, id)
   126  	secret.Spec.Data = []byte("TESTINGDATA2")
   127  
   128  	cli, err := d.NewClient()
   129  	c.Assert(err, checker.IsNil)
   130  	defer cli.Close()
   131  
   132  	expected := "only updates to Labels are allowed"
   133  
   134  	err = cli.SecretUpdate(context.Background(), secret.ID, secret.Version, secret.Spec)
   135  	c.Assert(err.Error(), checker.Contains, expected)
   136  }