16
16
package software .amazon .awssdk .auth .credentials .internal ;
17
17
18
18
import 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
-
22
19
import java .io .ByteArrayInputStream ;
23
20
import 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 ;
30
30
import software .amazon .awssdk .core .SdkSystemSetting ;
31
31
import software .amazon .awssdk .profiles .ProfileFile ;
32
32
import software .amazon .awssdk .profiles .ProfileFileSystemSetting ;
33
33
import software .amazon .awssdk .testutils .EnvironmentVariableHelper ;
34
34
35
+ @ RunWith (Parameterized .class )
35
36
public class Ec2MetadataConfigProviderEndpointModeTest {
36
37
private static final String TEST_PROFILES_PATH_PREFIX = "/software/amazon/awssdk/auth/credentials/internal/ec2metadataconfigprovider/" ;
37
38
private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper ();
38
39
private static final String CUSTOM_PROFILE = "myprofile" ;
39
40
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 )
73
84
);
74
85
}
75
86
76
- @ BeforeEach
77
- @ AfterEach
78
- public void cleanup () {
87
+ @ Before
88
+ public void setup () {
79
89
ENVIRONMENT_VARIABLE_HELPER .reset ();
80
90
System .clearProperty (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .property ());
81
- }
82
91
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 ) {
93
93
ENVIRONMENT_VARIABLE_HELPER .set (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .environmentVariable (),
94
- envEndpointMode );
94
+ testCase . envEndpointMode );
95
95
}
96
96
97
- if (systemPropertyEndpointMode != null ) {
97
+ if (testCase . systemPropertyEndpointMode != null ) {
98
98
System .setProperty (SdkSystemSetting .AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE .property (),
99
- systemPropertyEndpointMode );
99
+ testCase . systemPropertyEndpointMode );
100
100
}
101
- if (sharedConfigFile != null ) {
101
+ if (testCase . sharedConfigFile != null ) {
102
102
ENVIRONMENT_VARIABLE_HELPER .set (ProfileFileSystemSetting .AWS_CONFIG_FILE .environmentVariable (),
103
- getTestFilePath (sharedConfigFile ));
103
+ getTestFilePath (testCase . sharedConfigFile ));
104
104
}
105
105
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 );
116
108
}
117
109
}
118
110
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
+
119
127
private static String getTestFilePath (String testFile ) {
120
128
return Ec2MetadataConfigProviderEndpointModeTest .class .getResource (testFile ).getFile ();
121
129
}
@@ -129,4 +137,65 @@ private static ProfileFile customProfileFile() {
129
137
.content (new ByteArrayInputStream (content .getBytes (StandardCharsets .UTF_8 )))
130
138
.build ();
131
139
}
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
+ }
132
201
}
0 commit comments