Test for correct handling of multiple header values
Issue: SPR-15166
This commit is contained in:
		
							parent
							
								
									23aac2de8c
								
							
						
					
					
						commit
						9243a14794
					
				| 
						 | 
					@ -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");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with 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.Collections;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.junit.Before;
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.http.HttpHeaders;
 | 
					import org.springframework.http.HttpHeaders;
 | 
				
			||||||
| 
						 | 
					@ -37,25 +36,20 @@ import org.springframework.http.client.support.HttpRequestWrapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.Assert.*;
 | 
					import static org.junit.Assert.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** @author Arjen Poutsma */
 | 
					/**
 | 
				
			||||||
 | 
					 * @author Arjen Poutsma
 | 
				
			||||||
 | 
					 * @author Juergen Hoeller
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class InterceptingClientHttpRequestFactoryTests {
 | 
					public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private RequestFactoryMock requestFactoryMock = new RequestFactoryMock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private RequestMock requestMock = new RequestMock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private ResponseMock responseMock = new ResponseMock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private InterceptingClientHttpRequestFactory requestFactory;
 | 
						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
 | 
						@Test
 | 
				
			||||||
	public void basic() throws Exception {
 | 
						public void basic() throws Exception {
 | 
				
			||||||
| 
						 | 
					@ -101,29 +95,29 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
	public void changeHeaders() throws Exception {
 | 
						public void changeHeaders() throws Exception {
 | 
				
			||||||
		final String headerName = "Foo";
 | 
							final String headerName = "Foo";
 | 
				
			||||||
		final String headerValue = "Bar";
 | 
							final String headerValue = "Bar";
 | 
				
			||||||
 | 
							final String otherValue = "Baz";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
							ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
								public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
				
			||||||
					throws IOException {
 | 
										throws IOException {
 | 
				
			||||||
 | 
									HttpRequestWrapper wrapper = new HttpRequestWrapper(request);
 | 
				
			||||||
				return execution.execute(new HttpRequestWrapper(request) {
 | 
									wrapper.getHeaders().add(headerName, otherValue);
 | 
				
			||||||
					@Override
 | 
									return execution.execute(wrapper, body);
 | 
				
			||||||
					public HttpHeaders getHeaders() {
 | 
					 | 
				
			||||||
						HttpHeaders headers = new HttpHeaders();
 | 
					 | 
				
			||||||
						headers.set(headerName, headerValue);
 | 
					 | 
				
			||||||
						return headers;
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				}, body);
 | 
					 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		requestMock = new RequestMock() {
 | 
							requestMock = new RequestMock() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public ClientHttpResponse execute() throws IOException {
 | 
								public ClientHttpResponse execute() throws IOException {
 | 
				
			||||||
				assertEquals(headerValue, getHeaders().getFirst(headerName));
 | 
									List<String> headerValues = getHeaders().get(headerName);
 | 
				
			||||||
 | 
									assertEquals(2, headerValues.size());
 | 
				
			||||||
 | 
									assertEquals(headerValue, headerValues.get(0));
 | 
				
			||||||
 | 
									assertEquals(otherValue, headerValues.get(1));
 | 
				
			||||||
				return super.execute();
 | 
									return super.execute();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							requestMock.getHeaders().add(headerName, headerValue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		requestFactory =
 | 
							requestFactory =
 | 
				
			||||||
				new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 | 
									new InterceptingClientHttpRequestFactory(requestFactoryMock, Collections.singletonList(interceptor));
 | 
				
			||||||
| 
						 | 
					@ -135,11 +129,11 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void changeURI() throws Exception {
 | 
						public void changeURI() throws Exception {
 | 
				
			||||||
		final URI changedUri = new URI("http://example.com/2");
 | 
							final URI changedUri = new URI("http://example.com/2");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
							ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
								public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
				
			||||||
					throws IOException {
 | 
										throws IOException {
 | 
				
			||||||
 | 
					 | 
				
			||||||
				return execution.execute(new HttpRequestWrapper(request) {
 | 
									return execution.execute(new HttpRequestWrapper(request) {
 | 
				
			||||||
					@Override
 | 
										@Override
 | 
				
			||||||
					public URI getURI() {
 | 
										public URI getURI() {
 | 
				
			||||||
| 
						 | 
					@ -168,11 +162,11 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void changeMethod() throws Exception {
 | 
						public void changeMethod() throws Exception {
 | 
				
			||||||
		final HttpMethod changedMethod = HttpMethod.POST;
 | 
							final HttpMethod changedMethod = HttpMethod.POST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
							ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
								public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
				
			||||||
					throws IOException {
 | 
										throws IOException {
 | 
				
			||||||
 | 
					 | 
				
			||||||
				return execution.execute(new HttpRequestWrapper(request) {
 | 
									return execution.execute(new HttpRequestWrapper(request) {
 | 
				
			||||||
					@Override
 | 
										@Override
 | 
				
			||||||
					public HttpMethod getMethod() {
 | 
										public HttpMethod getMethod() {
 | 
				
			||||||
| 
						 | 
					@ -201,11 +195,11 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void changeBody() throws Exception {
 | 
						public void changeBody() throws Exception {
 | 
				
			||||||
		final byte[] changedBody = "Foo".getBytes();
 | 
							final byte[] changedBody = "Foo".getBytes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
							ClientHttpRequestInterceptor interceptor = new ClientHttpRequestInterceptor() {
 | 
				
			||||||
			@Override
 | 
								@Override
 | 
				
			||||||
			public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
								public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
 | 
				
			||||||
					throws IOException {
 | 
										throws IOException {
 | 
				
			||||||
 | 
					 | 
				
			||||||
				return execution.execute(request, changedBody);
 | 
									return execution.execute(request, changedBody);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
| 
						 | 
					@ -218,6 +212,7 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
		assertTrue(Arrays.equals(changedBody, requestMock.body.toByteArray()));
 | 
							assertTrue(Arrays.equals(changedBody, requestMock.body.toByteArray()));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static class NoOpInterceptor implements ClientHttpRequestInterceptor {
 | 
						private static class NoOpInterceptor implements ClientHttpRequestInterceptor {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private boolean invoked = false;
 | 
							private boolean invoked = false;
 | 
				
			||||||
| 
						 | 
					@ -230,6 +225,7 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private class RequestFactoryMock implements ClientHttpRequestFactory {
 | 
						private class RequestFactoryMock implements ClientHttpRequestFactory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		@Override
 | 
							@Override
 | 
				
			||||||
| 
						 | 
					@ -241,6 +237,7 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private class RequestMock implements ClientHttpRequest {
 | 
						private class RequestMock implements ClientHttpRequest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private URI uri;
 | 
							private URI uri;
 | 
				
			||||||
| 
						 | 
					@ -291,6 +288,7 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static class ResponseMock implements ClientHttpResponse {
 | 
						private static class ResponseMock implements ClientHttpResponse {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		private HttpStatus statusCode = HttpStatus.OK;
 | 
							private HttpStatus statusCode = HttpStatus.OK;
 | 
				
			||||||
| 
						 | 
					@ -328,4 +326,5 @@ public class InterceptingClientHttpRequestFactoryTests {
 | 
				
			||||||
		public void close() {
 | 
							public void close() {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue