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  }