@@ -39,10 +39,10 @@ public class EC2MetadataUtilsTest {
39
39
private static final String TOKEN_RESOURCE_PATH = "/latest/api/token" ;
40
40
private static final String TOKEN_HEADER = "x-aws-ec2-metadata-token" ;
41
41
private static final String EC2_METADATA_TOKEN_TTL_HEADER = "x-aws-ec2-metadata-token-ttl-seconds" ;
42
-
43
42
private static final String EC2_METADATA_ROOT = "/latest/meta-data" ;
44
-
45
43
private static final String AMI_ID_RESOURCE = EC2_METADATA_ROOT + "/ami-id" ;
44
+ private static final String TOKEN_STUB = "some-token" ;
45
+ private static final String EMPTY_BODY = "{}" ;
46
46
47
47
48
48
@ Rule
@@ -59,28 +59,27 @@ public void methodSetup() {
59
59
60
60
@ Test
61
61
public void getToken_queriesCorrectPath () {
62
- stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody ("some-token" )));
62
+ stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody (TOKEN_STUB )));
63
63
64
64
String token = EC2MetadataUtils .getToken ();
65
- assertThat (token ).isEqualTo ("some-token" );
65
+ assertThat (token ).isEqualTo (TOKEN_STUB );
66
66
67
67
WireMock .verify (putRequestedFor (urlPathEqualTo (TOKEN_RESOURCE_PATH )).withHeader (EC2_METADATA_TOKEN_TTL_HEADER , equalTo ("21600" )));
68
68
}
69
69
70
70
@ Test
71
71
public void getAmiId_queriesAndIncludesToken () {
72
- stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody ("some-token" )));
72
+ stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody (TOKEN_STUB )));
73
73
stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
74
74
75
75
EC2MetadataUtils .getAmiId ();
76
76
77
77
WireMock .verify (putRequestedFor (urlPathEqualTo (TOKEN_RESOURCE_PATH )).withHeader (EC2_METADATA_TOKEN_TTL_HEADER , equalTo ("21600" )));
78
- WireMock .verify (getRequestedFor (urlPathEqualTo (AMI_ID_RESOURCE )).withHeader (TOKEN_HEADER , equalTo ("some-token" )));
78
+ WireMock .verify (getRequestedFor (urlPathEqualTo (AMI_ID_RESOURCE )).withHeader (TOKEN_HEADER , equalTo (TOKEN_STUB )));
79
79
}
80
80
81
81
@ Test
82
82
public void getAmiId_tokenQueryTimeout_fallsBackToInsecure () {
83
-
84
83
stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withFixedDelay (Integer .MAX_VALUE )));
85
84
stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
86
85
@@ -93,7 +92,7 @@ public void getAmiId_tokenQueryTimeout_fallsBackToInsecure() {
93
92
@ Test
94
93
public void getAmiId_queriesTokenResource_403Error_fallbackToInsecure () {
95
94
stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withStatus (403 ).withBody ("oops" )));
96
- stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
95
+ stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody (EMPTY_BODY )));
97
96
98
97
EC2MetadataUtils .getAmiId ();
99
98
@@ -104,7 +103,7 @@ public void getAmiId_queriesTokenResource_403Error_fallbackToInsecure() {
104
103
@ Test
105
104
public void getAmiId_queriesTokenResource_404Error_fallbackToInsecure () {
106
105
stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withStatus (404 ).withBody ("oops" )));
107
- stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
106
+ stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody (EMPTY_BODY )));
108
107
109
108
EC2MetadataUtils .getAmiId ();
110
109
@@ -115,14 +114,43 @@ public void getAmiId_queriesTokenResource_404Error_fallbackToInsecure() {
115
114
@ Test
116
115
public void getAmiId_queriesTokenResource_405Error_fallbackToInsecure () {
117
116
stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withStatus (405 ).withBody ("oops" )));
118
- stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
117
+ stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody (EMPTY_BODY )));
119
118
120
119
EC2MetadataUtils .getAmiId ();
121
120
122
121
WireMock .verify (putRequestedFor (urlPathEqualTo (TOKEN_RESOURCE_PATH )).withHeader (EC2_METADATA_TOKEN_TTL_HEADER , equalTo ("21600" )));
123
122
WireMock .verify (getRequestedFor (urlPathEqualTo (AMI_ID_RESOURCE )).withoutHeader (TOKEN_HEADER ));
124
123
}
125
124
125
+ @ Test
126
+ public void getAmiId_fallbackToInsecureDisabledThroughProperty_throwsWhenTokenFails () {
127
+ System .setProperty (SdkSystemSetting .AWS_EC2_METADATA_V1_DISABLED .property (), "true" );
128
+ stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withStatus (403 ).withBody ("oops" )));
129
+ try {
130
+ EC2MetadataUtils .getAmiId ();
131
+ } catch (Exception e ) {
132
+ assertThat (e ).isInstanceOf (SdkClientException .class );
133
+ assertThat (e ).hasMessageContaining ("fallback to IMDS v1 is disabled" );
134
+ }
135
+ finally {
136
+ System .clearProperty (SdkSystemSetting .AWS_EC2_METADATA_V1_DISABLED .property ());
137
+ }
138
+ }
139
+
140
+ @ Test
141
+ public void getAmiId_fallbackToInsecureDisabledThroughProperty_returnsDataWhenTokenReturned () {
142
+ System .setProperty (SdkSystemSetting .AWS_EC2_METADATA_V1_DISABLED .property (), "true" );
143
+ stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody (TOKEN_STUB )));
144
+ stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withBody ("{}" )));
145
+ try {
146
+ EC2MetadataUtils .getAmiId ();
147
+ WireMock .verify (putRequestedFor (urlPathEqualTo (TOKEN_RESOURCE_PATH )).withHeader (EC2_METADATA_TOKEN_TTL_HEADER , equalTo ("21600" )));
148
+ WireMock .verify (getRequestedFor (urlPathEqualTo (AMI_ID_RESOURCE )).withHeader (TOKEN_HEADER , equalTo (TOKEN_STUB )));
149
+ } finally {
150
+ System .clearProperty (SdkSystemSetting .AWS_EC2_METADATA_V1_DISABLED .property ());
151
+ }
152
+ }
153
+
126
154
@ Test
127
155
public void getAmiId_queriesTokenResource_400Error_throws () {
128
156
thrown .expect (SdkClientException .class );
@@ -140,7 +168,7 @@ public void fetchDataWithAttemptNumber_ioError_shouldHonor() {
140
168
thrown .expect (SdkClientException .class );
141
169
thrown .expectMessage ("Unable to contact EC2 metadata service" );
142
170
143
- stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody ("some-token" ))); ;
171
+ stubFor (put (urlPathEqualTo (TOKEN_RESOURCE_PATH )).willReturn (aResponse ().withBody (TOKEN_STUB )));
144
172
stubFor (get (urlPathEqualTo (AMI_ID_RESOURCE )).willReturn (aResponse ().withFault (Fault .CONNECTION_RESET_BY_PEER )));
145
173
146
174
EC2MetadataUtils .fetchData (AMI_ID_RESOURCE , false , attempts );
0 commit comments