From 9243a147946405e0bad69b7430104753dbfc34a1 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 31 Jan 2017 11:59:41 +0100 Subject: [PATCH] Test for correct handling of multiple header values Issue: SPR-15166 --- ...rceptingClientHttpRequestFactoryTests.java | 59 +++++++++---------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java index cde47f12979..b594b5db78c 100644 --- a/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java +++ b/spring-web/src/test/java/org/springframework/http/client/InterceptingClientHttpRequestFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,7 +26,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import org.junit.Before; import org.junit.Test; import org.springframework.http.HttpHeaders; @@ -37,25 +36,20 @@ import org.springframework.http.client.support.HttpRequestWrapper; import static org.junit.Assert.*; -/** @author Arjen Poutsma */ +/** + * @author Arjen Poutsma + * @author Juergen Hoeller + */ public class InterceptingClientHttpRequestFactoryTests { + private RequestFactoryMock requestFactoryMock = new RequestFactoryMock(); + + private RequestMock requestMock = new RequestMock(); + + private ResponseMock responseMock = new ResponseMock(); + private InterceptingClientHttpRequestFactory requestFactory; - private RequestFactoryMock requestFactoryMock; - - private RequestMock requestMock; - - private ResponseMock responseMock; - - @Before - public void setUp() throws Exception { - - requestFactoryMock = new RequestFactoryMock(); - requestMock = new RequestMock(); - responseMock = new ResponseMock(); - - } @Test public void basic() throws Exception { @@ -101,29 +95,29 @@ public class InterceptingClientHttpRequestFactoryTests { public void changeHeaders() throws Exception { final String headerName = "Foo"; final String headerValue = "Bar"; + final String otherValue = "Baz"; + ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - - return execution.execute(new HttpRequestWrapper(request) { - @Override - public HttpHeaders getHeaders() { - HttpHeaders headers = new HttpHeaders(); - headers.set(headerName, headerValue); - return headers; - } - }, body); + HttpRequestWrapper wrapper = new HttpRequestWrapper(request); + wrapper.getHeaders().add(headerName, otherValue); + return execution.execute(wrapper, body); } }; requestMock = new RequestMock() { @Override public ClientHttpResponse execute() throws IOException { - assertEquals(headerValue, getHeaders().getFirst(headerName)); + List headerValues = getHeaders().get(headerName); + assertEquals(2, headerValues.size()); + assertEquals(headerValue, headerValues.get(0)); + assertEquals(otherValue, headerValues.get(1)); return super.execute(); } }; + requestMock.getHeaders().add(headerName, headerValue); requestFactory = new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor)); @@ -135,11 +129,11 @@ public class InterceptingClientHttpRequestFactoryTests { @Test public void changeURI() throws Exception { final URI changedUri = new URI("http://example.com/2"); + ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - return execution.execute(new HttpRequestWrapper(request) { @Override public URI getURI() { @@ -168,11 +162,11 @@ public class InterceptingClientHttpRequestFactoryTests { @Test public void changeMethod() throws Exception { final HttpMethod changedMethod = HttpMethod.POST; + ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - return execution.execute(new HttpRequestWrapper(request) { @Override public HttpMethod getMethod() { @@ -201,11 +195,11 @@ public class InterceptingClientHttpRequestFactoryTests { @Test public void changeBody() throws Exception { final byte[] changedBody = "Foo".getBytes(); + ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() { @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { - return execution.execute(request, changedBody); } }; @@ -218,6 +212,7 @@ public class InterceptingClientHttpRequestFactoryTests { assertTrue(Arrays.equals(changedBody, requestMock.body.toByteArray())); } + private static class NoOpInterceptor implements ClientHttpRequestInterceptor { private boolean invoked = false; @@ -230,6 +225,7 @@ public class InterceptingClientHttpRequestFactoryTests { } } + private class RequestFactoryMock implements ClientHttpRequestFactory { @Override @@ -241,6 +237,7 @@ public class InterceptingClientHttpRequestFactoryTests { } + private class RequestMock implements ClientHttpRequest { private URI uri; @@ -291,6 +288,7 @@ public class InterceptingClientHttpRequestFactoryTests { } } + private static class ResponseMock implements ClientHttpResponse { private HttpStatus statusCode = HttpStatus.OK; @@ -328,4 +326,5 @@ public class InterceptingClientHttpRequestFactoryTests { public void close() { } } + }