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 }