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 }