private void assertRequestAndResponse(RecordedRequest serverRequest, MockResponse serverResponse, HttpRequest executorRequest, HttpResponse executorResponse) throws Exception { assertEquals(serverRequest.getMethod(), executorRequest.method()); Function<Map.Entry<String, String>, String> headersMapper = new Function<Map.Entry<String, String>, String>() { @Nullable @Override public String apply(@Nullable Map.Entry<String, String> input) { return input.getKey() + ": " + input.getValue(); } }; assertTrue(serverRequest.getHeaders().containsAll(Collections2.transform(executorRequest.headers().entries(), headersMapper))); assertEquals(serverRequest.getPath(), executorRequest.uri().getPath()); if (executorRequest.body() != null) { assertEquals(serverRequest.getBody(), executorRequest.body()); } else { assertEquals(serverRequest.getBody(), new byte[0]); } assertEquals(serverResponse.getBody(), ByteStreams.toByteArray(executorResponse.getContent())); assertTrue(serverResponse.getHeaders().containsAll(Collections2.transform(executorResponse.headers().entries(), headersMapper))); assertTrue(Collections2.transform(executorResponse.headers().entries(), headersMapper).containsAll(serverResponse.getHeaders())); }