github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/aws/config_test.go (about) 1 package aws 2 3 import ( 4 "net/url" 5 "strconv" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestAWSConfigFromURL(t *testing.T) { 13 for i, tc := range []struct { 14 url string 15 expectedKey string 16 expectedSecret string 17 expectedRegion string 18 expectedEp string 19 }{ 20 { 21 "s3://abc:123@s3.default.svc.cluster.local:4569", 22 "abc", 23 "123", 24 "dummy", 25 "http://s3.default.svc.cluster.local:4569", 26 }, 27 { 28 "s3://@us-east-1/test-bucket", 29 "", 30 "", 31 "us-east-1", 32 "", 33 }, 34 { 35 "dynamodb://user:pass@dynamodb.default.svc.cluster.local:8000/cortex", 36 "user", 37 "pass", 38 "dummy", 39 "http://dynamodb.default.svc.cluster.local:8000", 40 }, 41 { 42 // No credentials. 43 "s3://s3.default.svc.cluster.local:4569", 44 "", 45 "", 46 "dummy", 47 "http://s3.default.svc.cluster.local:4569", 48 }, 49 { 50 "s3://keyWithEscapedSlashAtTheEnd%2F:%24%2C%26%2C%2B%2C%27%2C%2F%2C%3A%2C%3B%2C%3D%2C%3F%2C%40@eu-west-2/bucket1", 51 "keyWithEscapedSlashAtTheEnd/", 52 "$,&,+,',/,:,;,=,?,@", 53 "eu-west-2", 54 "", 55 }, 56 } { 57 t.Run(strconv.Itoa(i), func(t *testing.T) { 58 parsedURL, err := url.Parse(tc.url) 59 require.NoError(t, err) 60 61 cfg, err := ConfigFromURL(parsedURL) 62 require.NoError(t, err) 63 64 if tc.expectedKey == "" && tc.expectedSecret == "" { 65 assert.Nil(t, cfg.Credentials) 66 } else { 67 require.NotNil(t, cfg.Credentials) 68 val, err := cfg.Credentials.Get() 69 require.NoError(t, err) 70 assert.Equal(t, tc.expectedKey, val.AccessKeyID) 71 assert.Equal(t, tc.expectedSecret, val.SecretAccessKey) 72 } 73 74 require.NotNil(t, cfg.Region) 75 assert.Equal(t, tc.expectedRegion, *cfg.Region) 76 77 if tc.expectedEp != "" { 78 require.NotNil(t, cfg.Endpoint) 79 assert.Equal(t, tc.expectedEp, *cfg.Endpoint) 80 } else { 81 assert.Nil(t, cfg.Endpoint) 82 } 83 }) 84 } 85 }