github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/core/secrets/createsecret_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the LGPLv3, see LICENCE file for details. 3 4 package secrets_test 5 6 import ( 7 "fmt" 8 "os" 9 "path/filepath" 10 "strings" 11 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/core/secrets" 16 ) 17 18 type CreateSecretSuite struct{} 19 20 var _ = gc.Suite(&CreateSecretSuite{}) 21 22 func (s *CreateSecretSuite) TestBadKey(c *gc.C) { 23 _, err := secrets.CreateSecretData([]string{"fo=bar"}) 24 c.Assert(err, gc.ErrorMatches, `key "fo" not valid`) 25 } 26 27 func (s *CreateSecretSuite) TestKeyValues(c *gc.C) { 28 data, err := secrets.CreateSecretData([]string{"foo=bar", "hello=world", "goodbye#base64=world"}) 29 c.Assert(err, jc.ErrorIsNil) 30 c.Assert(data, jc.DeepEquals, secrets.SecretData{ 31 "foo": "YmFy", 32 "hello": "d29ybGQ=", 33 "goodbye": "world", 34 }) 35 } 36 37 func (s *CreateSecretSuite) TestKeyContentTooLarge(c *gc.C) { 38 content := strings.Repeat("a", 9*1024) 39 _, err := secrets.CreateSecretData([]string{"foo=" + content}) 40 c.Assert(err, gc.ErrorMatches, `secret content for key "foo" too large: 9216 bytes`) 41 } 42 43 func (s *CreateSecretSuite) TestTotalContentTooLarge(c *gc.C) { 44 content := strings.Repeat("a", 4*1024) 45 var args []string 46 for i := 1; i <= 20; i++ { 47 args = append(args, fmt.Sprintf("key%d=%s", i, content)) 48 } 49 _, err := secrets.CreateSecretData(args) 50 c.Assert(err, gc.ErrorMatches, `secret content too large: 81920 bytes`) 51 } 52 53 func (s *CreateSecretSuite) TestSecretKeyFromFile(c *gc.C) { 54 content := ` 55 -----BEGIN CERTIFICATE----- 56 MIIFYjCCA0qgAwIBAgIQKaPND9YggIG6+jOcgmpk3DANBgkqhkiG9w0BAQsFADAz 57 MRwwGgYDVQQKExNsaW51eGNvbnRhaW5lcnMub3JnMRMwEQYDVQQDDAp0aW1AZWx3 58 -----END CERTIFICATE-----`[1:] 59 60 dir := c.MkDir() 61 fileName := filepath.Join(dir, "secret-data.bin") 62 err := os.WriteFile(fileName, []byte(content), os.FileMode(0644)) 63 c.Assert(err, jc.ErrorIsNil) 64 65 data, err := secrets.CreateSecretData([]string{"key1=value1", "key2#file=" + fileName}) 66 c.Assert(err, jc.ErrorIsNil) 67 68 c.Assert(data, jc.DeepEquals, secrets.SecretData{ 69 "key1": "dmFsdWUx", 70 "key2": `ICAgICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICAgIE1JSUZZakNDQTBxZ0F3SUJBZ0lRS2FQTkQ5WWdnSUc2K2pPY2dtcGszREFOQmdrcWhraUc5dzBCQVFzRkFEQXoKICAgICAgTVJ3d0dnWURWUVFLRXhOc2FXNTFlR052Ym5SaGFXNWxjbk11YjNKbk1STXdFUVlEVlFRRERBcDBhVzFBWld4MwogICAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t`, 71 }) 72 } 73 74 func (s *CreateSecretSuite) TestYAMLFile(c *gc.C) { 75 data := ` 76 hello: world 77 goodbye#base64: world 78 another-key: !!binary | 79 R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5 80 OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+ 81 +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC 82 AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=` 83 84 dir := c.MkDir() 85 fileName := filepath.Join(dir, "secret.yaml") 86 err := os.WriteFile(fileName, []byte(data), os.FileMode(0644)) 87 c.Assert(err, jc.ErrorIsNil) 88 89 attrs, err := secrets.ReadSecretData(fileName) 90 c.Assert(err, jc.ErrorIsNil) 91 c.Assert(attrs, jc.DeepEquals, secrets.SecretData{ 92 "hello": "d29ybGQ=", 93 "goodbye": "world", 94 "another-key": `R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=`, 95 }) 96 } 97 98 func (s *CreateSecretSuite) TestJSONFile(c *gc.C) { 99 data := `{ 100 "hello": "world", 101 "goodbye#base64": "world", 102 }` 103 104 dir := c.MkDir() 105 fileName := filepath.Join(dir, "secret.json") 106 err := os.WriteFile(fileName, []byte(data), os.FileMode(0644)) 107 c.Assert(err, jc.ErrorIsNil) 108 109 attrs, err := secrets.ReadSecretData(fileName) 110 c.Assert(err, jc.ErrorIsNil) 111 c.Assert(attrs, jc.DeepEquals, secrets.SecretData{ 112 "hello": "d29ybGQ=", 113 "goodbye": "world", 114 }) 115 }