github.com/aavshr/aws-sdk-go@v1.41.3/aws/defaults/defaults_test.go (about) 1 package defaults 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 8 "github.com/aavshr/aws-sdk-go/aws" 9 "github.com/aavshr/aws-sdk-go/aws/awserr" 10 "github.com/aavshr/aws-sdk-go/aws/credentials/ec2rolecreds" 11 "github.com/aavshr/aws-sdk-go/aws/credentials/endpointcreds" 12 "github.com/aavshr/aws-sdk-go/aws/request" 13 "github.com/aavshr/aws-sdk-go/internal/sdktesting" 14 "github.com/aavshr/aws-sdk-go/internal/shareddefaults" 15 ) 16 17 func TestHTTPCredProvider(t *testing.T) { 18 origFn := lookupHostFn 19 defer func() { lookupHostFn = origFn }() 20 21 lookupHostFn = func(host string) ([]string, error) { 22 m := map[string]struct { 23 Addrs []string 24 Err error 25 }{ 26 "localhost": {Addrs: []string{"::1", "127.0.0.1"}}, 27 "actuallylocal": {Addrs: []string{"127.0.0.2"}}, 28 "notlocal": {Addrs: []string{"::1", "127.0.0.1", "192.168.1.10"}}, 29 "www.example.com": {Addrs: []string{"10.10.10.10"}}, 30 } 31 32 h, ok := m[host] 33 if !ok { 34 t.Fatalf("unknown host in test, %v", host) 35 return nil, fmt.Errorf("unknown host") 36 } 37 38 return h.Addrs, h.Err 39 } 40 41 cases := []struct { 42 Host string 43 AuthToken string 44 Fail bool 45 }{ 46 {Host: "localhost", Fail: false}, 47 {Host: "actuallylocal", Fail: false}, 48 {Host: "127.0.0.1", Fail: false}, 49 {Host: "127.1.1.1", Fail: false}, 50 {Host: "[::1]", Fail: false}, 51 {Host: "www.example.com", Fail: true}, 52 {Host: "169.254.170.2", Fail: true}, 53 {Host: "localhost", Fail: false, AuthToken: "Basic abc123"}, 54 } 55 56 restoreEnvFn := sdktesting.StashEnv() 57 defer restoreEnvFn() 58 59 for i, c := range cases { 60 u := fmt.Sprintf("http://%s/abc/123", c.Host) 61 os.Setenv(httpProviderEnvVar, u) 62 os.Setenv(httpProviderAuthorizationEnvVar, c.AuthToken) 63 64 provider := RemoteCredProvider(aws.Config{}, request.Handlers{}) 65 if provider == nil { 66 t.Fatalf("%d, expect provider not to be nil, but was", i) 67 } 68 69 if c.Fail { 70 creds, err := provider.Retrieve() 71 if err == nil { 72 t.Fatalf("%d, expect error but got none", i) 73 } else { 74 aerr := err.(awserr.Error) 75 if e, a := "CredentialsEndpointError", aerr.Code(); e != a { 76 t.Errorf("%d, expect %s error code, got %s", i, e, a) 77 } 78 } 79 if e, a := endpointcreds.ProviderName, creds.ProviderName; e != a { 80 t.Errorf("%d, expect %s provider name got %s", i, e, a) 81 } 82 } else { 83 httpProvider := provider.(*endpointcreds.Provider) 84 if e, a := u, httpProvider.Client.Endpoint; e != a { 85 t.Errorf("%d, expect %q endpoint, got %q", i, e, a) 86 } 87 if e, a := c.AuthToken, httpProvider.AuthorizationToken; e != a { 88 t.Errorf("%d, expect %q auth token, got %q", i, e, a) 89 } 90 } 91 } 92 } 93 94 func TestECSCredProvider(t *testing.T) { 95 restoreEnvFn := sdktesting.StashEnv() 96 defer restoreEnvFn() 97 os.Setenv(shareddefaults.ECSCredsProviderEnvVar, "/abc/123") 98 99 provider := RemoteCredProvider(aws.Config{}, request.Handlers{}) 100 if provider == nil { 101 t.Fatalf("expect provider not to be nil, but was") 102 } 103 104 httpProvider := provider.(*endpointcreds.Provider) 105 if httpProvider == nil { 106 t.Fatalf("expect provider not to be nil, but was") 107 } 108 if e, a := "http://169.254.170.2/abc/123", httpProvider.Client.Endpoint; e != a { 109 t.Errorf("expect %q endpoint, got %q", e, a) 110 } 111 } 112 113 func TestDefaultEC2RoleProvider(t *testing.T) { 114 provider := RemoteCredProvider(aws.Config{}, request.Handlers{}) 115 if provider == nil { 116 t.Fatalf("expect provider not to be nil, but was") 117 } 118 119 ec2Provider := provider.(*ec2rolecreds.EC2RoleProvider) 120 if ec2Provider == nil { 121 t.Fatalf("expect provider not to be nil, but was") 122 } 123 if e, a := "http://169.254.169.254", ec2Provider.Client.Endpoint; e != a { 124 t.Errorf("expect %q endpoint, got %q", e, a) 125 } 126 }