get.porter.sh/porter@v1.3.0/pkg/storage/parameterset_provider_helpers.go (about) 1 package storage 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "get.porter.sh/porter/pkg/config" 11 "get.porter.sh/porter/pkg/encoding" 12 "get.porter.sh/porter/pkg/secrets" 13 "github.com/carolynvs/aferox" 14 "github.com/spf13/afero" 15 ) 16 17 var _ ParameterSetProvider = &TestParameterSetProvider{} 18 19 type TestParameterSetProvider struct { 20 *ParameterStore 21 22 T *testing.T 23 // TestSecrets allows you to set up secrets for unit testing 24 TestSecrets secrets.TestSecretsProvider 25 TestDocuments Store 26 } 27 28 func NewTestParameterProvider(t *testing.T) *TestParameterSetProvider { 29 tc := config.NewTestConfig(t) 30 testStore := NewTestStore(tc) 31 testSecrets := secrets.NewTestSecretsProvider() 32 return NewTestParameterProviderFor(t, testStore, testSecrets) 33 } 34 35 func NewTestParameterProviderFor(t *testing.T, testStore Store, testSecrets secrets.TestSecretsProvider) *TestParameterSetProvider { 36 return &TestParameterSetProvider{ 37 T: t, 38 TestDocuments: testStore, 39 TestSecrets: testSecrets, 40 ParameterStore: &ParameterStore{ 41 Documents: testStore, 42 Secrets: testSecrets, 43 }, 44 } 45 } 46 47 func (p TestParameterSetProvider) Close() error { 48 p.TestSecrets.Close() 49 return p.TestDocuments.Close() 50 } 51 52 // Load a ParameterSet from a test file at a given path. 53 // 54 // It does not load the individual parameters. 55 func (p TestParameterSetProvider) Load(path string) (ParameterSet, error) { 56 fs := aferox.NewAferox(".", afero.NewOsFs()) 57 var pset ParameterSet 58 err := encoding.UnmarshalFile(fs, path, &pset) 59 if err != nil { 60 return pset, fmt.Errorf("error reading %s as a parameter set: %w", path, err) 61 } 62 63 return pset, nil 64 } 65 66 func (p TestParameterSetProvider) AddTestParameters(path string) { 67 ps, err := p.Load(path) 68 if err != nil { 69 p.T.Fatal(fmt.Errorf("could not read test parameters from %s: %w", path, err)) 70 } 71 72 err = p.ParameterStore.InsertParameterSet(context.Background(), ps) 73 if err != nil { 74 p.T.Fatal(fmt.Errorf("could not load test parameters: %w", err)) 75 } 76 } 77 78 func (p TestParameterSetProvider) AddTestParametersDirectory(dir string) { 79 files, err := os.ReadDir(dir) 80 if err != nil { 81 p.T.Fatal(fmt.Errorf("could not list test directory %s: %w", dir, err)) 82 } 83 84 for _, fi := range files { 85 path := filepath.Join(dir, fi.Name()) 86 p.AddTestParameters(path) 87 } 88 } 89 90 func (p TestParameterSetProvider) AddSecret(key string, value string) { 91 err := p.TestSecrets.Create(context.Background(), secrets.SourceSecret, key, value) 92 if err != nil { 93 p.T.Fatal(fmt.Errorf("could not create secret %s: %w", key, err)) 94 } 95 }