@@ -216,7 +216,8 @@ private void setOptionsToValue(String value, Configuration conf, String... keys)
216216 @ Test
217217 public void testInitRequestHeadersForSTS () throws IOException {
218218 final Configuration conf = new Configuration ();
219- conf .set (CUSTOM_HEADERS_STS , "foo=bar;baz,qux=quux" );
219+ conf .set (CUSTOM_HEADERS_STS , "header1=value1;value2,header2=value3" );
220+
220221 Assertions .assertThat (conf .get (CUSTOM_HEADERS_S3 ))
221222 .describedAs ("Custom client headers for s3 %s" , CUSTOM_HEADERS_S3 )
222223 .isNull ();
@@ -225,18 +226,21 @@ public void testInitRequestHeadersForSTS() throws IOException {
225226 .headers ().size ())
226227 .describedAs ("Count of S3 client headers" )
227228 .isEqualTo (0 );
229+
228230 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_STS )
229231 .headers ().size ())
230232 .describedAs ("Count of STS client headers" )
231233 .isEqualTo (2 );
234+
232235 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_STS )
233- .headers ().get ("foo" ))
234- .describedAs ("STS client 'foo' header value" )
235- .isEqualTo (Lists .newArrayList ("bar" , "baz" ));
236+ .headers ().get ("header1" ))
237+ .describedAs ("STS client 'header1' header value" )
238+ .isEqualTo (Lists .newArrayList ("value1" , "value2" ));
239+
236240 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_STS )
237- .headers ().get ("qux " ))
238- .describedAs ("STS client 'qux ' header value" )
239- .isEqualTo (Lists .newArrayList ("quux " ));
241+ .headers ().get ("header2 " ))
242+ .describedAs ("STS client 'header2 ' header value" )
243+ .isEqualTo (Lists .newArrayList ("value3 " ));
240244 }
241245
242246 /**
@@ -246,7 +250,8 @@ public void testInitRequestHeadersForSTS() throws IOException {
246250 @ Test
247251 public void testInitRequestHeadersForS3 () throws IOException {
248252 final Configuration conf = new Configuration ();
249- conf .set (CUSTOM_HEADERS_S3 , "foo=bar;baz,qux=quux" );
253+ conf .set (CUSTOM_HEADERS_S3 , "header1=value1;value2,header2=value3" );
254+
250255 Assertions .assertThat (conf .get (CUSTOM_HEADERS_STS ))
251256 .describedAs ("Custom client headers for STS %s" , CUSTOM_HEADERS_STS )
252257 .isNull ();
@@ -255,17 +260,69 @@ public void testInitRequestHeadersForS3() throws IOException {
255260 .headers ().size ())
256261 .describedAs ("Count of STS client headers" )
257262 .isEqualTo (0 );
263+
258264 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
259265 .headers ().size ())
260266 .describedAs ("Count of S3 client headers" )
261267 .isEqualTo (2 );
268+
269+ Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
270+ .headers ().get ("header1" ))
271+ .describedAs ("S3 client 'header1' header value" )
272+ .isEqualTo (Lists .newArrayList ("value1" , "value2" ));
273+
274+ Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
275+ .headers ().get ("header2" ))
276+ .describedAs ("S3 client 'header2' header value" )
277+ .isEqualTo (Lists .newArrayList ("value3" ));
278+ }
279+
280+ /**
281+ * if {@link org.apache.hadoop.fs.s3a.Constants#CUSTOM_HEADERS_S3} is set,
282+ * verify that returned client configuration has desired headers set with whitespaces trimmed for headers and values.
283+ */
284+ @ Test
285+ public void testInitRequestHeadersForS3WithWhitespace () throws IOException {
286+ final Configuration conf = new Configuration ();
287+ conf .set (CUSTOM_HEADERS_S3 , " header1 = value1 ; value2 , header2= value3 " );
288+
289+ Assertions .assertThat (conf .get (CUSTOM_HEADERS_STS ))
290+ .describedAs ("Custom client headers for STS %s" , CUSTOM_HEADERS_STS )
291+ .isNull ();
292+
293+ Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_STS )
294+ .headers ().size ())
295+ .describedAs ("Count of STS client headers" )
296+ .isEqualTo (0 );
297+
298+ Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
299+ .headers ().size ())
300+ .describedAs ("Count of S3 client headers" )
301+ .isEqualTo (2 );
302+
262303 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
263- .headers ().get ("foo" ))
264- .describedAs ("S3 client 'foo' header value" )
265- .isEqualTo (Lists .newArrayList ("bar" , "baz" ));
304+ .headers ().get ("header1" ))
305+ .describedAs ("S3 client 'header1' header value" )
306+ .isEqualTo (Lists .newArrayList ("value1" , "value2" ));
307+
308+ Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
309+ .headers ().get ("header2" ))
310+ .describedAs ("S3 client 'header2' header value" )
311+ .isEqualTo (Lists .newArrayList ("value3" ));
312+ }
313+
314+ /**
315+ * if {@link org.apache.hadoop.fs.s3a.Constants#CUSTOM_HEADERS_S3} is set with duplicate values,
316+ * verify that returned client configuration has desired headers with both values.
317+ */
318+ @ Test
319+ public void testInitRequestHeadersForS3WithDuplicateValues () throws IOException {
320+ Configuration conf = new Configuration ();
321+ conf .set (CUSTOM_HEADERS_S3 , "header1=duplicate;duplicate" );
322+
266323 Assertions .assertThat (createClientConfigBuilder (conf , AWS_SERVICE_IDENTIFIER_S3 )
267- .headers ().get ("qux " ))
268- .describedAs ("S3 client 'qux ' header value" )
269- .isEqualTo (Lists .newArrayList ("quux " ));
324+ .headers ().get ("header1 " ))
325+ .describedAs ("S3 client 'header1 ' header value" )
326+ .isEqualTo (Lists .newArrayList ("duplicate" , "duplicate " ));
270327 }
271328}
0 commit comments