From de062cd5de007ba8bb44c172b8f95c1192e6e894 Mon Sep 17 00:00:00 2001 From: Abhishek Pandey Date: Wed, 13 Sep 2023 17:14:40 +0530 Subject: [PATCH] Minor refactor of storage provider stringer (#4228) One of the setup PRs before introducing local storage support for corso. Changes 1. Export `storage.storageProvider` and rename it to `storage.Provider`. Without the rename, linter errors out with `exported: type name will be used as storage.StorageProvider by other packages, and that stutters; consider calling this Provider` 2. Rerun stringer - `stringer -type=Provider -linecomment` 3. Introduce a new Provider - `FS` for filesystem. This is in line with kopia naming for local/network attached storage. 4. Fix hardcoded string values for storage providers in test code. --- #### Does this PR need a docs update or release note? - [ ] :white_check_mark: Yes, it's included - [ ] :clock1: Yes, but in a later PR - [x] :no_entry: No #### Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Supportability/Tests - [ ] :computer: CI/Deployment - [x] :broom: Tech Debt/Cleanup #### Issue(s) * # #### Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- src/cli/backup/helpers_test.go | 4 ++-- src/cli/repo/s3_e2e_test.go | 5 +++-- src/cli/restore/exchange_e2e_test.go | 4 ++-- src/pkg/storage/providertype_string.go | 25 +++++++++++++++++++++++ src/pkg/storage/storage.go | 15 +++++++------- src/pkg/storage/storage_test.go | 2 +- src/pkg/storage/storageprovider_string.go | 24 ---------------------- 7 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 src/pkg/storage/providertype_string.go delete mode 100644 src/pkg/storage/storageprovider_string.go diff --git a/src/cli/backup/helpers_test.go b/src/cli/backup/helpers_test.go index e5803a0e7..a54019c1c 100644 --- a/src/cli/backup/helpers_test.go +++ b/src/cli/backup/helpers_test.go @@ -144,8 +144,8 @@ func prepM365Test( require.NoError(t, err, clues.ToCore(err)) force := map[string]string{ - tconfig.TestCfgAccountProvider: "M365", - tconfig.TestCfgStorageProvider: "S3", + tconfig.TestCfgAccountProvider: account.ProviderM365.String(), + tconfig.TestCfgStorageProvider: storage.ProviderS3.String(), tconfig.TestCfgPrefix: cfg.Prefix, } diff --git a/src/cli/repo/s3_e2e_test.go b/src/cli/repo/s3_e2e_test.go index bde29cc40..28dc7c3c7 100644 --- a/src/cli/repo/s3_e2e_test.go +++ b/src/cli/repo/s3_e2e_test.go @@ -18,6 +18,7 @@ import ( "github.com/alcionai/corso/src/pkg/control" ctrlRepo "github.com/alcionai/corso/src/pkg/control/repository" "github.com/alcionai/corso/src/pkg/repository" + "github.com/alcionai/corso/src/pkg/storage" storeTD "github.com/alcionai/corso/src/pkg/storage/testdata" ) @@ -185,8 +186,8 @@ func (suite *S3E2ESuite) TestConnectS3Cmd() { require.NoError(t, err, clues.ToCore(err)) force := map[string]string{ - tconfig.TestCfgAccountProvider: "M365", - tconfig.TestCfgStorageProvider: "S3", + tconfig.TestCfgAccountProvider: account.ProviderM365.String(), + tconfig.TestCfgStorageProvider: storage.ProviderS3.String(), tconfig.TestCfgPrefix: cfg.Prefix, } vpr, configFP := tconfig.MakeTempTestConfigClone(t, force) diff --git a/src/cli/restore/exchange_e2e_test.go b/src/cli/restore/exchange_e2e_test.go index 904025116..4b8b79e75 100644 --- a/src/cli/restore/exchange_e2e_test.go +++ b/src/cli/restore/exchange_e2e_test.go @@ -70,8 +70,8 @@ func (suite *RestoreExchangeE2ESuite) SetupSuite() { require.NoError(t, err, clues.ToCore(err)) force := map[string]string{ - tconfig.TestCfgAccountProvider: "M365", - tconfig.TestCfgStorageProvider: "S3", + tconfig.TestCfgAccountProvider: account.ProviderM365.String(), + tconfig.TestCfgStorageProvider: storage.ProviderS3.String(), tconfig.TestCfgPrefix: cfg.Prefix, } suite.vpr, suite.cfgFP = tconfig.MakeTempTestConfigClone(t, force) diff --git a/src/pkg/storage/providertype_string.go b/src/pkg/storage/providertype_string.go new file mode 100644 index 000000000..b58e3ea57 --- /dev/null +++ b/src/pkg/storage/providertype_string.go @@ -0,0 +1,25 @@ +// Code generated by "stringer -type=ProviderType -linecomment"; DO NOT EDIT. + +package storage + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[ProviderUnknown-0] + _ = x[ProviderS3-1] + _ = x[ProviderFilesystem-2] +} + +const _ProviderType_name = "Unknown ProviderS3Filesystem" + +var _ProviderType_index = [...]uint8{0, 16, 18, 28} + +func (i ProviderType) String() string { + if i < 0 || i >= ProviderType(len(_ProviderType_index)-1) { + return "ProviderType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _ProviderType_name[_ProviderType_index[i]:_ProviderType_index[i+1]] +} diff --git a/src/pkg/storage/storage.go b/src/pkg/storage/storage.go index e197f4081..d1a1067a6 100644 --- a/src/pkg/storage/storage.go +++ b/src/pkg/storage/storage.go @@ -8,12 +8,13 @@ import ( "github.com/alcionai/corso/src/internal/common" ) -type storageProvider int +type ProviderType int -//go:generate stringer -type=storageProvider -linecomment +//go:generate stringer -type=ProviderType -linecomment const ( - ProviderUnknown storageProvider = 0 // Unknown Provider - ProviderS3 storageProvider = 1 // S3 + ProviderUnknown ProviderType = 0 // Unknown Provider + ProviderS3 ProviderType = 1 // S3 + ProviderFilesystem ProviderType = 2 // Filesystem ) // storage parsing errors @@ -24,7 +25,7 @@ var ( // Storage defines a storage provider, along with any configuration // required to set up or communicate with that provider. type Storage struct { - Provider storageProvider + Provider ProviderType Config map[string]string // TODO: These are AWS S3 specific -> move these out SessionTags map[string]string @@ -34,7 +35,7 @@ type Storage struct { } // NewStorage aggregates all the supplied configurations into a single configuration. -func NewStorage(p storageProvider, cfgs ...common.StringConfigurer) (Storage, error) { +func NewStorage(p ProviderType, cfgs ...common.StringConfigurer) (Storage, error) { cs, err := common.UnionStringConfigs(cfgs...) return Storage{ @@ -46,7 +47,7 @@ func NewStorage(p storageProvider, cfgs ...common.StringConfigurer) (Storage, er // NewStorageUsingRole supports specifying an AWS IAM role the storage provider // should assume. func NewStorageUsingRole( - p storageProvider, + p ProviderType, roleARN string, sessionName string, sessionTags map[string]string, diff --git a/src/pkg/storage/storage_test.go b/src/pkg/storage/storage_test.go index 2c0850688..0d2cfbec6 100644 --- a/src/pkg/storage/storage_test.go +++ b/src/pkg/storage/storage_test.go @@ -28,7 +28,7 @@ func TestStorageSuite(t *testing.T) { func (suite *StorageSuite) TestNewStorage() { table := []struct { name string - p storageProvider + p ProviderType c testConfig errCheck assert.ErrorAssertionFunc }{ diff --git a/src/pkg/storage/storageprovider_string.go b/src/pkg/storage/storageprovider_string.go deleted file mode 100644 index 389dee37a..000000000 --- a/src/pkg/storage/storageprovider_string.go +++ /dev/null @@ -1,24 +0,0 @@ -// Code generated by "stringer -type=storageProvider -linecomment"; DO NOT EDIT. - -package storage - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[ProviderUnknown-0] - _ = x[ProviderS3-1] -} - -const _storageProvider_name = "Unknown ProviderS3" - -var _storageProvider_index = [...]uint8{0, 16, 18} - -func (i storageProvider) String() string { - if i < 0 || i >= storageProvider(len(_storageProvider_index)-1) { - return "storageProvider(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _storageProvider_name[_storageProvider_index[i]:_storageProvider_index[i+1]] -}