github.com/wata727/tflint@v0.12.2-0.20191013070026-96dd0d36f385/client/aws_test.go (about)

     1  package client
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"github.com/google/go-cmp/cmp"
     8  	awsbase "github.com/hashicorp/aws-sdk-go-base"
     9  	homedir "github.com/mitchellh/go-homedir"
    10  )
    11  
    12  func Test_Merge(t *testing.T) {
    13  	cases := []struct {
    14  		Name     string
    15  		Self     AwsCredentials
    16  		Other    AwsCredentials
    17  		Expected AwsCredentials
    18  	}{
    19  		{
    20  			Name: "self is empty",
    21  			Self: AwsCredentials{},
    22  			Other: AwsCredentials{
    23  				AccessKey:             "AWS_ACCESS_KEY",
    24  				SecretKey:             "AWS_SECRET_KEY",
    25  				Profile:               "default",
    26  				CredsFile:             "~/.aws/creds",
    27  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
    28  				AssumeRoleSessionName: "SESSION_NAME",
    29  				AssumeRoleExternalID:  "EXTERNAL_ID",
    30  				AssumeRolePolicy:      "POLICY_NAME",
    31  				Region:                "us-east-1",
    32  			},
    33  			Expected: AwsCredentials{
    34  				AccessKey:             "AWS_ACCESS_KEY",
    35  				SecretKey:             "AWS_SECRET_KEY",
    36  				Profile:               "default",
    37  				CredsFile:             "~/.aws/creds",
    38  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
    39  				AssumeRoleSessionName: "SESSION_NAME",
    40  				AssumeRoleExternalID:  "EXTERNAL_ID",
    41  				AssumeRolePolicy:      "POLICY_NAME",
    42  				Region:                "us-east-1",
    43  			},
    44  		},
    45  		{
    46  			Name: "other is empty",
    47  			Self: AwsCredentials{
    48  				AccessKey:             "AWS_ACCESS_KEY_2",
    49  				SecretKey:             "AWS_SECRET_KEY_2",
    50  				Profile:               "staging",
    51  				CredsFile:             "~/.aws/creds_stg",
    52  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
    53  				AssumeRoleSessionName: "SESSION_NAME",
    54  				AssumeRoleExternalID:  "EXTERNAL_ID",
    55  				AssumeRolePolicy:      "POLICY_NAME",
    56  				Region:                "ap-northeast-1",
    57  			},
    58  			Other: AwsCredentials{},
    59  			Expected: AwsCredentials{
    60  				AccessKey:             "AWS_ACCESS_KEY_2",
    61  				SecretKey:             "AWS_SECRET_KEY_2",
    62  				Profile:               "staging",
    63  				CredsFile:             "~/.aws/creds_stg",
    64  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
    65  				AssumeRoleSessionName: "SESSION_NAME",
    66  				AssumeRoleExternalID:  "EXTERNAL_ID",
    67  				AssumeRolePolicy:      "POLICY_NAME",
    68  				Region:                "ap-northeast-1",
    69  			},
    70  		},
    71  		{
    72  			Name: "merged",
    73  			Self: AwsCredentials{
    74  				AccessKey:             "AWS_ACCESS_KEY_2",
    75  				SecretKey:             "AWS_SECRET_KEY_2",
    76  				Profile:               "staging",
    77  				CredsFile:             "~/.aws/creds_stg",
    78  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME_2",
    79  				AssumeRoleSessionName: "SESSION_NAME_2",
    80  				AssumeRoleExternalID:  "EXTERNAL_ID_2",
    81  				AssumeRolePolicy:      "POLICY_NAME_2",
    82  				Region:                "ap-northeast-1",
    83  			},
    84  			Other: AwsCredentials{
    85  				AccessKey:             "AWS_ACCESS_KEY",
    86  				SecretKey:             "AWS_SECRET_KEY",
    87  				Profile:               "default",
    88  				CredsFile:             "~/.aws/creds",
    89  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
    90  				AssumeRoleSessionName: "SESSION_NAME",
    91  				AssumeRoleExternalID:  "EXTERNAL_ID",
    92  				AssumeRolePolicy:      "POLICY_NAME",
    93  				Region:                "us-east-1",
    94  			},
    95  			Expected: AwsCredentials{
    96  				AccessKey:             "AWS_ACCESS_KEY",
    97  				SecretKey:             "AWS_SECRET_KEY",
    98  				Profile:               "default",
    99  				CredsFile:             "~/.aws/creds",
   100  				AssumeRoleARN:         "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME",
   101  				AssumeRoleSessionName: "SESSION_NAME",
   102  				AssumeRoleExternalID:  "EXTERNAL_ID",
   103  				AssumeRolePolicy:      "POLICY_NAME",
   104  				Region:                "us-east-1",
   105  			},
   106  		},
   107  	}
   108  
   109  	for _, tc := range cases {
   110  		ret := tc.Self.Merge(tc.Other)
   111  		if !cmp.Equal(tc.Expected, ret) {
   112  			t.Fatalf("Failed `%s` test: Diff=%s", tc.Name, cmp.Diff(tc.Expected, ret))
   113  		}
   114  	}
   115  }
   116  
   117  func Test_getBaseConfig(t *testing.T) {
   118  	home, err := homedir.Expand("~/")
   119  	if err != nil {
   120  		t.Fatal(err)
   121  	}
   122  
   123  	cases := []struct {
   124  		Name     string
   125  		Creds    AwsCredentials
   126  		Expected *awsbase.Config
   127  	}{
   128  		{
   129  			Name: "static credentials",
   130  			Creds: AwsCredentials{
   131  				AccessKey: "AWS_ACCESS_KEY",
   132  				SecretKey: "AWS_SECRET_KEY",
   133  				Region:    "us-east-1",
   134  			},
   135  			Expected: &awsbase.Config{
   136  				AccessKey: "AWS_ACCESS_KEY",
   137  				SecretKey: "AWS_SECRET_KEY",
   138  				Region:    "us-east-1",
   139  			},
   140  		},
   141  		{
   142  			Name: "shared credentials",
   143  			Creds: AwsCredentials{
   144  				Profile:   "default",
   145  				CredsFile: "~/.aws/creds",
   146  				Region:    "us-east-1",
   147  			},
   148  			Expected: &awsbase.Config{
   149  				Profile:       "default",
   150  				CredsFilename: filepath.Join(home, ".aws", "creds"),
   151  				Region:        "us-east-1",
   152  			},
   153  		},
   154  	}
   155  
   156  	for _, tc := range cases {
   157  		base, err := getBaseConfig(tc.Creds)
   158  		if err != nil {
   159  			t.Fatalf("Failed `%s` test: Unexpected error occurred: %s", tc.Name, err)
   160  		}
   161  		if !cmp.Equal(tc.Expected, base) {
   162  			t.Fatalf("Failed `%s` test: Diff=%s", tc.Name, cmp.Diff(tc.Expected, base))
   163  		}
   164  	}
   165  }