1616package software .amazon .awssdk .auth .credentials .internal ;
1717
1818import static org .assertj .core .api .Assertions .assertThat ;
19- import static org .assertj .core .api .AssertionsForClassTypes .assertThatThrownBy ;
20- import static org .junit .jupiter .params .provider .Arguments .arguments ;
21-
2219import java .io .ByteArrayInputStream ;
2320import java .nio .charset .StandardCharsets ;
24- import java .util .stream .Stream ;
25- import org .junit .jupiter .api .AfterEach ;
26- import org .junit .jupiter .api .BeforeEach ;
27- import org .junit .jupiter .params .ParameterizedTest ;
28- import org .junit .jupiter .params .provider .Arguments ;
29- import org .junit .jupiter .params .provider .MethodSource ;
21+ import java .util .Arrays ;
22+ import java .util .function .Supplier ;
23+ import org .junit .After ;
24+ import org .junit .Before ;
25+ import org .junit .Rule ;
26+ import org .junit .Test ;
27+ import org .junit .rules .ExpectedException ;
28+ import org .junit .runner .RunWith ;
29+ import org .junit .runners .Parameterized ;
3030import software .amazon .awssdk .core .SdkSystemSetting ;
3131import software .amazon .awssdk .profiles .ProfileFile ;
3232import software .amazon .awssdk .profiles .ProfileFileSystemSetting ;
3333import software .amazon .awssdk .testutils .EnvironmentVariableHelper ;
3434
35+ @ RunWith (Parameterized .class )
3536public class Ec2MetadataConfigProviderEndpointModeTest {
3637 private static final String TEST_PROFILES_PATH_PREFIX = "/software/amazon/awssdk/auth/credentials/internal/ec2metadataconfigprovider/" ;
3738 private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper ();
3839 private static final String CUSTOM_PROFILE = "myprofile" ;
3940
40- public static Stream <Arguments > testData () {
41- return Stream .of (
42- arguments (null , null , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV4 , null ),
43- arguments ("ipv4" , null , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV4 , null ),
44- arguments ("IPv4" , null , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV4 , null ),
45- arguments ("ipv6" , null , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
46- arguments ("IPv6" , null , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
47- arguments ("Ipv99" , null , null , null , null , null , IllegalArgumentException .class ),
48-
49- arguments (null , "ipv4" , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV4 , null ),
50- arguments (null , "IPv4" , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV4 , null ),
51- arguments (null , "ipv6" , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
52- arguments (null , "IPv6" , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
53- arguments (null , "Ipv99" , null , null , null , null , IllegalArgumentException .class ),
54-
55- arguments (null , null , TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv6" , null , null ,
56- Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
57- arguments (null , null , TEST_PROFILES_PATH_PREFIX + "endpoint_mode_invalidValue" , null , null , null ,
58- IllegalArgumentException .class ),
59-
60- // System property takes highest precedence
61- arguments ("ipv4" , "ipv6" , null , null , null , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
62- arguments (null , "ipv6" , TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv4" , null , null ,
63- Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
64-
65- // env var has higher precedence than shared config
66- arguments ("ipv6" , null , TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv4" , null , null ,
67- Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
68-
69- // Test custom profile supplier and custom profile name
70- arguments (null , null , TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv6_custom_profile" , null , CUSTOM_PROFILE ,
71- Ec2MetadataConfigProvider .EndpointMode .IPV6 , null ),
72- arguments (null , null , null , customProfileFile (), CUSTOM_PROFILE , Ec2MetadataConfigProvider .EndpointMode .IPV6 , null )
41+ @ Parameterized .Parameter
42+ public TestCase testCase ;
43+
44+ @ Rule
45+ public ExpectedException thrown = ExpectedException .none ();
46+
47+ @ Parameterized .Parameters (name = "{0}" )
48+ public static Iterable <Object > testCases () {
49+ return Arrays .asList (
50+ new TestCase ().expectedEndpointMode (null ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV4 ),
51+
52+ new TestCase ().envEndpointMode ("ipv4" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV4 ),
53+ new TestCase ().envEndpointMode ("IPv4" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV4 ),
54+ new TestCase ().envEndpointMode ("ipv6" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
55+ new TestCase ().envEndpointMode ("IPv6" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
56+ new TestCase ().envEndpointMode ("Ipv99" ).expectedException (IllegalArgumentException .class ),
57+
58+ new TestCase ().systemPropertyEndpointMode ("ipv4" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV4 ),
59+ new TestCase ().systemPropertyEndpointMode ("IPv4" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV4 ),
60+ new TestCase ().systemPropertyEndpointMode ("ipv6" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
61+ new TestCase ().systemPropertyEndpointMode ("IPv6" ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
62+ new TestCase ().systemPropertyEndpointMode ("Ipv99" ).expectedException (IllegalArgumentException .class ),
63+
64+ new TestCase ().sharedConfigFile (TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv6" )
65+ .expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
66+ new TestCase ().sharedConfigFile (TEST_PROFILES_PATH_PREFIX + "endpoint_mode_invalidValue" )
67+ .expectedException (IllegalArgumentException .class ),
68+
69+ // System property takes highest precedence
70+ new TestCase ().systemPropertyEndpointMode ("ipv6" ).envEndpointMode ("ipv4" )
71+ .expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
72+ new TestCase ().systemPropertyEndpointMode ("ipv6" ).sharedConfigFile (TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv4" )
73+ .expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
74+
75+ // env var has higher precedence than shared config
76+ new TestCase ().envEndpointMode ("ipv6" ).sharedConfigFile (TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv4" )
77+ .expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
78+
79+ // Test custom profile supplier and custom profile name
80+ new TestCase ().sharedConfigFile (TEST_PROFILES_PATH_PREFIX + "endpoint_mode_ipv6_custom_profile" )
81+ .customProfileName (CUSTOM_PROFILE ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 ),
82+ new TestCase ().customProfileFile (Ec2MetadataConfigProviderEndpointModeTest ::customProfileFile )
83+ .customProfileName (CUSTOM_PROFILE ).expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode .IPV6 )
7384 );
7485 }
7586
76- @ BeforeEach
77- @ AfterEach
78- public void cleanup () {
87+ @ Before
88+ public void setup () {
7989 ENVIRONMENT_VARIABLE_HELPER .reset ();
8090 System .clearProperty (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .property ());
81- }
8291
83- @ ParameterizedTest
84- @ MethodSource ("testData" )
85- void resolvesCorrectEndpointMode (String envEndpointMode ,
86- String systemPropertyEndpointMode ,
87- String sharedConfigFile ,
88- ProfileFile customProfileFile ,
89- String customProfileName ,
90- Ec2MetadataConfigProvider .EndpointMode expectedEndpointMode ,
91- Class <? extends Throwable > expectedException ) {
92- if (envEndpointMode != null ) {
92+ if (testCase .envEndpointMode != null ) {
9393 ENVIRONMENT_VARIABLE_HELPER .set (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .environmentVariable (),
94- envEndpointMode );
94+ testCase . envEndpointMode );
9595 }
9696
97- if (systemPropertyEndpointMode != null ) {
97+ if (testCase . systemPropertyEndpointMode != null ) {
9898 System .setProperty (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .property (),
99- systemPropertyEndpointMode );
99+ testCase . systemPropertyEndpointMode );
100100 }
101- if (sharedConfigFile != null ) {
101+ if (testCase . sharedConfigFile != null ) {
102102 ENVIRONMENT_VARIABLE_HELPER .set (ProfileFileSystemSetting .AWS_CONFIG_FILE .environmentVariable (),
103- getTestFilePath (sharedConfigFile ));
103+ getTestFilePath (testCase . sharedConfigFile ));
104104 }
105105
106- Ec2MetadataConfigProvider configProvider = Ec2MetadataConfigProvider .builder ()
107- .profileFile (customProfileFile == null ? null :
108- () -> customProfileFile )
109- .profileName (customProfileName )
110- .build ();
111-
112- if (expectedException != null ) {
113- assertThatThrownBy (configProvider ::getEndpointMode ).isInstanceOf (expectedException );
114- } else {
115- assertThat (configProvider .getEndpointMode ()).isEqualTo (expectedEndpointMode );
106+ if (testCase .expectedException != null ) {
107+ thrown .expect (testCase .expectedException );
116108 }
117109 }
118110
111+ @ After
112+ public void teardown () {
113+ ENVIRONMENT_VARIABLE_HELPER .reset ();
114+ System .clearProperty (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .property ());
115+ }
116+
117+ @ Test
118+ public void resolvesCorrectEndpointMode () {
119+ Ec2MetadataConfigProvider configProvider = Ec2MetadataConfigProvider .builder ()
120+ .profileFile (testCase .customProfileFile )
121+ .profileName (testCase .customProfileName )
122+ .build ();
123+
124+ assertThat (configProvider .getEndpointMode ()).isEqualTo (testCase .expectedEndpointMode );
125+ }
126+
119127 private static String getTestFilePath (String testFile ) {
120128 return Ec2MetadataConfigProviderEndpointModeTest .class .getResource (testFile ).getFile ();
121129 }
@@ -129,4 +137,65 @@ private static ProfileFile customProfileFile() {
129137 .content (new ByteArrayInputStream (content .getBytes (StandardCharsets .UTF_8 )))
130138 .build ();
131139 }
140+
141+ private static class TestCase {
142+ private String envEndpointMode ;
143+ private String systemPropertyEndpointMode ;
144+
145+ private String sharedConfigFile ;
146+
147+ private Supplier <ProfileFile > customProfileFile ;
148+
149+ private String customProfileName ;
150+
151+ private Ec2MetadataConfigProvider .EndpointMode expectedEndpointMode ;
152+ private Class <? extends Throwable > expectedException ;
153+
154+ public TestCase envEndpointMode (String envEndpointMode ) {
155+ this .envEndpointMode = envEndpointMode ;
156+ return this ;
157+ }
158+ public TestCase systemPropertyEndpointMode (String systemPropertyEndpointMode ) {
159+ this .systemPropertyEndpointMode = systemPropertyEndpointMode ;
160+ return this ;
161+ }
162+
163+ public TestCase sharedConfigFile (String sharedConfigFile ) {
164+ this .sharedConfigFile = sharedConfigFile ;
165+ return this ;
166+ }
167+
168+ public TestCase customProfileFile (Supplier <ProfileFile > customProfileFile ) {
169+ this .customProfileFile = customProfileFile ;
170+ return this ;
171+ }
172+
173+ private TestCase customProfileName (String customProfileName ) {
174+ this .customProfileName = customProfileName ;
175+ return this ;
176+ }
177+
178+ public TestCase expectedEndpointMode (Ec2MetadataConfigProvider .EndpointMode expectedEndpointMode ) {
179+ this .expectedEndpointMode = expectedEndpointMode ;
180+ return this ;
181+ }
182+
183+ public TestCase expectedException (Class <? extends Throwable > expectedException ) {
184+ this .expectedException = expectedException ;
185+ return this ;
186+ }
187+
188+ @ Override
189+ public String toString () {
190+ return "TestCase{" +
191+ "envEndpointMode='" + envEndpointMode + '\'' +
192+ ", systemPropertyEndpointMode='" + systemPropertyEndpointMode + '\'' +
193+ ", sharedConfigFile='" + sharedConfigFile + '\'' +
194+ ", customProfileFile=" + customProfileFile +
195+ ", customProfileName='" + customProfileName + '\'' +
196+ ", expectedEndpointMode=" + expectedEndpointMode +
197+ ", expectedException=" + expectedException +
198+ '}' ;
199+ }
200+ }
132201}
0 commit comments