Skip to content

Commit

Permalink
fix: use HttpHeadersSerializer to serialize HttpHeaders
Browse files Browse the repository at this point in the history
  • Loading branch information
Marc authored and gaetanmaisse committed Jun 8, 2022
1 parent 79d7374 commit 7d31997
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 11 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@

<groupId>io.gravitee.reporter</groupId>
<artifactId>gravitee-reporter-file</artifactId>
<version>2.5.1</version>
<version>2.5.2-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Gravitee.io APIM - Reporter - File</name>

<properties>
<gravitee-bom.version>2.5</gravitee-bom.version>
<gravitee-gateway-api.version>1.31.0</gravitee-gateway-api.version>
<gravitee-reporter-api.version>1.22.0</gravitee-reporter-api.version>
<gravitee-reporter-api.version>1.23.0</gravitee-reporter-api.version>
<gravitee-common.version>1.24.0</gravitee-common.version>
<gravitee-node.version>1.15.1</gravitee-node.version>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import io.gravitee.gateway.api.http.HttpHeaders;
import io.gravitee.reporter.api.Reportable;
import io.gravitee.reporter.api.common.Request;
import io.gravitee.reporter.api.common.Response;
Expand All @@ -26,6 +28,7 @@
import io.gravitee.reporter.api.health.Step;
import io.gravitee.reporter.api.jackson.FieldFilterMixin;
import io.gravitee.reporter.api.jackson.FieldFilterProvider;
import io.gravitee.reporter.api.jackson.HttpHeadersSerializer;
import io.gravitee.reporter.file.formatter.AbstractFormatter;
import io.vertx.core.buffer.Buffer;

Expand All @@ -47,6 +50,10 @@ public JsonFormatter(final Rules rules) {
mapper.setFilterProvider(new FieldFilterProvider(rules));
}

SimpleModule module = new SimpleModule();
module.addSerializer(HttpHeaders.class, new HttpHeadersSerializer());
mapper.registerModule(module);

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@
*/
package io.gravitee.reporter.file.formatter.json;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.gravitee.common.http.HttpStatusCode;
import io.gravitee.common.util.Maps;
import io.gravitee.common.utils.UUID;
import io.gravitee.gateway.api.http.HttpHeaders;
import io.gravitee.reporter.api.common.Request;
import io.gravitee.reporter.api.common.Response;
import io.gravitee.reporter.api.configuration.Rules;
Expand All @@ -31,7 +35,6 @@
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

/**
Expand Down Expand Up @@ -95,7 +98,7 @@ public void shouldExcludeAllFields() throws JsonProcessingException {
Buffer payload = formatter.format(metrics);

JsonNode node = mapper.readTree(payload.toString());
Assert.assertEquals(0, node.size());
assertEquals(0, node.size());
}

@Test
Expand Down Expand Up @@ -133,7 +136,7 @@ public void shouldExcludeAllFields_butIncludeOneField() throws JsonProcessingExc
Buffer payload = formatter.format(metrics);

JsonNode node = mapper.readTree(payload.toString());
Assert.assertEquals(1, node.size());
assertEquals(1, node.size());
Assert.assertTrue(node.has("api"));
}

Expand All @@ -160,7 +163,7 @@ public void shouldExcludeNestedFields() throws JsonProcessingException {
Buffer payload = formatter.format(log);

JsonNode node = mapper.readTree(payload.toString());
Assert.assertEquals(4, node.size());
assertEquals(4, node.size());
Assert.assertFalse(node.has("clientRequest"));
}

Expand All @@ -186,13 +189,13 @@ public void shouldExcludeNestedProperty() throws JsonProcessingException {

Buffer payload = formatter.format(log);
JsonNode node = mapper.readTree(payload.toString());
Assert.assertEquals(5, node.size());
assertEquals(5, node.size());
Assert.assertTrue(node.has("clientRequest"));
Assert.assertEquals(0, node.get("clientRequest").size());
assertEquals(0, node.get("clientRequest").size());
}

@Test
public void shouldRenameNestedPrgetExcludeFieldsoperty() throws JsonProcessingException {
public void shouldRenameNestedProperty() throws JsonProcessingException {
Rules rules = new Rules();
rules.setRenameFields(Maps.<String, String>builder().put("clientRequest.uri", "path").build());

Expand All @@ -213,10 +216,101 @@ public void shouldRenameNestedPrgetExcludeFieldsoperty() throws JsonProcessingEx

Buffer payload = formatter.format(log);
JsonNode node = mapper.readTree(payload.toString());
Assert.assertEquals(5, node.size());
assertEquals(5, node.size());
Assert.assertTrue(node.has("clientRequest"));
Assert.assertEquals(1, node.get("clientRequest").size());
assertEquals(1, node.get("clientRequest").size());
Assert.assertFalse(node.get("clientRequest").has("uri"));
Assert.assertTrue(node.get("clientRequest").has("path"));
}

@Test
public void shouldSerializeClientRequestHeaders() throws JsonProcessingException {
JsonFormatter<Log> formatter = new JsonFormatter<>(null);

Log log = new Log(System.currentTimeMillis());
Request clientRequest = new Request();
HttpHeaders httpHeaders = HttpHeaders.create();
httpHeaders.add("header1", "value1");
httpHeaders.add("header2", "value2");
httpHeaders.add("header1", "value3");
clientRequest.setHeaders(httpHeaders);
log.setClientRequest(clientRequest);

Buffer payload = formatter.format(log);

JsonNode node = mapper.readTree(payload.toString());

assertTrue(node.has("clientRequest"));
assertTrue(node.get("clientRequest").has("headers"));
assertEquals("{\"header1\":[\"value1\",\"value3\"],\"header2\":[\"value2\"]}", node.get("clientRequest").get("headers").toString());
}

@Test
public void shouldSerializeProxyRequestHeaders() throws JsonProcessingException {
JsonFormatter<Log> formatter = new JsonFormatter<>(null);

Log log = new Log(System.currentTimeMillis());
Request proxyRequest = new Request();
HttpHeaders httpHeaders = HttpHeaders.create();
httpHeaders.add("header1", "value1");
httpHeaders.add("header2", "value2");
httpHeaders.add("header1", "value3");
proxyRequest.setHeaders(httpHeaders);
log.setProxyRequest(proxyRequest);

Buffer payload = formatter.format(log);

JsonNode node = mapper.readTree(payload.toString());

assertTrue(node.has("proxyRequest"));
assertTrue(node.get("proxyRequest").has("headers"));
assertEquals("{\"header1\":[\"value1\",\"value3\"],\"header2\":[\"value2\"]}", node.get("proxyRequest").get("headers").toString());
}

@Test
public void shouldSerializeClientResponseHeaders() throws JsonProcessingException {
JsonFormatter<Log> formatter = new JsonFormatter<>(null);

Log log = new Log(System.currentTimeMillis());
Response clientResponse = new Response();
HttpHeaders httpHeaders = HttpHeaders.create();
httpHeaders.add("header1", "value1");
httpHeaders.add("header2", "value2");
httpHeaders.add("header1", "value3");
clientResponse.setHeaders(httpHeaders);
log.setClientResponse(clientResponse);

Buffer payload = formatter.format(log);

JsonNode node = mapper.readTree(payload.toString());

assertTrue(node.has("clientResponse"));
assertTrue(node.get("clientResponse").has("headers"));
assertEquals(
"{\"header1\":[\"value1\",\"value3\"],\"header2\":[\"value2\"]}",
node.get("clientResponse").get("headers").toString()
);
}

@Test
public void shouldSerializeProxyResponseHeaders() throws JsonProcessingException {
JsonFormatter<Log> formatter = new JsonFormatter<>(null);

Log log = new Log(System.currentTimeMillis());
Response proxyResponse = new Response();
HttpHeaders httpHeaders = HttpHeaders.create();
httpHeaders.add("header1", "value1");
httpHeaders.add("header2", "value2");
httpHeaders.add("header1", "value3");
proxyResponse.setHeaders(httpHeaders);
log.setProxyResponse(proxyResponse);

Buffer payload = formatter.format(log);

JsonNode node = mapper.readTree(payload.toString());

assertTrue(node.has("proxyResponse"));
assertTrue(node.get("proxyResponse").has("headers"));
assertEquals("{\"header1\":[\"value1\",\"value3\"],\"header2\":[\"value2\"]}", node.get("proxyResponse").get("headers").toString());
}
}

0 comments on commit 7d31997

Please sign in to comment.