* validate required storage props (#85) Centralizes validation of required storage config properties within the storage package. Requiremens are checked eagerly at configuration creation, and lazily at config retrieval. Additionally, updates /pkg/storage tests to use suites and assert funcs. * add validation failure tests to storage
118 lines
2.7 KiB
Go
118 lines
2.7 KiB
Go
package storage_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
"github.com/zeebo/assert"
|
|
|
|
"github.com/alcionai/corso/pkg/storage"
|
|
)
|
|
|
|
type S3CfgSuite struct {
|
|
suite.Suite
|
|
}
|
|
|
|
func TestS3CfgSuite(t *testing.T) {
|
|
suite.Run(t, new(S3CfgSuite))
|
|
}
|
|
|
|
var goodS3Config = storage.S3Config{"ak", "bkt", "end", "pre", "sk", "tkn"}
|
|
|
|
func (suite *S3CfgSuite) TestS3Config_Config() {
|
|
s3 := goodS3Config
|
|
c, err := s3.Config()
|
|
assert.NoError(suite.T(), err)
|
|
|
|
table := []struct {
|
|
key string
|
|
expect string
|
|
}{
|
|
{"s3_bucket", s3.Bucket},
|
|
{"s3_accessKey", s3.AccessKey},
|
|
{"s3_endpoint", s3.Endpoint},
|
|
{"s3_prefix", s3.Prefix},
|
|
{"s3_secretKey", s3.SecretKey},
|
|
{"s3_sessionToken", s3.SessionToken},
|
|
}
|
|
for _, test := range table {
|
|
assert.Equal(suite.T(), test.expect, c[test.key])
|
|
}
|
|
}
|
|
|
|
func (suite *S3CfgSuite) TestStorage_S3Config() {
|
|
t := suite.T()
|
|
|
|
in := goodS3Config
|
|
s, err := storage.NewStorage(storage.ProviderS3, in)
|
|
assert.NoError(t, err)
|
|
out, err := s.S3Config()
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, in.Bucket, out.Bucket)
|
|
assert.Equal(t, in.AccessKey, out.AccessKey)
|
|
assert.Equal(t, in.Endpoint, out.Endpoint)
|
|
assert.Equal(t, in.Prefix, out.Prefix)
|
|
assert.Equal(t, in.SecretKey, out.SecretKey)
|
|
assert.Equal(t, in.SessionToken, out.SessionToken)
|
|
}
|
|
|
|
func (suite *S3CfgSuite) TestStorage_S3Config_InvalidCases() {
|
|
// missing required properties
|
|
table := []struct {
|
|
name string
|
|
cfg storage.S3Config
|
|
}{
|
|
{"missing access key", storage.S3Config{"", "bkt", "end", "pre", "sk", "tkn"}},
|
|
{"missing bucket", storage.S3Config{"ak", "", "end", "pre", "sk", "tkn"}},
|
|
{"missing secret key", storage.S3Config{"ak", "bkt", "end", "pre", "", "tkn"}},
|
|
{"missing session token", storage.S3Config{"ak", "bkt", "end", "pre", "sk", ""}},
|
|
}
|
|
for _, test := range table {
|
|
suite.T().Run(test.name, func(t *testing.T) {
|
|
_, err := storage.NewStorage(storage.ProviderUnknown, test.cfg)
|
|
assert.Error(t, err)
|
|
})
|
|
}
|
|
|
|
// required property not populated in storage
|
|
table2 := []struct {
|
|
name string
|
|
amend func(storage.Storage)
|
|
}{
|
|
{
|
|
"missing access key",
|
|
func(s storage.Storage) {
|
|
s.Config["s3_accessKey"] = ""
|
|
},
|
|
},
|
|
{
|
|
"missing bucket",
|
|
func(s storage.Storage) {
|
|
s.Config["s3_bucket"] = ""
|
|
},
|
|
},
|
|
{
|
|
"missing secret key",
|
|
func(s storage.Storage) {
|
|
s.Config["s3_secretKey"] = ""
|
|
},
|
|
},
|
|
{
|
|
"missing session token",
|
|
func(s storage.Storage) {
|
|
s.Config["s3_sessionToken"] = ""
|
|
},
|
|
},
|
|
}
|
|
for _, test := range table2 {
|
|
suite.T().Run(test.name, func(t *testing.T) {
|
|
st, err := storage.NewStorage(storage.ProviderUnknown, goodS3Config)
|
|
assert.NoError(t, err)
|
|
test.amend(st)
|
|
_, err = st.CommonConfig()
|
|
assert.Error(t, err)
|
|
})
|
|
}
|
|
}
|