@@ -138,6 +138,7 @@ func TestParseSAMLResponse(t *testing.T) {
138
138
func TestExtractRoleArnAndPrincipalArn (t * testing.T ) {
139
139
type args struct {
140
140
samlResponse SAMLResponse
141
+ roleName string
141
142
}
142
143
tests := []struct {
143
144
name string
@@ -173,10 +174,81 @@ func TestExtractRoleArnAndPrincipalArn(t *testing.T) {
173
174
},
174
175
},
175
176
},
177
+ roleName : "" ,
176
178
},
177
179
wantRoleArn : "arn:aws:iam::012345678901:role/TestRole" ,
178
180
wantPrincipalArn : "arn:aws:iam::012345678901:saml-provider/TestProvider" ,
179
181
},
182
+ {
183
+ name : "returns first role when role attribute are multi and no roleName argument" ,
184
+ args : args {
185
+ samlResponse : SAMLResponse {
186
+ Assertion : Assertion {
187
+ AttributeStatement : AttributeStatement {
188
+ Attributes : []Attribute {
189
+ {
190
+ Name : "dummy" ,
191
+ AttributeValues : []AttributeValue {
192
+ {
193
+ Value : "dummy" ,
194
+ },
195
+ },
196
+ },
197
+ {
198
+ Name : roleAttributeName ,
199
+ AttributeValues : []AttributeValue {
200
+ {
201
+ Value : "arn:aws:iam::012345678901:role/TestRole1,arn:aws:iam::012345678901:saml-provider/TestProvider1" ,
202
+ },
203
+ {
204
+ Value : "arn:aws:iam::012345678901:role/TestRole2,arn:aws:iam::012345678901:saml-provider/TestProvider2" ,
205
+ },
206
+ },
207
+ },
208
+ },
209
+ },
210
+ },
211
+ },
212
+ roleName : "" ,
213
+ },
214
+ wantRoleArn : "arn:aws:iam::012345678901:role/TestRole1" ,
215
+ wantPrincipalArn : "arn:aws:iam::012345678901:saml-provider/TestProvider1" ,
216
+ },
217
+ {
218
+ name : "returns specify role when role attribute are multi and roleName argument" ,
219
+ args : args {
220
+ samlResponse : SAMLResponse {
221
+ Assertion : Assertion {
222
+ AttributeStatement : AttributeStatement {
223
+ Attributes : []Attribute {
224
+ {
225
+ Name : "dummy" ,
226
+ AttributeValues : []AttributeValue {
227
+ {
228
+ Value : "dummy" ,
229
+ },
230
+ },
231
+ },
232
+ {
233
+ Name : roleAttributeName ,
234
+ AttributeValues : []AttributeValue {
235
+ {
236
+ Value : "arn:aws:iam::012345678901:role/TestRole1,arn:aws:iam::012345678901:saml-provider/TestProvider1" ,
237
+ },
238
+ {
239
+ Value : "arn:aws:iam::012345678901:role/TestRole2,arn:aws:iam::012345678901:saml-provider/TestProvider2" ,
240
+ },
241
+ },
242
+ },
243
+ },
244
+ },
245
+ },
246
+ },
247
+ roleName : "TestRole2" ,
248
+ },
249
+ wantRoleArn : "arn:aws:iam::012345678901:role/TestRole2" ,
250
+ wantPrincipalArn : "arn:aws:iam::012345678901:saml-provider/TestProvider2" ,
251
+ },
180
252
{
181
253
name : "returns an error when role attribute does not exist" ,
182
254
args : args {
@@ -196,13 +268,14 @@ func TestExtractRoleArnAndPrincipalArn(t *testing.T) {
196
268
},
197
269
},
198
270
},
271
+ roleName : "" ,
199
272
},
200
273
wantErr : true ,
201
274
},
202
275
}
203
276
for _ , tt := range tests {
204
277
t .Run (tt .name , func (t * testing.T ) {
205
- got , got1 , err := ExtractRoleArnAndPrincipalArn (tt .args .samlResponse )
278
+ got , got1 , err := ExtractRoleArnAndPrincipalArn (tt .args .samlResponse , tt . args . roleName )
206
279
if (err != nil ) != tt .wantErr {
207
280
t .Errorf ("ExtractRoleArnAndPrincipalArn() error = %v, wantErr %v" , err , tt .wantErr )
208
281
return
0 commit comments