ClassicHttpResponse callBackend( final HttpHost target, final ClassicHttpRequest request, final ExecChain.Scope scope, final ExecChain chain) throws IOException, HttpException { final Date requestDate = getCurrentDate(); log.debug("Calling the backend"); final ClassicHttpResponse backendResponse = chain.proceed(request, scope); try { backendResponse.addHeader("Via", generateViaHeader(backendResponse)); return handleBackendResponse(target, request, scope, requestDate, getCurrentDate(), backendResponse); } catch (final IOException | RuntimeException ex) { backendResponse.close(); throw ex; } }
buf = null; backendResponse.close();
log.warn("304 response did not contain ETag"); EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); return callBackend(target, request, scope, chain); log.debug("304 response did not contain ETag matching one sent in If-None-Match"); EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); return callBackend(target, request, scope, chain); && (request.getEntity() == null || request.getEntity().isRepeatable())) { EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); final ClassicHttpRequest unconditional = conditionalRequestBuilder.buildUnconditionalRequest(request); return callBackend(target, unconditional, scope, chain); backendResponse.close(); if (shouldSendNotModifiedResponse(request, responseEntry)) { return convert(responseGenerator.generateNotModifiedResponse(responseEntry), scope); return convert(response, scope); } catch (final IOException | RuntimeException ex) { backendResponse.close(); throw ex;
ClassicHttpResponse callBackend( final HttpHost target, final ClassicHttpRequest request, final ExecChain.Scope scope, final ExecChain chain) throws IOException, HttpException { final Date requestDate = getCurrentDate(); log.debug("Calling the backend"); final ClassicHttpResponse backendResponse = chain.proceed(request, scope); try { backendResponse.addHeader("Via", generateViaHeader(backendResponse)); return handleBackendResponse(target, request, scope, requestDate, getCurrentDate(), backendResponse); } catch (final IOException | RuntimeException ex) { backendResponse.close(); throw ex; } }
@Test public void testResponseToHead() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("HEAD", "/"); Mockito.when(conn.receiveRequestHeader()).thenReturn(request); Mockito.when(responseFactory.newHttpResponse(200)).thenReturn(response); Mockito.when(handlerResolver.resolve(request, context)).thenReturn(requestHandler); Mockito.when(connReuseStrategy.keepAlive(request, response, context)).thenReturn(Boolean.TRUE); httpservice.handleRequest(conn, context); Assert.assertSame(request, context.getRequest()); Mockito.verify(httprocessor).process(response, response.getEntity(), context); Mockito.verify(requestHandler).handle(request, response, context); Mockito.verify(conn).sendResponseHeader(response); Mockito.verify(conn, Mockito.never()).sendResponseEntity(ArgumentMatchers.<ClassicHttpResponse>any()); Mockito.verify(conn).flush(); Mockito.verify(conn, Mockito.never()).close(); Mockito.verify(response).close(); }
buf = null; backendResponse.close();
@Test public void testNoContentResponse() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); Mockito.when(conn.receiveRequestHeader()).thenReturn(request); Mockito.when(responseFactory.newHttpResponse(200)).thenReturn(response); Mockito.when(handlerResolver.resolve(request, context)).thenReturn(new HttpRequestHandler() { @Override public void handle( final ClassicHttpRequest request, final ClassicHttpResponse response, final HttpContext context) throws HttpException, IOException { response.setCode(HttpStatus.SC_NO_CONTENT); } }); Mockito.when(connReuseStrategy.keepAlive(request, response, context)).thenReturn(Boolean.TRUE); httpservice.handleRequest(conn, context); Assert.assertSame(request, context.getRequest()); Mockito.verify(httprocessor).process(response, response.getEntity(), context); Mockito.verify(conn).sendResponseHeader(response); Mockito.verify(conn, Mockito.never()).sendResponseEntity(ArgumentMatchers.<ClassicHttpResponse>any()); Mockito.verify(conn).flush(); Mockito.verify(conn, Mockito.never()).close(); Mockito.verify(response).close(); }
@Test public void testConnectionKeepAlive() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); Mockito.when(conn.receiveRequestHeader()).thenReturn(request); Mockito.when(responseFactory.newHttpResponse(200)).thenReturn(response); Mockito.when(handlerResolver.resolve(request, context)).thenReturn(requestHandler); Mockito.when(connReuseStrategy.keepAlive(request, response, context)).thenReturn(Boolean.TRUE); httpservice.handleRequest(conn, context); Assert.assertEquals(HttpStatus.SC_OK, response.getCode()); Assert.assertSame(request, context.getRequest()); Assert.assertSame(response, context.getResponse()); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); Mockito.verify(conn).sendResponseHeader(response); Mockito.verify(conn).sendResponseEntity(response); Mockito.verify(conn).flush(); Mockito.verify(conn, Mockito.never()).close(); Mockito.verify(response).close(); }
log.warn("304 response did not contain ETag"); EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); return callBackend(target, request, scope, chain); log.debug("304 response did not contain ETag matching one sent in If-None-Match"); EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); return callBackend(target, request, scope, chain); && (request.getEntity() == null || request.getEntity().isRepeatable())) { EntityUtils.consume(backendResponse.getEntity()); backendResponse.close(); final ClassicHttpRequest unconditional = conditionalRequestBuilder.buildUnconditionalRequest(request); return callBackend(target, unconditional, scope, chain); backendResponse.close(); if (shouldSendNotModifiedResponse(request, responseEntry)) { return convert(responseGenerator.generateNotModifiedResponse(responseEntry), scope); return convert(response, scope); } catch (final IOException | RuntimeException ex) { backendResponse.close(); throw ex;
Mockito.verify(conn).flush(); Mockito.verify(conn, Mockito.never()).close(); Mockito.verify(response).close();
Mockito.verify(conn, Mockito.times(2)).flush(); Mockito.verify(conn, Mockito.never()).close(); Mockito.verify(response).close();
@Test public void testBasicExecution() throws Exception { final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); Mockito.when(conn.receiveRequestHeader()).thenReturn(request); Mockito.when(responseFactory.newHttpResponse(200)).thenReturn(response); Mockito.when(connReuseStrategy.keepAlive(request, response, context)).thenReturn(Boolean.FALSE); httpservice.handleRequest(conn, context); Assert.assertEquals(HttpStatus.SC_NOT_IMPLEMENTED, response.getCode()); Assert.assertSame(request, context.getRequest()); Assert.assertSame(response, context.getResponse()); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); Mockito.verify(conn).sendResponseHeader(response); Mockito.verify(conn).sendResponseEntity(response); Mockito.verify(conn).flush(); Mockito.verify(conn).close(); Mockito.verify(response).close(); }
@Override public void submitResponse(final ClassicHttpResponse response) throws HttpException, IOException { try { context.setAttribute(HttpCoreContext.HTTP_RESPONSE, response); processor.process(response, response.getEntity(), context); responseSubmitted.set(true); conn.sendResponseHeader(response); if (streamListener != null) { streamListener.onResponseHead(conn, response); } if (MessageSupport.canResponseHaveBody(request.getMethod(), response)) { conn.sendResponseEntity(response); } // Make sure the request content is fully consumed EntityUtils.consume(request.getEntity()); final boolean keepAlive = connReuseStrategy.keepAlive(request, response, context); if (streamListener != null) { streamListener.onExchangeComplete(conn, keepAlive); } if (!keepAlive) { conn.close(); } conn.flush(); } finally { response.close(); } }
@Override public void submitResponse(final ClassicHttpResponse response) throws HttpException, IOException { try { context.setAttribute(HttpCoreContext.HTTP_RESPONSE, response); processor.process(response, response.getEntity(), context); responseSubmitted.set(true); conn.sendResponseHeader(response); if (streamListener != null) { streamListener.onResponseHead(conn, response); } if (MessageSupport.canResponseHaveBody(request.getMethod(), response)) { conn.sendResponseEntity(response); } // Make sure the request content is fully consumed EntityUtils.consume(request.getEntity()); final boolean keepAlive = connReuseStrategy.keepAlive(request, response, context); if (streamListener != null) { streamListener.onExchangeComplete(conn, keepAlive); } if (!keepAlive) { conn.close(); } conn.flush(); } finally { response.close(); } }