diff --git a/src/pkg/config/config_test.go b/src/pkg/config/config_test.go index 5dd31dec4..1ad6f81b2 100644 --- a/src/pkg/config/config_test.go +++ b/src/pkg/config/config_test.go @@ -1,8 +1,10 @@ package config import ( + "fmt" "os" "path/filepath" + "strconv" "testing" "github.com/alcionai/clues" @@ -11,6 +13,8 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "github.com/alcionai/corso/src/cli/flags" + "github.com/alcionai/corso/src/internal/common/str" "github.com/alcionai/corso/src/internal/tester" "github.com/alcionai/corso/src/internal/tester/tconfig" "github.com/alcionai/corso/src/pkg/account" @@ -68,74 +72,74 @@ func (suite *ConfigSuite) TestRequireProps() { } } -// func (suite *ConfigSuite) TestReadRepoConfigBasic() { -// var ( -// t = suite.T() -// vpr = viper.New() -// ) +func (suite *ConfigSuite) TestReadRepoConfigBasic() { + var ( + t = suite.T() + vpr = viper.New() + ) -// const ( -// b = "read-repo-config-basic-bucket" -// tID = "6f34ac30-8196-469b-bf8f-d83deadbbbba" -// accKey = "aws-test-access-key" -// secret = "aws-test-secret-key" -// token = "aws-test-session-token" -// passphrase = "passphrase-test" -// azureClientID = "azure-client-id-test" -// azureSecret = "azure-secret-test" -// endpoint = "s3-test" -// disableTLS = "true" -// disableTLSVerification = "true" -// ) + const ( + b = "read-repo-config-basic-bucket" + tID = "6f34ac30-8196-469b-bf8f-d83deadbbbba" + accKey = "aws-test-access-key" + secret = "aws-test-secret-key" + token = "aws-test-session-token" + passphrase = "passphrase-test" + azureClientID = "azure-client-id-test" + azureSecret = "azure-secret-test" + endpoint = "s3-test" + disableTLS = "true" + disableTLSVerification = "true" + ) -// // Generate test config file -// testConfigData := fmt.Sprintf(configFileTemplate, b, tID, accKey, secret, -// token, passphrase, azureClientID, azureSecret, -// disableTLS, disableTLSVerification) -// testConfigFilePath := filepath.Join(t.TempDir(), "corso.toml") -// err := os.WriteFile(testConfigFilePath, []byte(testConfigData), 0o700) -// require.NoError(t, err, clues.ToCore(err)) + // Generate test config file + testConfigData := fmt.Sprintf(configFileTemplate, b, tID, accKey, secret, + token, passphrase, azureClientID, azureSecret, + disableTLS, disableTLSVerification) + testConfigFilePath := filepath.Join(t.TempDir(), "corso.toml") + err := os.WriteFile(testConfigFilePath, []byte(testConfigData), 0o700) + require.NoError(t, err, clues.ToCore(err)) -// // Configure viper to read test config file -// vpr.SetConfigFile(testConfigFilePath) + // Configure viper to read test config file + vpr.SetConfigFile(testConfigFilePath) -// // Read and validate config -// err = vpr.ReadInConfig() -// require.NoError(t, err, "reading repo config", clues.ToCore(err)) + // Read and validate config + err = vpr.ReadInConfig() + require.NoError(t, err, "reading repo config", clues.ToCore(err)) -// sc, err := storage.NewStorageConfig(storage.ProviderS3) -// require.NoError(t, err, clues.ToCore(err)) -// err = sc.ApplyConfigOverrides(vpr, true, true, nil) -// require.NoError(t, err, clues.ToCore(err)) + sc, err := storage.NewStorageConfig(storage.ProviderS3) + require.NoError(t, err, clues.ToCore(err)) + err = sc.ApplyConfigOverrides(vpr, true, true, nil) + require.NoError(t, err, clues.ToCore(err)) -// s3Cfg := sc.(*storage.S3Config) + s3Cfg := sc.(*storage.S3Config) -// assert.Equal(t, b, s3Cfg.Bucket) -// assert.Equal(t, "test-prefix/", s3Cfg.Prefix) -// assert.Equal(t, disableTLS, strconv.FormatBool(s3Cfg.DoNotUseTLS)) -// assert.Equal(t, disableTLSVerification, strconv.FormatBool(s3Cfg.DoNotVerifyTLS)) + assert.Equal(t, b, s3Cfg.Bucket) + assert.Equal(t, "test-prefix/", s3Cfg.Prefix) + assert.Equal(t, disableTLS, strconv.FormatBool(s3Cfg.DoNotUseTLS)) + assert.Equal(t, disableTLSVerification, strconv.FormatBool(s3Cfg.DoNotVerifyTLS)) -// // Config file may or may not be the source of truth for below values. These may be -// // overridden by env vars (and flags but not relevant for this test). -// // -// // Other alternatives are: -// // 1) unset env vars temporarily so that we can test against config file values. But that -// // may be problematic if we decide to parallelize tests in future. -// // 2) assert against env var values instead of config file values. This can cause issues -// // if CI/local env have different config override mechanisms. -// // 3) Skip asserts for these keys. They will be validated in other tests. Choosing this -// // option. + // Config file may or may not be the source of truth for below values. These may be + // overridden by env vars (and flags but not relevant for this test). + // + // Other alternatives are: + // 1) unset env vars temporarily so that we can test against config file values. But that + // may be problematic if we decide to parallelize tests in future. + // 2) assert against env var values instead of config file values. This can cause issues + // if CI/local env have different config override mechanisms. + // 3) Skip asserts for these keys. They will be validated in other tests. Choosing this + // option. -// // assert.Equal(t, accKey, s3Cfg.AWS.AccessKey) -// // assert.Equal(t, secret, s3Cfg.AWS.SecretKey) -// // assert.Equal(t, token, s3Cfg.AWS.SessionToken) + // assert.Equal(t, accKey, s3Cfg.AWS.AccessKey) + // assert.Equal(t, secret, s3Cfg.AWS.SecretKey) + // assert.Equal(t, token, s3Cfg.AWS.SessionToken) -// m365, err := m365ConfigsFromViper(vpr) -// require.NoError(t, err, clues.ToCore(err)) -// assert.Equal(t, azureClientID, m365.AzureClientID) -// assert.Equal(t, azureSecret, m365.AzureClientSecret) -// assert.Equal(t, tID, m365.AzureTenantID) -// } + m365, err := m365ConfigsFromViper(vpr) + require.NoError(t, err, clues.ToCore(err)) + assert.Equal(t, azureClientID, m365.AzureClientID) + assert.Equal(t, azureSecret, m365.AzureClientSecret) + assert.Equal(t, tID, m365.AzureTenantID) +} func (suite *ConfigSuite) TestWriteReadConfig() { var ( @@ -281,113 +285,113 @@ func (suite *ConfigSuite) TestMustMatchConfig() { } } -// func (suite *ConfigSuite) TestReadFromFlags() { -// var ( -// t = suite.T() -// vpr = viper.New() -// ) +func (suite *ConfigSuite) TestReadFromFlags() { + var ( + t = suite.T() + vpr = viper.New() + ) -// ctx, flush := tester.NewContext(t) -// defer flush() + ctx, flush := tester.NewContext(t) + defer flush() -// const ( -// b = "read-repo-config-basic-bucket" -// tID = "6f34ac30-8196-469b-bf8f-d83deadbbbba" -// accKey = "aws-test-access-key" -// secret = "aws-test-secret-key" -// token = "aws-test-session-token" -// passphrase = "passphrase-test" -// azureClientID = "azure-client-id-test" -// azureSecret = "azure-secret-test" -// prefix = "prefix-test" -// disableTLS = "true" -// disableTLSVerification = "true" -// ) + const ( + b = "read-repo-config-basic-bucket" + tID = "6f34ac30-8196-469b-bf8f-d83deadbbbba" + accKey = "aws-test-access-key" + secret = "aws-test-secret-key" + token = "aws-test-session-token" + passphrase = "passphrase-test" + azureClientID = "azure-client-id-test" + azureSecret = "azure-secret-test" + prefix = "prefix-test" + disableTLS = "true" + disableTLSVerification = "true" + ) -// t.Cleanup(func() { -// // reset values -// flags.AzureClientTenantFV = "" -// flags.AzureClientIDFV = "" -// flags.AzureClientSecretFV = "" + t.Cleanup(func() { + // reset values + flags.AzureClientTenantFV = "" + flags.AzureClientIDFV = "" + flags.AzureClientSecretFV = "" -// flags.AWSAccessKeyFV = "" -// flags.AWSSecretAccessKeyFV = "" -// flags.AWSSessionTokenFV = "" + flags.AWSAccessKeyFV = "" + flags.AWSSecretAccessKeyFV = "" + flags.AWSSessionTokenFV = "" -// flags.PassphraseFV = "" -// }) + flags.PassphraseFV = "" + }) -// // Generate test config file -// testConfigData := fmt.Sprintf(configFileTemplate, b, tID, accKey, secret, token, -// passphrase, azureClientID, azureSecret, -// disableTLS, disableTLSVerification) + // Generate test config file + testConfigData := fmt.Sprintf(configFileTemplate, b, tID, accKey, secret, token, + passphrase, azureClientID, azureSecret, + disableTLS, disableTLSVerification) -// testConfigFilePath := filepath.Join(t.TempDir(), "corso.toml") -// err := os.WriteFile(testConfigFilePath, []byte(testConfigData), 0o700) -// require.NoError(t, err, clues.ToCore(err)) + testConfigFilePath := filepath.Join(t.TempDir(), "corso.toml") + err := os.WriteFile(testConfigFilePath, []byte(testConfigData), 0o700) + require.NoError(t, err, clues.ToCore(err)) -// // Configure viper to read test config file -// vpr.SetConfigFile(testConfigFilePath) + // Configure viper to read test config file + vpr.SetConfigFile(testConfigFilePath) -// // Read and validate config -// err = vpr.ReadInConfig() -// require.NoError(t, err, "reading repo config", clues.ToCore(err)) + // Read and validate config + err = vpr.ReadInConfig() + require.NoError(t, err, "reading repo config", clues.ToCore(err)) -// overrides := map[string]string{} -// flags.AzureClientTenantFV = "6f34ac30-8196-469b-bf8f-d83deadbbbba" -// flags.AzureClientIDFV = "azure-id-flag-value" -// flags.AzureClientSecretFV = "azure-secret-flag-value" + overrides := map[string]string{} + flags.AzureClientTenantFV = "6f34ac30-8196-469b-bf8f-d83deadbbbba" + flags.AzureClientIDFV = "azure-id-flag-value" + flags.AzureClientSecretFV = "azure-secret-flag-value" -// flags.AWSAccessKeyFV = "aws-access-key" -// flags.AWSSecretAccessKeyFV = "aws-access-secret-flag-value" -// flags.AWSSessionTokenFV = "aws-access-session-flag-value" + flags.AWSAccessKeyFV = "aws-access-key" + flags.AWSSecretAccessKeyFV = "aws-access-secret-flag-value" + flags.AWSSessionTokenFV = "aws-access-session-flag-value" -// overrides[storage.Bucket] = "flag-bucket" -// overrides[storage.Endpoint] = "flag-endpoint" -// overrides[storage.Prefix] = "flag-prefix" -// overrides[storage.DoNotUseTLS] = "true" -// overrides[storage.DoNotVerifyTLS] = "true" -// overrides[credentials.AWSAccessKeyID] = flags.AWSAccessKeyFV -// overrides[credentials.AWSSecretAccessKey] = flags.AWSSecretAccessKeyFV -// overrides[credentials.AWSSessionToken] = flags.AWSSessionTokenFV + overrides[storage.Bucket] = "flag-bucket" + overrides[storage.Endpoint] = "flag-endpoint" + overrides[storage.Prefix] = "flag-prefix" + overrides[storage.DoNotUseTLS] = "true" + overrides[storage.DoNotVerifyTLS] = "true" + overrides[credentials.AWSAccessKeyID] = flags.AWSAccessKeyFV + overrides[credentials.AWSSecretAccessKey] = flags.AWSSecretAccessKeyFV + overrides[credentials.AWSSessionToken] = flags.AWSSessionTokenFV -// flags.PassphraseFV = "passphrase-flags" + flags.PassphraseFV = "passphrase-flags" -// repoDetails, err := getStorageAndAccountWithViper( -// ctx, -// vpr, -// storage.ProviderS3, -// true, -// false, -// overrides) -// require.NoError(t, err, "getting storage and account from config", clues.ToCore(err)) + repoDetails, err := getStorageAndAccountWithViper( + ctx, + vpr, + storage.ProviderS3, + true, + false, + overrides) + require.NoError(t, err, "getting storage and account from config", clues.ToCore(err)) -// m365Config, _ := repoDetails.Account.M365Config() + m365Config, _ := repoDetails.Account.M365Config() -// s3Cfg, err := repoDetails.Storage.ToS3Config() -// require.NoError(t, err, "reading s3 config from storage", clues.ToCore(err)) + s3Cfg, err := repoDetails.Storage.ToS3Config() + require.NoError(t, err, "reading s3 config from storage", clues.ToCore(err)) -// commonConfig, _ := repoDetails.Storage.CommonConfig() -// pass := commonConfig.Corso.CorsoPassphrase + commonConfig, _ := repoDetails.Storage.CommonConfig() + pass := commonConfig.Corso.CorsoPassphrase -// require.NoError(t, err, "reading repo config", clues.ToCore(err)) + require.NoError(t, err, "reading repo config", clues.ToCore(err)) -// assert.Equal(t, flags.AWSAccessKeyFV, s3Cfg.AWS.AccessKey) -// assert.Equal(t, flags.AWSSecretAccessKeyFV, s3Cfg.AWS.SecretKey) -// assert.Equal(t, flags.AWSSessionTokenFV, s3Cfg.AWS.SessionToken) + assert.Equal(t, flags.AWSAccessKeyFV, s3Cfg.AWS.AccessKey) + assert.Equal(t, flags.AWSSecretAccessKeyFV, s3Cfg.AWS.SecretKey) + assert.Equal(t, flags.AWSSessionTokenFV, s3Cfg.AWS.SessionToken) -// assert.Equal(t, overrides[storage.Bucket], s3Cfg.Bucket) -// assert.Equal(t, overrides[storage.Endpoint], s3Cfg.Endpoint) -// assert.Equal(t, overrides[storage.Prefix], s3Cfg.Prefix) -// assert.Equal(t, str.ParseBool(overrides[storage.DoNotUseTLS]), s3Cfg.DoNotUseTLS) -// assert.Equal(t, str.ParseBool(overrides[storage.DoNotVerifyTLS]), s3Cfg.DoNotVerifyTLS) + assert.Equal(t, overrides[storage.Bucket], s3Cfg.Bucket) + assert.Equal(t, overrides[storage.Endpoint], s3Cfg.Endpoint) + assert.Equal(t, overrides[storage.Prefix], s3Cfg.Prefix) + assert.Equal(t, str.ParseBool(overrides[storage.DoNotUseTLS]), s3Cfg.DoNotUseTLS) + assert.Equal(t, str.ParseBool(overrides[storage.DoNotVerifyTLS]), s3Cfg.DoNotVerifyTLS) -// assert.Equal(t, flags.AzureClientIDFV, m365Config.AzureClientID) -// assert.Equal(t, flags.AzureClientSecretFV, m365Config.AzureClientSecret) -// assert.Equal(t, flags.AzureClientTenantFV, m365Config.AzureTenantID) + assert.Equal(t, flags.AzureClientIDFV, m365Config.AzureClientID) + assert.Equal(t, flags.AzureClientSecretFV, m365Config.AzureClientSecret) + assert.Equal(t, flags.AzureClientTenantFV, m365Config.AzureTenantID) -// assert.Equal(t, flags.PassphraseFV, pass) -// } + assert.Equal(t, flags.PassphraseFV, pass) +} // ------------------------------------------------------------ // integration tests