Skip to content
This repository was archived by the owner on Jan 19, 2022. It is now read-only.

Commit 4c11014

Browse files
tac-yachtmaciejwalkowiak
authored andcommitted
Add tests for relaxed binding support in "cloud.aws.credentials".
Fixes gh-406 Closes gh-536
1 parent e805878 commit 4c11014

File tree

2 files changed

+157
-1
lines changed

2 files changed

+157
-1
lines changed

spring-cloud-aws-autoconfigure/src/main/java/org/springframework/cloud/aws/autoconfigure/context/ContextCredentialsAutoConfiguration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
9999
AWS_CREDENTIALS_PROPERTY_PREFIX + ".instance-profile",
100100
Boolean.class, true)
101101
&& !this.environment.containsProperty(
102-
AWS_CREDENTIALS_PROPERTY_PREFIX + ".access-key"),
102+
AWS_CREDENTIALS_PROPERTY_PREFIX + ".access-key"),
103103
this.environment.getProperty(
104104
AWS_CREDENTIALS_PROPERTY_PREFIX + ".profile-name",
105105
DEFAULT_PROFILE_NAME),

spring-cloud-aws-autoconfigure/src/test/java/org/springframework/cloud/aws/autoconfigure/context/ContextCredentialsAutoConfigurationTest.java

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,29 @@ public void credentialsProvider_propertyToUseDefaultIsSet_configuresDefaultAwsCr
104104
.isEqualTo("testSecretKey");
105105
}
106106

107+
@Test
108+
public void credentialsProvider_dashSeparatedPropertyToUseDefaultIsSet_configuresDefaultAwsCredentialsProvider_existAccessKeyAndSecretKey() {
109+
// @checkstyle:on
110+
this.context = new AnnotationConfigApplicationContext();
111+
this.context.register(ContextCredentialsAutoConfiguration.class);
112+
TestPropertyValues
113+
.of("cloud.aws.credentials.access-key:testAccessKey",
114+
"cloud.aws.credentials.secret-key:testSecretKey",
115+
"cloud.aws.credentials.use-default-aws-credentials-chain:true")
116+
.applyTo(this.context);
117+
this.context.refresh();
118+
119+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
120+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
121+
AWSCredentialsProvider.class);
122+
assertThat(awsCredentialsProvider).isNotNull();
123+
124+
assertThat(awsCredentialsProvider.getCredentials().getAWSAccessKeyId())
125+
.isEqualTo("testAccessKey");
126+
assertThat(awsCredentialsProvider.getCredentials().getAWSSecretKey())
127+
.isEqualTo("testSecretKey");
128+
}
129+
107130
@Test
108131
public void credentialsProvider_propertyToUseDefaultIsSet_configuresDefaultAwsCredentialsProvider() {
109132
this.context = new AnnotationConfigApplicationContext();
@@ -121,6 +144,23 @@ public void credentialsProvider_propertyToUseDefaultIsSet_configuresDefaultAwsCr
121144
.isAssignableFrom(DefaultAWSCredentialsProviderChain.class)).isTrue();
122145
}
123146

147+
@Test
148+
public void credentialsProvider_dashSeparatedPropertyToUseDefaultIsSet_configuresDefaultAwsCredentialsProvider() {
149+
this.context = new AnnotationConfigApplicationContext();
150+
this.context.register(ContextCredentialsAutoConfiguration.class);
151+
TestPropertyValues.of("cloud.aws.credentials.use-default-aws-credentials-chain:true")
152+
.applyTo(this.context);
153+
this.context.refresh();
154+
155+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
156+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
157+
AWSCredentialsProvider.class);
158+
assertThat(awsCredentialsProvider).isNotNull();
159+
160+
assertThat(awsCredentialsProvider.getClass()
161+
.isAssignableFrom(DefaultAWSCredentialsProviderChain.class)).isTrue();
162+
}
163+
124164
// @checkstyle:off
125165
@Test
126166
public void credentialsProvider_accessKeyAndSecretKeyConfigured_configuresStaticCredentialsProviderWithAccessAndSecretKey() {
@@ -152,6 +192,37 @@ public void credentialsProvider_accessKeyAndSecretKeyConfigured_configuresStatic
152192

153193
}
154194

195+
// @checkstyle:off
196+
@Test
197+
public void credentialsProvider_dashSeparatedAccessKeyAndSecretKeyConfigured_configuresStaticCredentialsProviderWithAccessAndSecretKey() {
198+
// @checkstyle:on
199+
this.context = new AnnotationConfigApplicationContext();
200+
this.context.register(ContextCredentialsAutoConfiguration.class);
201+
TestPropertyValues.of("cloud.aws.credentials.access-key:foo",
202+
"cloud.aws.credentials.secret-key:bar").applyTo(this.context);
203+
this.context.refresh();
204+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
205+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
206+
AWSCredentialsProviderChain.class);
207+
assertThat(awsCredentialsProvider).isNotNull();
208+
209+
@SuppressWarnings("unchecked")
210+
List<CredentialsProvider> credentialsProviders = (List<CredentialsProvider>) ReflectionTestUtils
211+
.getField(awsCredentialsProvider, "credentialsProviders");
212+
assertThat(credentialsProviders.size()).isEqualTo(2);
213+
assertThat(AWSStaticCredentialsProvider.class
214+
.isInstance(credentialsProviders.get(0))).isTrue();
215+
assertThat(
216+
ProfileCredentialsProvider.class.isInstance(credentialsProviders.get(1)))
217+
.isTrue();
218+
219+
assertThat(awsCredentialsProvider.getCredentials().getAWSAccessKeyId())
220+
.isEqualTo("foo");
221+
assertThat(awsCredentialsProvider.getCredentials().getAWSSecretKey())
222+
.isEqualTo("bar");
223+
224+
}
225+
155226
@Test
156227
public void credentialsProvider_instanceProfileConfigured_configuresInstanceProfileCredentialsProvider() {
157228
this.context = new AnnotationConfigApplicationContext();
@@ -175,6 +246,29 @@ public void credentialsProvider_instanceProfileConfigured_configuresInstanceProf
175246
.isTrue();
176247
}
177248

249+
@Test
250+
public void credentialsProvider_dashSeparatedInstanceProfileConfigured_configuresInstanceProfileCredentialsProvider() {
251+
this.context = new AnnotationConfigApplicationContext();
252+
this.context.register(ContextCredentialsAutoConfiguration.class);
253+
TestPropertyValues.of("cloud.aws.credentials.instance-profile")
254+
.applyTo(this.context);
255+
this.context.refresh();
256+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
257+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
258+
AWSCredentialsProvider.class);
259+
assertThat(awsCredentialsProvider).isNotNull();
260+
261+
@SuppressWarnings("unchecked")
262+
List<CredentialsProvider> credentialsProviders = (List<CredentialsProvider>) ReflectionTestUtils
263+
.getField(awsCredentialsProvider, "credentialsProviders");
264+
assertThat(credentialsProviders.size()).isEqualTo(2);
265+
assertThat(EC2ContainerCredentialsProviderWrapper.class
266+
.isInstance(credentialsProviders.get(0))).isTrue();
267+
assertThat(
268+
ProfileCredentialsProvider.class.isInstance(credentialsProviders.get(1)))
269+
.isTrue();
270+
}
271+
178272
@Test
179273
public void credentialsProvider_profileNameConfigured_configuresProfileCredentialsProvider() {
180274
this.context = new AnnotationConfigApplicationContext();
@@ -202,6 +296,33 @@ public void credentialsProvider_profileNameConfigured_configuresProfileCredentia
202296
.isEqualTo("test");
203297
}
204298

299+
@Test
300+
public void credentialsProvider_dashSeparatedProfileNameConfigured_configuresProfileCredentialsProvider() {
301+
this.context = new AnnotationConfigApplicationContext();
302+
this.context.register(ContextCredentialsAutoConfiguration.class);
303+
TestPropertyValues.of("cloud.aws.credentials.profile-name:test")
304+
.applyTo(this.context);
305+
this.context.refresh();
306+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
307+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
308+
AWSCredentialsProvider.class);
309+
assertThat(awsCredentialsProvider).isNotNull();
310+
311+
@SuppressWarnings("unchecked")
312+
List<CredentialsProvider> credentialsProviders = (List<CredentialsProvider>) ReflectionTestUtils
313+
.getField(awsCredentialsProvider, "credentialsProviders");
314+
assertThat(credentialsProviders.size()).isEqualTo(2);
315+
assertThat(EC2ContainerCredentialsProviderWrapper.class
316+
.isInstance(credentialsProviders.get(0))).isTrue();
317+
assertThat(
318+
ProfileCredentialsProvider.class.isInstance(credentialsProviders.get(1)))
319+
.isTrue();
320+
321+
assertThat(
322+
ReflectionTestUtils.getField(credentialsProviders.get(1), "profileName"))
323+
.isEqualTo("test");
324+
}
325+
205326
@Test
206327
public void credentialsProvider_profileNameAndPathConfigured_configuresProfileCredentialsProvider()
207328
throws IOException {
@@ -237,4 +358,39 @@ public void credentialsProvider_profileNameAndPathConfigured_configuresProfileCr
237358
.isEqualTo("testSecretKey");
238359
}
239360

361+
@Test
362+
public void credentialsProvider_dashSeparatedProfileNameAndPathConfigured_configuresProfileCredentialsProvider()
363+
throws IOException {
364+
this.context = new AnnotationConfigApplicationContext();
365+
this.context.register(ContextCredentialsAutoConfiguration.class);
366+
TestPropertyValues
367+
.of("cloud.aws.credentials.profile-name:customProfile",
368+
"cloud.aws.credentials.profile-path:" + new ClassPathResource(
369+
getClass().getSimpleName() + "-profile", getClass())
370+
.getFile().getAbsolutePath())
371+
.applyTo(this.context);
372+
this.context.refresh();
373+
AWSCredentialsProvider awsCredentialsProvider = this.context.getBean(
374+
AmazonWebserviceClientConfigurationUtils.CREDENTIALS_PROVIDER_BEAN_NAME,
375+
AWSCredentialsProvider.class);
376+
assertThat(awsCredentialsProvider).isNotNull();
377+
378+
@SuppressWarnings("unchecked")
379+
List<CredentialsProvider> credentialsProviders = (List<CredentialsProvider>) ReflectionTestUtils
380+
.getField(awsCredentialsProvider, "credentialsProviders");
381+
assertThat(credentialsProviders.size()).isEqualTo(2);
382+
assertThat(EC2ContainerCredentialsProviderWrapper.class
383+
.isInstance(credentialsProviders.get(0))).isTrue();
384+
assertThat(
385+
ProfileCredentialsProvider.class.isInstance(credentialsProviders.get(1)))
386+
.isTrue();
387+
388+
ProfileCredentialsProvider provider = (ProfileCredentialsProvider) credentialsProviders
389+
.get(1);
390+
assertThat(provider.getCredentials().getAWSAccessKeyId())
391+
.isEqualTo("testAccessKey");
392+
assertThat(provider.getCredentials().getAWSSecretKey())
393+
.isEqualTo("testSecretKey");
394+
}
395+
240396
}

0 commit comments

Comments
 (0)