@Override public void handleReadFromServer(HttpObject httpObject) { if (httpObject instanceof HttpResponse) { _serverResponseBuilder = new RecordedHttpResponseBuilder((HttpResponse) httpObject); } try { if (httpObject instanceof HttpContent) { _serverResponseBuilder.appendHttpContent((HttpContent) httpObject); } if (httpObject instanceof LastHttpContent) { _sceneAccessLayer.record(_clientRequestBuilder.build(), _serverResponseBuilder.build()); } } catch (IOException e) { throw new RuntimeException("HRFS: Failed to record HttpContent", e); } } }
@Test public void testBuildRelativeUri() { String uri = "finance"; HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, uri); nettyRequest.headers().set(HttpHeaders.Names.HOST, "www.google.com/"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); RecordedHttpRequest recordedHttpRequest = recordedHttpRequestBuilder.build(); Assert.assertEquals(recordedHttpRequest.getUri().toString(), "https://www.google.com/finance"); }
/** * If found matched request, then return response accordingly. * Otherwise, return bad request. * * @return bad request if not matched request/response found in the scene. * */ private FullHttpResponse playBack() throws IOException { RecordedHttpRequest recordedHttpRequest = _clientRequestBuilder.build(); boolean found = _sceneAccessLayer.hasMatchRequest(recordedHttpRequest); if (!found) { if (LOG.isDebugEnabled()) { LOG.debug(_sceneAccessLayer.getMatchFailureDescription(recordedHttpRequest)); } return NoMatchResponseGenerator.generateNoMatchResponse(recordedHttpRequest); } RecordedHttpResponse recordedHttpResponse = _sceneAccessLayer.playback(recordedHttpRequest); return NettyHttpResponseMapper.from(recordedHttpResponse); } }
@Test(expectedExceptions = IllegalStateException.class) public void testBuildWithUnsupportedUri() { String uri = "http://example.com/file[/].html"; HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, uri); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); recordedHttpRequestBuilder.build(); }
@Test public void testBuildAbsoluteUri() { String uri = "http://www.google.com"; HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, uri); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); RecordedHttpRequest recordedHttpRequest = recordedHttpRequestBuilder.build(); Assert.assertEquals(recordedHttpRequest.getUri().toString(), uri); }
@Test(expectedExceptions = IllegalStateException.class) public void testBuildWithUriTwoLegsIllegalUri() { HttpRequest nettyRequest1 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "file[/].html"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest1); HttpRequest nettyRequest2 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "google.com"); nettyRequest2.headers().set(HttpHeaders.Names.HOST, "www.google.com/"); recordedHttpRequestBuilder.addHeaders(nettyRequest2); recordedHttpRequestBuilder.build(); }
@Test public void testBuildWithUriTwoLegs() { HttpRequest nettyRequest1 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "finance"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest1); HttpRequest nettyRequest2 = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "google.com"); nettyRequest2.headers().set(HttpHeaders.Names.HOST, "www.google.com/"); recordedHttpRequestBuilder.addHeaders(nettyRequest2); RecordedHttpRequest recordedHttpRequest = recordedHttpRequestBuilder.build(); Assert.assertEquals(recordedHttpRequest.getUri().toString(), "https://www.google.com/finance"); }
@Test public void testBuildHttpMethod() { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "http://www.google.com"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); RecordedHttpRequest recordedHttpRequest = recordedHttpRequestBuilder.build(); Assert.assertEquals(recordedHttpRequest.getMethod(), HttpMethod.GET.toString()); }
@Test public void testBuildContent() throws Exception { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "www.google.com"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); String charset = "UTF-8"; String str1 = "first content"; HttpContent httpContent1 = new DefaultHttpContent(Unpooled.copiedBuffer(str1.getBytes(charset))); recordedHttpRequestBuilder.appendHttpContent(httpContent1); String str2 = "second content"; HttpContent httpContent2 = new DefaultHttpContent(Unpooled.copiedBuffer(str2.getBytes(charset))); recordedHttpRequestBuilder.appendHttpContent(httpContent2); String lastStr = "Last chunk"; HttpContent lastContent = new DefaultLastHttpContent(Unpooled.copiedBuffer(lastStr.getBytes(charset))); recordedHttpRequestBuilder.appendHttpContent(lastContent); RecordedHttpRequest recordedHttpRequest = recordedHttpRequestBuilder.build(); Assert .assertEquals((str1 + str2 + lastStr).getBytes(charset), recordedHttpRequest.getHttpBody().getContent(charset)); } }