16 package org.openkilda.testing.tools;
18 import static java.lang.String.format;
20 import com.fasterxml.jackson.databind.ObjectMapper;
21 import com.fasterxml.jackson.databind.SerializationFeature;
22 import com.google.common.base.Strings;
23 import org.apache.commons.io.IOUtils;
24 import org.apache.commons.lang3.StringUtils;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27 import org.springframework.http.HttpRequest;
28 import org.springframework.http.client.ClientHttpRequestExecution;
29 import org.springframework.http.client.ClientHttpRequestInterceptor;
30 import org.springframework.http.client.ClientHttpResponse;
32 import java.io.BufferedReader;
33 import java.io.IOException;
34 import java.io.InputStreamReader;
40 public ClientHttpResponse
intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
42 traceRequest(request, body);
43 ClientHttpResponse response = execution.execute(request, body);
44 traceResponse(response);
48 private void traceRequest(HttpRequest request, byte[] body)
throws IOException {
49 log.debug(
format(
"\n%1$s request begin %1$s\n%2$s%1$s request end %1$s",
50 Strings.repeat(
"=", 20), genereateCurl(request, body)));
53 private void traceResponse(ClientHttpResponse response)
throws IOException {
54 StringBuilder inputStringBuilder =
new StringBuilder();
55 BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(response.getBody(),
"UTF-8"));
56 inputStringBuilder.append(IOUtils.toString(bufferedReader));
57 log.debug(
format(
"\n%s response begin %1$s\n" 58 +
"Status code : %s\nStatus text : %s\nHeaders : %s\nResponse body: %s\n" 59 +
"%1$s response end %1$s", Strings.repeat(
"=", 20),
60 response.getStatusCode(), response.getStatusText(), response.getHeaders(),
61 toJson(inputStringBuilder.toString())));
64 private String toJson(String str) {
66 ObjectMapper mapper =
new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
67 Object o = mapper.readValue(str, Object.class);
68 return mapper.writeValueAsString(o);
69 }
catch (Exception e) {
74 private String genereateCurl(HttpRequest request, byte[] payload)
throws IOException {
75 StringBuilder sb =
new StringBuilder();
76 sb.append(
format(
"curl -X %s \\\n", request.getMethodValue()));
77 sb.append(request.getURI().toString()).append(
" \\\n");
78 request.getHeaders().forEach((k, v) -> sb.append(
format(
"-H '%s: %s' \\\n", k,
79 StringUtils.substringBetween(v.toString(),
"[",
"]"))));
80 String body =
new String(payload,
"UTF-8");
81 if (!StringUtils.isEmpty(body)) {
82 sb.append(
format(
"-d '%s' \n", body));