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  }