77 "testing"
88
99 "github.com/google/uuid"
10+ "github.com/stretchr/testify/assert"
1011 "github.com/stretchr/testify/require"
1112
1213 "github.com/docker/secrets-engine/store"
@@ -23,49 +24,102 @@ func TestMacosKeychain(t *testing.T) {
2324 serviceGroup = "test.testing." + uuid .NewString ()
2425 id = store .ID (serviceGroup + "/" + serviceName + "/" + uuid .NewString ())
2526 )
26- store := keychainStore [* mocks.MockCredential ]{
27+ keychainStore := keychainStore [* mocks.MockCredential ]{
2728 serviceGroup : "test.testing." + uuid .NewString (),
2829 serviceName : uuid .NewString (),
2930 factory : func () * mocks.MockCredential {
3031 return & mocks.MockCredential {}
3132 },
3233 }
3334
35+ ids := []store.ID {
36+ store .ID (serviceGroup + "/" + serviceName + "/" + uuid .NewString ()),
37+ store .ID (serviceGroup + "/" + serviceName + "/" + uuid .NewString ()),
38+ store .ID (serviceGroup + "/" + serviceName + "/" + uuid .NewString ()),
39+ }
40+ t .Cleanup (func () {
41+ for _ , id := range ids {
42+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
43+ }
44+ })
45+ for _ , id := range ids {
46+ assert .NoError (t , keychainStore .Save (t .Context (), id , & mocks.MockCredential {
47+ Username : uuid .NewString (),
48+ Password : uuid .NewString (),
49+ Attributes : map [string ]string {
50+ "color" : "purple" ,
51+ "game" : "unknown" ,
52+ },
53+ }))
54+ }
55+
3456 t .Run ("can have no attributes" , func (t * testing.T ) {
3557 t .Cleanup (func () {
36- require .NoError (t , store .Delete (t .Context (), id ))
58+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
3759 })
38- require .NoError (t , store .Save (t .Context (), id , secret ))
60+ require .NoError (t , keychainStore .Save (t .Context (), id , secret ))
3961 })
4062 t .Run ("can store large attributes" , func (t * testing.T ) {
4163 t .Cleanup (func () {
42- require .NoError (t , store .Delete (t .Context (), id ))
64+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
4365 })
4466 large := bytes .Repeat ([]byte {'a' }, 1024 * 1024 )
4567 secret .Attributes = map [string ]string {
4668 "large" : string (large ),
4769 "small" : "eyy" ,
4870 }
49- require .NoError (t , store .Save (t .Context (), id , secret ))
71+ require .NoError (t , keychainStore .Save (t .Context (), id , secret ))
5072 })
5173 t .Run ("filter populates both metadata and secret" , func (t * testing.T ) {
5274 t .Cleanup (func () {
53- require .NoError (t , store .Delete (t .Context (), id ))
75+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
5476 })
5577 secret .Attributes = map [string ]string {
5678 "game" : "elden ring" ,
5779 }
58- require .NoError (t , store .Save (t .Context (), id , secret ))
59- secrets , err := store .Filter (t .Context (), id , map [string ]string {
80+ require .NoError (t , keychainStore .Save (t .Context (), id , secret ))
81+ secrets , err := keychainStore .Filter (t .Context (), id , map [string ]string {
6082 "game" : "elden ring" ,
6183 })
6284 require .NoError (t , err )
63- require .Len (t , secrets , 1 )
64- require .Subset (t , secrets [id ].Metadata (), map [string ]string {
85+ assert .Len (t , secrets , 1 )
86+ assert .Subset (t , secrets [id ].Metadata (), map [string ]string {
6587 "game" : "elden ring" ,
6688 })
67- mockSecret , ok := secrets [id ].(* mocks.MockCredential )
68- require .Truef (t , ok , "secret from store must be of type *mocks.MockCredential" )
69- require .Equal (t , secret .Password , mockSecret .Password )
89+ assert .IsType (t , & mocks.MockCredential {}, secrets [id ], "secret from store must be of type *mocks.MockCredential" )
90+ mockSecret := secrets [id ].(* mocks.MockCredential )
91+ assert .Equal (t , secret .Password , mockSecret .Password )
92+ })
93+ t .Run ("can use partial id without filter" , func (t * testing.T ) {
94+ t .Cleanup (func () {
95+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
96+ })
97+ secret .Attributes = map [string ]string {
98+ "color" : "blue" ,
99+ "game" : "elden ring" ,
100+ }
101+ require .NoError (t , keychainStore .Save (t .Context (), id , secret ))
102+ secrets , err := keychainStore .Filter (t .Context (), store .ID (serviceName ), nil )
103+ require .NoError (t , err )
104+ assert .Len (t , secrets , 4 )
105+ _ , ok := secrets [id ]
106+ assert .Truef (t , ok , "returned secret must match original id" )
107+ })
108+ t .Run ("can filter using attributes instead of id" , func (t * testing.T ) {
109+ t .Cleanup (func () {
110+ assert .NoError (t , keychainStore .Delete (t .Context (), id ))
111+ })
112+ secret .Attributes = map [string ]string {
113+ "color" : "blue" ,
114+ "game" : "elden ring" ,
115+ }
116+ require .NoError (t , keychainStore .Save (t .Context (), id , secret ))
117+ secrets , err := keychainStore .Filter (t .Context (), store .ID (serviceGroup ), map [string ]string {
118+ "game" : "elden ring" ,
119+ })
120+ require .NoError (t , err )
121+ assert .Len (t , secrets , 1 )
122+ _ , ok := secrets [id ]
123+ assert .Truef (t , ok , "returned secret must match" )
70124 })
71125}
0 commit comments