public RecordController(SceneAccessLayer sceneAccessLayer, HttpRequest httpRequest) { _clientRequestBuilder = new RecordedHttpRequestBuilder(httpRequest); _sceneAccessLayer = sceneAccessLayer; }
@Override public void handleReadFromClient(ChannelMediator channelMediator, HttpObject httpObject) { if (channelMediator == null) { throw new IllegalStateException("HRFC: ChannelMediator can't be null"); } try { if (httpObject instanceof HttpRequest) { HttpRequest httpRequest = (HttpRequest) httpObject; _clientRequestBuilder.interpretHttpRequest(httpRequest); _clientRequestBuilder.addHeaders(httpRequest); } if (httpObject instanceof HttpContent) { _clientRequestBuilder.appendHttpContent((HttpContent) httpObject); } } catch (IOException e) { throw new RuntimeException("HRFC: Failed to record HttpContent", e); } channelMediator.writeToServer(httpObject); }
public RecordedHttpRequest build() { return new RecordedHttpRequest(_httpMethod, _uri, getHeaders(), getBody()); } }
@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(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 testAddHeaders() throws Exception { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "www.google.com"); nettyRequest.headers().add("key1", "value1"); nettyRequest.headers().add("key1", "value2"); nettyRequest.headers().add("key2", "value1"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); Multimap<String, String> headers = recordedHttpRequestBuilder.getHeaders(); Assert.assertEquals(headers.size(), 3); }
@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)); } }
@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); } } }
/** * Take necessary available parameters from original netty http requests * If uri we get is not absolute, we need check if we can get it from host headers. * if not, we store relative path to _path. * */ public RecordedHttpRequestBuilder(HttpRequest nettyHttpRequest) { super(nettyHttpRequest); interpretHttpRequest(nettyHttpRequest); }
@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 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"); }
@Test public void testSetCookieHeader() throws URISyntaxException { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "www.abc.com"); nettyRequest.headers() .add("Set-Cookie", "a,b,c"); nettyRequest.headers() .add("Set-Cookie", "d,e,f"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); Multimap<String, String> headers = recordedHttpRequestBuilder.getHeaders(); Assert.assertEquals(headers.size(), 2); Assert.assertTrue(headers.get("Set-Cookie").contains("a,b,c")); Assert.assertTrue(headers.get("Set-Cookie").contains("d,e,f")); }
/** * 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); } }
@Override public void handleReadFromClient(ChannelMediator channelMediator, HttpObject httpObject) { if (channelMediator == null) { throw new IllegalStateException("HRFC: ChannelMediator can't be null"); } try { if (httpObject instanceof HttpRequest) { HttpRequest httpRequest = (HttpRequest) httpObject; _clientRequestBuilder.interpretHttpRequest(httpRequest); _clientRequestBuilder.addHeaders(httpRequest); } if (httpObject instanceof HttpContent) { _clientRequestBuilder.appendHttpContent((HttpContent) httpObject); } if (httpObject instanceof LastHttpContent) { HttpResponse httpResponse = playBack(); channelMediator.writeToClientAndDisconnect(httpResponse); } } catch (IOException e) { throw new RuntimeException("HRFC: Failed to replay HttpContent", e); } }
@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 public void testGetHeaders() throws Exception { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "www.google.com"); nettyRequest.headers().add("key1", "value1"); nettyRequest.headers().add("key1", "value2"); nettyRequest.headers().add("key2", "value1"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); Multimap<String, String> headers = recordedHttpRequestBuilder.getHeaders(); Assert.assertEquals(headers.size(), 3); Assert.assertTrue(headers.get("key1").contains("value1")); Assert.assertTrue(headers.get("key1").contains("value2")); Assert.assertTrue(headers.get("key2").contains("value1")); }
public ReplayController(SceneAccessLayer sceneAccessLayer, HttpRequest httpRequest) { _clientRequestBuilder = new RecordedHttpRequestBuilder(httpRequest); _sceneAccessLayer = sceneAccessLayer; }
@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 testNonSetCookieHeader() throws URISyntaxException { HttpRequest nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_0, HttpMethod.GET, "www.abc.com"); nettyRequest.headers() .add("Not-Set-Cookie", "a,b,c"); nettyRequest.headers() .add("Not-Set-Cookie", "d,e,f"); RecordedHttpRequestBuilder recordedHttpRequestBuilder = new RecordedHttpRequestBuilder(nettyRequest); Multimap<String, String> headers = recordedHttpRequestBuilder.getHeaders(); Assert.assertEquals(headers.size(), 2); Assert.assertTrue(headers.get("Not-Set-Cookie").contains("a,b,c")); Assert.assertTrue(headers.get("Not-Set-Cookie").contains("d,e,f")); } }