@Test public void testOrderOfMultipleExpectHeadersIsPreservedOnRequests() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setEntity(body); post.addHeader("Expect", "100-continue"); post.addHeader("Expect", "x-expect=true"); post.addHeader("Content-Length", "128"); testOrderOfMultipleHeadersIsPreservedOnRequests("Expect", post); }
@Test public void testOrderOfMultipleAllowHeadersIsPreservedOnRequests() throws Exception { final BasicClassicHttpRequest put = new BasicClassicHttpRequest("PUT", "/"); put.setEntity(body); put.addHeader("Allow", "GET, HEAD"); put.addHeader("Allow", "DELETE"); put.addHeader("Content-Length", "128"); testOrderOfMultipleHeadersIsPreservedOnRequests("Allow", put); }
@Test public void testOrderOfMultipleContentEncodingHeadersIsPreservedOnRequests() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setEntity(body); post.addHeader("Content-Encoding", "gzip"); post.addHeader("Content-Encoding", "compress"); post.addHeader("Content-Length", "128"); testOrderOfMultipleHeadersIsPreservedOnRequests("Content-Encoding", post); }
@Test public void testOrderOfMultipleContentLanguageHeadersIsPreservedOnRequests() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setEntity(body); post.addHeader("Content-Language", "mi"); post.addHeader("Content-Language", "en"); post.addHeader("Content-Length", "128"); testOrderOfMultipleHeadersIsPreservedOnRequests("Content-Language", post); }
@Test public void testRequestsNotExpecting100ContinueBehaviorShouldNotSetExpectContinueHeader() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setHeader("Content-Length", "128"); post.setEntity(new BasicHttpEntity()); final Capture<ClassicHttpRequest> reqCap = EasyMock.newCapture(); EasyMock.expect( mockExecChain.proceed( EasyMock.capture(reqCap), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(post); verifyMocks(); final ClassicHttpRequest forwarded = reqCap.getValue(); boolean foundExpect = false; final Iterator<HeaderElement> it = MessageSupport.iterate(forwarded, HttpHeaders.EXPECT); while (it.hasNext()) { final HeaderElement elt = it.next(); if ("100-continue".equalsIgnoreCase(elt.getName())) { foundExpect = true; break; } } Assert.assertFalse(foundExpect); }
@Test public void testRequestsExpecting100ContinueBehaviorShouldSetExpectHeader() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE); post.setHeader("Content-Length", "128"); post.setEntity(new BasicHttpEntity()); final Capture<ClassicHttpRequest> reqCap = EasyMock.newCapture(); EasyMock.expect( mockExecChain.proceed( EasyMock.capture(reqCap), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(post); verifyMocks(); final ClassicHttpRequest forwarded = reqCap.getValue(); boolean foundExpect = false; final Iterator<HeaderElement> it = MessageSupport.iterate(forwarded, HttpHeaders.EXPECT); while (it.hasNext()) { final HeaderElement elt = it.next(); if ("100-continue".equalsIgnoreCase(elt.getName())) { foundExpect = true; break; } } Assert.assertTrue(foundExpect); }
@Test public void testResponsesToPUTsAreNotCached() throws Exception { emptyMockCacheExpectsNoPuts(); final BasicClassicHttpRequest put = new BasicClassicHttpRequest("PUT", "/"); put.setEntity(HttpTestUtils.makeBody(128)); put.addHeader("Content-Length", "128"); originResponse.setHeader("Cache-Control", "max-age=3600"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(put); verifyMocks(); }
@Test public void testResponsesToPOSTWithoutCacheControlOrExpiresAreNotCached() throws Exception { emptyMockCacheExpectsNoPuts(); final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setHeader("Content-Length", "128"); post.setEntity(HttpTestUtils.makeBody(128)); originResponse.removeHeaders("Cache-Control"); originResponse.removeHeaders("Expires"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(post); verifyMocks(); }
private void testDoesNotAddHeaderToRequestIfNotPresent(final String header) throws Exception { final BasicClassicHttpRequest req = new BasicClassicHttpRequest("POST","/"); req.setEntity(HttpTestUtils.makeBody(128)); req.setHeader("Content-Length","128"); req.removeHeaders(header); final Capture<ClassicHttpRequest> cap = EasyMock.newCapture(); EasyMock.expect( mockExecChain.proceed( EasyMock.capture(cap), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(req); verifyMocks(); final ClassicHttpRequest captured = cap.getValue(); Assert.assertNull(captured.getFirstHeader(header)); }
@Test public void test100ContinueResponsesAreNotForwardedTo1_0ClientsWhoDidNotAskForThem() throws Exception { final BasicClassicHttpRequest post = new BasicClassicHttpRequest("POST", "/"); post.setVersion(new ProtocolVersion("HTTP", 1, 0)); post.setEntity(body); post.setHeader("Content-Length", "128"); originResponse = new BasicClassicHttpResponse(100, "Continue"); EasyMock.expect( mockExecChain.proceed( EasyMock.isA(ClassicHttpRequest.class), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); try { // if a 100 response gets up to us from the HttpClient // backend, we can't really handle it at that point execute(post); Assert.fail("should have thrown an exception"); } catch (final ClientProtocolException expected) { } verifyMocks(); }
private void testDoesNotModifyHeaderOnRequest(final String header, final String value) throws Exception { final BasicClassicHttpRequest req = new BasicClassicHttpRequest("POST","/"); req.setEntity(HttpTestUtils.makeBody(128)); req.setHeader("Content-Length","128"); req.setHeader(header,value); final Capture<ClassicHttpRequest> cap = EasyMock.newCapture(); EasyMock.expect( mockExecChain.proceed( EasyMock.capture(cap), EasyMock.isA(ExecChain.Scope.class))).andReturn(originResponse); replayMocks(); execute(req); verifyMocks(); final ClassicHttpRequest captured = cap.getValue(); Assert.assertEquals(value, captured.getFirstHeader(header).getValue()); }
@Test public void testRequestContentEntityContentLengthDelimitedHTTP11() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(header); Assert.assertEquals(s.length(), Integer.parseInt(header.getValue())); Assert.assertNull(request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING)); }
@Test public void testRequestExpectContinueZeroContent() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = ""; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(entity); final RequestExpectContinue interceptor = new RequestExpectContinue(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.EXPECT); Assert.assertNull(header); }
@Test public void testRequestExpectContinueHTTP10() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); context.setProtocolVersion(HttpVersion.HTTP_1_0); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(entity); final RequestExpectContinue interceptor = new RequestExpectContinue(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.EXPECT); Assert.assertNull(header); }
@Test public void testRequestContentNullTypeAndEncoding() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_TYPE)); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_ENCODING)); }
@Test public void testRequestExpectContinueGenerated() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final String s = "whatever"; final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII); request.setEntity(entity); final RequestExpectContinue interceptor = new RequestExpectContinue(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.EXPECT); Assert.assertNotNull(header); Assert.assertEquals(HeaderElements.CONTINUE, header.getValue()); }
@Test public void testRequestContentAddHeaders() throws Exception { final RequestContent interceptor = new RequestContent(true); final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.setEntity(new StringEntity("")); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(h1); Assert.assertEquals("0", h1.getValue()); final Header h2 = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNull(h2); }
@Test public void testRequestDateGenerated() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.setEntity(new StringEntity("stuff")); final RequestDate interceptor = new RequestDate(); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.DATE); Assert.assertNotNull(h1); interceptor.process(request, request.getEntity(), context); final Header h2 = request.getFirstHeader(HttpHeaders.DATE); Assert.assertNotNull(h2); }
@Test public void testRequestContentOverwriteHeaders() throws Exception { final RequestContent interceptor = new RequestContent(true); final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.addHeader(new BasicHeader(HttpHeaders.CONTENT_LENGTH, "10")); request.addHeader(new BasicHeader(HttpHeaders.TRANSFER_ENCODING, "whatever")); request.setEntity(new StringEntity("")); interceptor.process(request, request.getEntity(), context); final Header h1 = request.getFirstHeader(HttpHeaders.CONTENT_LENGTH); Assert.assertNotNull(h1); Assert.assertEquals("0", h1.getValue()); }
@Test public void testRequestContentEntityUnknownLengthHTTP11() throws Exception { final HttpContext context = new BasicHttpContext(null); final BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final BasicHttpEntity entity = new BasicHttpEntity(); entity.setContentLength(-1); entity.setChunked(false); request.setEntity(entity); final RequestContent interceptor = new RequestContent(); interceptor.process(request, request.getEntity(), context); final Header header = request.getFirstHeader(HttpHeaders.TRANSFER_ENCODING); Assert.assertNotNull(header); Assert.assertEquals("chunked", header.getValue()); Assert.assertNull(request.getFirstHeader(HttpHeaders.CONTENT_LENGTH)); }