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  }