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  }