summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2024-06-23 16:24:11 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2024-06-23 16:24:11 +0200
commit47df8be6dc1e0927a7b3d690100445865dfa8675 (patch)
tree06587663e86e296156872d331e7aa1be69624884 /core
parentb69b3017699b960ff5133b8ec34bff786bec0f77 (diff)
test: Add benchmarks.
The benchmarks can be run using 'mvn verify -Pbenchmark'. Change-Id: I13058f52bea77aa3cb4f1967126c28e1e98d1838
Diffstat (limited to 'core')
-rw-r--r--core/pom.xml72
-rw-r--r--core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java34
-rw-r--r--core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java34
3 files changed, 126 insertions, 14 deletions
diff --git a/core/pom.xml b/core/pom.xml
index a75acd5..38f7ea5 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -55,12 +55,38 @@ SPDX-License-Identifier: LGPL-3.0-or-later
<version>5.10.2</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.openjdk.jmh</groupId>
+ <artifactId>jmh-core</artifactId>
+ <version>1.35</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.openjdk.jmh</groupId>
+ <artifactId>jmh-generator-annprocess</artifactId>
+ <version>1.35</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<plugins>
<plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <annotationProcessorPaths>
+ <path>
+ <groupId>org.openjdk.jmh</groupId>
+ <artifactId>jmh-generator-annprocess</artifactId>
+ <version>1.35</version>
+ </path>
+ </annotationProcessorPaths>
+ </configuration>
+ </plugin>
+
+ <plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
@@ -73,10 +99,54 @@ SPDX-License-Identifier: LGPL-3.0-or-later
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
- <version>3.2.5</version>
</plugin>
</plugins>
</build>
+ <profiles>
+
+ <profile>
+ <id>benchmark</id>
+
+ <build>
+ <plugins>
+
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skipTests>true</skipTests>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>run-benchmarks</id>
+ <phase>integration-test</phase>
+ <goals>
+ <goal>exec</goal>
+ </goals>
+ <configuration>
+ <classpathScope>test</classpathScope>
+ <executable>java</executable>
+ <arguments>
+ <argument>-classpath</argument>
+ <classpath />
+ <argument>org.openjdk.jmh.Main</argument>
+ <argument>.*</argument>
+ </arguments>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
+ </plugins>
+ </build>
+ </profile>
+
+ </profiles>
+
</project>
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
new file mode 100644
index 0000000..1a1c17c
--- /dev/null
+++ b/core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java
@@ -0,0 +1,34 @@
+package eu.mulk.quarkus.googlecloud.jsonlogging;
+
+import java.util.List;
+import org.jboss.logmanager.ExtLogRecord;
+import org.openjdk.jmh.annotations.*;
+import org.openjdk.jmh.infra.Blackhole;
+
+@Warmup(iterations = 5, time = 1)
+@Measurement(iterations = 10, time = 1)
+@Fork(value = 1)
+@State(org.openjdk.jmh.annotations.Scope.Benchmark)
+public class FormatterBenchmark {
+
+ private ExtLogRecord simpleLogRecord;
+ private ExtLogRecord structuredLogRecord;
+ private Formatter formatter;
+
+ @Setup
+ public void setup() {
+ simpleLogRecord = FormatterTest.makeSimpleRecord();
+ structuredLogRecord = FormatterTest.makeStructuredRecord();
+ formatter = new Formatter(List.of(), List.of());
+ }
+
+ @Benchmark
+ public void simpleLogRecord(Blackhole blackhole) {
+ blackhole.consume(formatter.format(simpleLogRecord));
+ }
+
+ @Benchmark
+ public void structuredLogRecord(Blackhole blackhole) {
+ blackhole.consume(formatter.format(structuredLogRecord));
+ }
+}
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 49cda39..91cc8e4 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
@@ -1,20 +1,19 @@
package eu.mulk.quarkus.googlecloud.jsonlogging;
+import static org.junit.jupiter.api.Assertions.assertLinesMatch;
+
import jakarta.json.Json;
+import java.util.Collection;
+import java.util.List;
import org.jboss.logmanager.ExtLogRecord;
import org.jboss.logmanager.Level;
import org.junit.jupiter.api.Test;
-import java.util.Collection;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertLinesMatch;
-
class FormatterTest {
@Test
void simpleRecord() {
- var logRecord = new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName());
+ var logRecord = makeSimpleRecord();
var formatter = new Formatter(List.of(), List.of());
var formattingResult = formatter.format(logRecord);
@@ -34,6 +33,10 @@ class FormatterTest {
List.of(formattingResult));
}
+ static ExtLogRecord makeSimpleRecord() {
+ return new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName());
+ }
+
@Test
void structuredRecord() {
var parameterProvider =
@@ -55,13 +58,7 @@ class FormatterTest {
}
};
- var logRecord = new ExtLogRecord(Level.INFO, "Hello, world!", FormatterTest.class.getName());
- logRecord.setParameters(
- new Object[] {
- (StructuredParameter)
- () -> Json.createObjectBuilder().add("one", 1).add("two", 2.0).add("yes", true),
- Label.of("a", "b")
- });
+ var logRecord = makeStructuredRecord();
var formatter = new Formatter(List.of(parameterProvider), List.of(labelProvider));
var formattingResult = formatter.format(logRecord);
@@ -85,4 +82,15 @@ class FormatterTest {
+ "\\}\n"),
List.of(formattingResult));
}
+
+ static ExtLogRecord makeStructuredRecord() {
+ var logRecord = makeSimpleRecord();
+ logRecord.setParameters(
+ new Object[] {
+ (StructuredParameter)
+ () -> Json.createObjectBuilder().add("one", 1).add("two", 2.0).add("yes", true),
+ Label.of("a", "b")
+ });
+ return logRecord;
+ }
}