get.porter.sh/porter@v1.3.0/pkg/config/loader_test.go (about)

     1  package config
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/osteele/liquid"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestConfig_OverrideWithEnvironmentVariable(t *testing.T) {
    14  	// Do not run in parallel, it sets environment variables
    15  	os.Setenv("PORTER_DEFAULT_STORAGE", "")
    16  	defer os.Unsetenv("PORTER_DEFAULT_STORAGE")
    17  
    18  	c := NewTestConfig(t)
    19  	c.SetHomeDir("/home/myuser/.porter")
    20  
    21  	c.TestContext.AddTestFile("testdata/config.toml", "/home/myuser/.porter/config.toml")
    22  
    23  	c.DataLoader = LoadFromEnvironment()
    24  	_, err := c.Load(context.Background(), nil)
    25  
    26  	require.NoError(t, err, "dataloader failed")
    27  	assert.Equal(t, "warn", c.Data.Verbosity, "config.Verbosity was not set correctly")
    28  	assert.Empty(t, c.Data.DefaultStorage, "The config file value should be overridden by an empty env var")
    29  }
    30  
    31  func TestData_Marshal(t *testing.T) {
    32  	// Do not run in parallel, it sets environment variables
    33  	os.Setenv("VAULT_TOKEN", "topsecret-token")
    34  	defer os.Unsetenv("VAULT_TOKEN")
    35  
    36  	c := NewTestConfig(t)
    37  	c.SetHomeDir("/home/myuser/.porter")
    38  
    39  	c.TestContext.AddTestFile("testdata/config.toml", "/home/myuser/.porter/config.toml")
    40  
    41  	c.DataLoader = LoadFromEnvironment()
    42  	resolveTestSecrets := func(ctx context.Context, secretKey string) (string, error) {
    43  		return "topsecret-connectionstring", nil
    44  	}
    45  	_, err := c.Load(context.Background(), resolveTestSecrets)
    46  	require.NoError(t, err, "Load failed")
    47  
    48  	// Check Storage Attributes
    49  	assert.Equal(t, "dev", c.Data.DefaultStorage, "DefaultStorage was not loaded properly")
    50  	assert.Equal(t, "mongodb-docker", c.Data.DefaultStoragePlugin, "DefaultStoragePlugin was not loaded properly")
    51  
    52  	require.Len(t, c.Data.StoragePlugins, 1, "StoragePlugins was not loaded properly")
    53  	devStore := c.Data.StoragePlugins[0]
    54  	assert.Equal(t, "dev", devStore.Name, "StoragePlugins.Name was not loaded properly")
    55  	assert.Equal(t, "mongodb", devStore.PluginSubKey, "StoragePlugins.PluginSubKey was not loaded properly")
    56  	assert.Equal(t, map[string]interface{}{"url": "topsecret-connectionstring"}, devStore.Config, "StoragePlugins.Config was not loaded properly")
    57  
    58  	// Check Secret Attributes
    59  	assert.Equal(t, "red-team", c.Data.DefaultSecrets, "DefaultSecrets was not loaded properly")
    60  	assert.Equal(t, "azure.keyvault", c.Data.DefaultSecretsPlugin, "DefaultSecretsPlugin was not loaded properly")
    61  
    62  	require.Len(t, c.Data.SecretsPlugin, 1, "SecretsPlugins was not loaded properly")
    63  	teamSource := c.Data.SecretsPlugin[0]
    64  	assert.Equal(t, "red-team", teamSource.Name, "SecretsPlugins.Name was not loaded properly")
    65  	assert.Equal(t, "azure.keyvault", teamSource.PluginSubKey, "SecretsPlugins.PluginSubKey was not loaded properly")
    66  	assert.Equal(t, map[string]interface{}{"token": "topsecret-token", "vault": "teamsekrets"}, teamSource.Config, "SecretsPlugins.Config was not loaded properly")
    67  }
    68  
    69  func TestListTemplateVariables(t *testing.T) {
    70  	eng := liquid.NewEngine()
    71  	tmpl, err := eng.ParseString(`not a variable {{secrets.foo}} more non variable junk{{env.var}}{{env.var}}`)
    72  	require.NoError(t, err)
    73  
    74  	vars := listTemplateVariables(tmpl)
    75  	assert.Equal(t, []string{"env.var", "secrets.foo"}, vars)
    76  }