test: Add benchmark with many log entry fields.
Change-Id: I9ef4ff2bc0ccd8c0b674b9e8cd0c1e93fbe445ff
diff --git a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java
index 1a1c17c..4900a01 100644
--- a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java
+++ b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java
@@ -13,12 +13,14 @@
private ExtLogRecord simpleLogRecord;
private ExtLogRecord structuredLogRecord;
+ private ExtLogRecord massivelyStructuredLogRecord;
private Formatter formatter;
@Setup
public void setup() {
simpleLogRecord = FormatterTest.makeSimpleRecord();
structuredLogRecord = FormatterTest.makeStructuredRecord();
+ massivelyStructuredLogRecord = FormatterTest.makeMassivelyStructuredRecord();
formatter = new Formatter(List.of(), List.of());
}
@@ -31,4 +33,10 @@
public void structuredLogRecord(Blackhole blackhole) {
blackhole.consume(formatter.format(structuredLogRecord));
}
+
+ @Benchmark
+ public void massivelyStructuredLogRecord(Blackhole blackhole) {
+ var f = formatter.format(massivelyStructuredLogRecord);
+ blackhole.consume(f);
+ }
}
diff --git a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java
index 91cc8e4..b755230 100644
--- a/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java
+++ b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java
@@ -93,4 +93,57 @@
});
return logRecord;
}
+
+ @Test
+ void massivelyStructuredRecord() {
+ var logRecord = makeMassivelyStructuredRecord();
+
+ var formatter = new Formatter(List.of(), List.of());
+ var formattingResult = formatter.format(logRecord);
+ assertLinesMatch(
+ List.of(
+ "\\{"
+ + "\"message\":\"Hello, world!\","
+ + "\"severity\":\"INFO\","
+ + "\"timestamp\":\\{\"seconds\":\\d+,\"nanos\":\\d+\\},"
+ + "\"logging.googleapis.com/sourceLocation\":"
+ + "\\{\"file\":\"ReflectionUtils.java\","
+ + "\"line\":\"\\d+\","
+ + "\"function\":\"org.junit.platform.commons.util.ReflectionUtils.invokeMethod\""
+ + "\\},"
+ + "\"int-0\":0,\"int-1\":1,\"int-2\":2,\"int-3\":3,\"int-4\":4,\"int-5\":5,\"int-6\":6,\"int-7\":7,\"int-8\":8,\"int-9\":9,"
+ + "\"double-10\":10.0,\"double-11\":11.0,\"double-12\":12.0,\"double-13\":13.0,\"double-14\":14.0,"
+ + "\"double-15\":15.0,\"double-16\":16.0,\"double-17\":17.0,\"double-18\":18.0,\"double-19\":19.0,"
+ + "\"boolean-20\":true,\"boolean-21\":false,\"boolean-22\":true,\"boolean-23\":false,\"boolean-24\":true,"
+ + "\"boolean-25\":false,\"boolean-26\":true,\"boolean-27\":false,\"boolean-28\":true,\"boolean-29\":false,"
+ + "\"string-30\":\"30\",\"string-31\":\"31\",\"string-32\":\"32\",\"string-33\":\"33\",\"string-34\":\"34\","
+ + "\"string-35\":\"35\",\"string-36\":\"36\",\"string-37\":\"37\",\"string-38\":\"38\",\"string-39\":\"39\""
+ + "\\}\n"),
+ List.of(formattingResult));
+ }
+
+ static ExtLogRecord makeMassivelyStructuredRecord() {
+ var logRecord = FormatterTest.makeSimpleRecord();
+ logRecord.setParameters(
+ new Object[] {
+ (StructuredParameter)
+ () -> {
+ var b = Json.createObjectBuilder();
+ for (int i = 0; i < 10; i++) {
+ b.add("int-" + i, i);
+ }
+ for (int i = 10; i < 20; i++) {
+ b.add("double-" + i, (double) i);
+ }
+ for (int i = 20; i < 30; i++) {
+ b.add("boolean-" + i, i % 2 == 0);
+ }
+ for (int i = 30; i < 40; i++) {
+ b.add("string-" + i, String.valueOf(i));
+ }
+ return b;
+ }
+ });
+ return logRecord;
+ }
}