public RecordedHttpRequest build() { return new RecordedHttpRequest(_httpMethod, _uri, getHeaders(), getBody()); } }
public static FullHttpResponse generateNoMatchResponse(RecordedHttpRequest recordedHttpRequest) { StringBuilder bodyTextBuilder = new StringBuilder(); bodyTextBuilder.append("No Matching Request\n").append("Incoming Request Method: ") .append(recordedHttpRequest.getMethod()).append("\n").append("Incoming Request URI: ") .append(recordedHttpRequest.getUri()).append("\n").append("Incoming Request Headers: ") .append(recordedHttpRequest.getHeaders()).append("\n"); RecordedHttpBody incomingBody = recordedHttpRequest.getHttpBody(); if (incomingBody != null) { if (incomingBody instanceof RecordedEncodedHttpBody) { incomingBody = ((RecordedEncodedHttpBody) incomingBody).getDecodedBody(); } if (incomingBody instanceof RecordedStringHttpBody) { bodyTextBuilder.append("Incoming Request Body: ").append(((RecordedStringHttpBody) incomingBody).getContent()); } else { bodyTextBuilder.append("Incoming Request Body: (binary content)"); } } ByteBuf badRequestBody = Unpooled.wrappedBuffer(bodyTextBuilder.toString().getBytes(Charset.forName("UTF-8"))); return new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST, badRequestBody); }
@Override public boolean test(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) { String charSet1 = incomingRequest.getCharset(); String charSet2 = expectedRequest.getCharset(); RecordedHttpBody incomingBody = incomingRequest.getHttpBody(); if (incomingBody == null) { incomingBody = new RecordedByteHttpBody(new byte[0]); RecordedHttpBody expectedBody = expectedRequest.getHttpBody(); if (expectedBody == null) { expectedBody = new RecordedByteHttpBody(new byte[0]); if (incomingRequest.getHeaders().containsKey(HttpHeaders.CONTENT_TYPE) && expectedRequest.getHeaders().containsKey(HttpHeaders.CONTENT_TYPE) && incomingRequest.getHeaders().get(HttpHeaders.CONTENT_TYPE).iterator().next().contains(MULTIPART) && expectedRequest.getHeaders().get(HttpHeaders.CONTENT_TYPE).iterator().next().contains(MULTIPART)) { String currentRequestBoundaryValue = Arrays.stream(incomingRequest.getHeaders().get(HttpHeaders.CONTENT_TYPE).iterator().next() .split(SEMI_COLON)) .filter((attr) -> attr.contains(BOUNDARY)) .replaceFirst(BOUNDARY, EMPTY) .trim(); String recordedRequestBoundaryValue = Arrays.stream(expectedRequest.getHeaders().get(HttpHeaders.CONTENT_TYPE).iterator().next() .split(SEMI_COLON)) .filter((attr) -> attr.contains(BOUNDARY))
private void writeHttpRequest(RecordedHttpRequest recordedHttpRequest) throws IOException { _jsonGenerator .writeStringField(SceneSerializationConstant.SCENE_TAG_HTTPMETHOD, recordedHttpRequest.getMethod().toString()); _jsonGenerator .writeStringField(SceneSerializationConstant.SCENE_TAG_HTTPURI, recordedHttpRequest.getUri().toString()); writeHttpMessage(recordedHttpRequest); }
@Override public boolean test(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) { String charSet1 = incomingRequest.getCharset(); String charSet2 = expectedRequest.getCharset(); RecordedHttpBody incomingBody = incomingRequest.getHttpBody(); if (incomingBody == null) { incomingBody = new RecordedByteHttpBody(new byte[0]); } RecordedHttpBody expectedBody = expectedRequest.getHttpBody(); if (expectedBody == null) { expectedBody = new RecordedByteHttpBody(new byte[0]); } try { return Arrays.equals(incomingBody.getContent(charSet1), expectedBody.getContent(charSet2)); } catch (IOException e) { //TODO: PLACEHOLDER, error handling will be in separate RB. throw new RuntimeException("Failed to convert to byte arrays", e); } }
@Test public void testPassNullHeaders() throws URISyntaxException { RecordedHttpRequest recordedHttpRequest = new RecordedHttpRequest("GET", new URI("google.com"), null, null); Assert.assertEquals(recordedHttpRequest.getHeaders().get("anykey").size(), 0); }
@Test public void testGetCharsetNoContentType() throws URISyntaxException { Multimap<String, String> headers = LinkedHashMultimap.create(); RecordedHttpRequest recordedHttpRequest = new RecordedHttpRequest("GET", new URI("google.com"), headers, null); Assert.assertEquals(recordedHttpRequest.getCharset(), Charsets.UTF_8.toString()); }
@Test public void testGetContentType() throws URISyntaxException { Multimap<String, String> headers = LinkedHashMultimap.create(); headers.put(HttpHeaders.CONTENT_TYPE, "text/html"); RecordedHttpRequest recordedHttpRequest = new RecordedHttpRequest("GET", new URI("google.com"), headers, null); Assert.assertEquals(recordedHttpRequest.getContentType(), "text/html"); } }
private RecordedHttpBody getBodyFromRequest(RecordedHttpRequest request) { RecordedHttpBody body = request.getHttpBody(); if (body instanceof RecordedEncodedHttpBody) { return ((RecordedEncodedHttpBody) body).getDecodedBody(); } else { return body; } } }
public String getMatchFailureDescriptionForRequests(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) { StringBuilder resultBuilder = new StringBuilder("HTTP Headers Mismatch"); if (_transform instanceof MatchRuleBlacklistTransform) { resultBuilder.append(" (with Blacklist)"); } else if (_transform instanceof MatchRuleWhitelistTransform) { resultBuilder.append(" (with Whitelist)"); } resultBuilder.append("%n") .append(String.format("Incoming Headers: %s%n", _transform.transform(multimapToCommaSeparatedMap(incomingRequest.getHeaders())))) .append(String.format("Expected Headers: %s%n", _transform.transform(multimapToCommaSeparatedMap(expectedRequest.getHeaders())))); return resultBuilder.toString(); }
@Override public boolean test(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) { if (HttpUtilities.isFormURLEncodedContentType(incomingRequest.getContentType()) && HttpUtilities .isFormURLEncodedContentType(expectedRequest.getContentType())) { try { Map<String, String> incomingParams = getPostParametersFromRequest(incomingRequest); Map<String, String> expectedParams = getPostParametersFromRequest(expectedRequest); return testParameterEquivalency(incomingParams, expectedParams); } catch (UnsupportedEncodingException e) { logger.error("Caught exception " + e + " while decoding POST parameters"); } } return super.test(incomingRequest, expectedRequest); }
@Test public void testGetCharset() throws URISyntaxException { Multimap<String, String> headers = LinkedHashMultimap.create(); headers.put(HttpHeaders.CONTENT_TYPE, "text/html; charset=iso-8859-9"); RecordedHttpRequest recordedHttpRequest = new RecordedHttpRequest("GET", new URI("google.com"), headers, null); Assert.assertEquals(recordedHttpRequest.getCharset(), Charset.forName("iso-8859-9").toString()); }
private Map<String, String> getPostParametersFromRequest(RecordedHttpRequest request) throws UnsupportedEncodingException { RecordedHttpBody body = request.getHttpBody(); if (body instanceof RecordedEncodedHttpBody) { body = ((RecordedEncodedHttpBody) body).getDecodedBody(); } assert (body instanceof RecordedStringHttpBody); String content = ((RecordedStringHttpBody) body).getContent(); return HttpUtilities.stringToUrlParams(content, request.getCharset()); }
private RecordedHttpBody getBodyFromRequest(RecordedHttpRequest request) { RecordedHttpBody body = request.getHttpBody(); if (body instanceof RecordedEncodedHttpBody) { return ((RecordedEncodedHttpBody) body).getDecodedBody(); } else { return body; } } }
@Override public boolean test(RecordedHttpRequest incomingRequest, RecordedHttpRequest expectedRequest) { return _transform.transform(multimapToCommaSeparatedMap(incomingRequest.getHeaders())) .equals(_transform.transform(multimapToCommaSeparatedMap(expectedRequest.getHeaders()))); }
private RecordedHttpRequest createHttpRequest() throws IOException { _jsonParser.nextToken(); // HTTPREQUEST.FIELD_NAME validateRequiredField(SceneSerializationConstant.SCENE_TAG_HTTPREQUEST); _jsonParser.nextToken(); // HTTPREQUEST START_OBJECT String httpMethod = createHttpMethod(); URI uri = createUri(); //Create optional fields _jsonParser.nextToken(); // Move to next token Multimap<String, String> headers = createHeaders(); RecordedHttpBody recordedHttpBody = createHttpBody(); RecordedHttpRequest recordedHttpRequest = new RecordedHttpRequest(httpMethod, uri, headers, recordedHttpBody); //Check if reach to the end of object for http request if (!(_jsonParser.getCurrentName().equals(SceneSerializationConstant.SCENE_TAG_HTTPREQUEST) && _jsonParser.getCurrentToken() == JsonToken.END_OBJECT)) { _jsonParser.nextToken(); } return recordedHttpRequest; }