get.porter.sh/porter@v1.3.0/pkg/storage/credential_store_test.go (about) 1 package storage 2 3 import ( 4 "context" 5 "testing" 6 7 "get.porter.sh/porter/pkg/secrets" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestCredentialStorage_CRUD(t *testing.T) { 13 cs := NewCredentialSet("dev", "sekrets", secrets.SourceMap{ 14 Name: "password", Source: secrets.Source{ 15 Strategy: "secret", 16 Hint: "dbPassword"}}) 17 18 cp := NewTestCredentialProvider(t) 19 defer cp.Close() 20 21 require.NoError(t, cp.InsertCredentialSet(context.Background(), cs)) 22 23 creds, err := cp.ListCredentialSets(context.Background(), ListOptions{Namespace: "dev"}) 24 require.NoError(t, err) 25 require.Len(t, creds, 1, "expected 1 credential set") 26 require.Equal(t, cs.Name, creds[0].Name, "expected to retrieve sekrets credentials") 27 require.Equal(t, cs.Namespace, creds[0].Namespace, "expected to retrieve sekrets credentials") 28 29 creds, err = cp.ListCredentialSets(context.Background(), ListOptions{}) 30 require.NoError(t, err) 31 require.Len(t, creds, 0, "expected no global credential sets") 32 33 creds, err = cp.ListCredentialSets(context.Background(), ListOptions{Namespace: "*"}) 34 require.NoError(t, err) 35 require.Len(t, creds, 1, "expected 1 credential set defined in all namespaces") 36 37 cs.Credentials = append(cs.Credentials, secrets.SourceMap{ 38 Name: "token", Source: secrets.Source{ 39 Strategy: "secret", 40 Hint: "github-token", 41 }, 42 }) 43 require.NoError(t, cp.UpdateCredentialSet(context.Background(), cs)) 44 cs, err = cp.GetCredentialSet(context.Background(), cs.Namespace, cs.Name) 45 require.NoError(t, err) 46 assert.Len(t, cs.Credentials, 2) 47 48 cs2 := NewCredentialSet("dev", "sekrets-2", secrets.SourceMap{ 49 Name: "password-2", Source: secrets.Source{ 50 Strategy: "secret-2", 51 Hint: "dbPassword-2"}}) 52 require.NoError(t, cp.InsertCredentialSet(context.Background(), cs2)) 53 54 creds, err = cp.ListCredentialSets(context.Background(), ListOptions{Namespace: "dev", Skip: 1}) 55 require.NoError(t, err) 56 require.Len(t, creds, 1, "expected 1 credential set") 57 require.Equal(t, cs2.Name, creds[0].Name, "expected to retrieve sekrets-2 credentials") 58 require.Equal(t, cs2.Namespace, creds[0].Namespace, "expected to retrieve sekrets-2 credentials") 59 60 creds, err = cp.ListCredentialSets(context.Background(), ListOptions{Namespace: "dev", Limit: 1}) 61 require.NoError(t, err) 62 require.Len(t, creds, 1, "expected 1 credential set") 63 require.Equal(t, cs.Name, creds[0].Name, "expected to retrieve sekrets credentials") 64 require.Equal(t, cs.Namespace, creds[0].Namespace, "expected to retrieve sekrets credentials") 65 66 require.NoError(t, cp.RemoveCredentialSet(context.Background(), cs.Namespace, cs.Name)) 67 require.NoError(t, cp.RemoveCredentialSet(context.Background(), cs2.Namespace, cs2.Name)) 68 _, err = cp.GetCredentialSet(context.Background(), cs.Namespace, cs.Name) 69 require.ErrorIs(t, err, ErrNotFound{}) 70 _, err = cp.GetCredentialSet(context.Background(), cs2.Namespace, cs2.Name) 71 require.ErrorIs(t, err, ErrNotFound{}) 72 } 73 74 func TestCredentialStorage_Validate_GoodSources(t *testing.T) { 75 s := CredentialStore{} 76 testCreds := NewCredentialSet("dev", "mycreds", 77 secrets.SourceMap{ 78 Source: secrets.Source{ 79 Strategy: "env", 80 Hint: "SOME_ENV", 81 }, 82 }, 83 secrets.SourceMap{ 84 Source: secrets.Source{ 85 Strategy: "value", 86 Hint: "somevalue", 87 }, 88 }) 89 90 err := s.Validate(context.Background(), testCreds) 91 require.NoError(t, err, "Validate did not return errors") 92 } 93 94 func TestCredentialStorage_Validate_BadSources(t *testing.T) { 95 s := CredentialStore{} 96 testCreds := NewCredentialSet("dev", "mycreds", 97 secrets.SourceMap{ 98 Source: secrets.Source{ 99 Strategy: "wrongthing", 100 Hint: "SOME_ENV", 101 }, 102 }, 103 secrets.SourceMap{ 104 Source: secrets.Source{ 105 Strategy: "anotherwrongthing", 106 Hint: "somevalue", 107 }, 108 }, 109 ) 110 111 err := s.Validate(context.Background(), testCreds) 112 require.Error(t, err, "Validate returned errors") 113 }