diff options
| -rw-r--r-- | README.adoc | 19 | ||||
| -rw-r--r-- | core/pom.xml | 72 | ||||
| -rw-r--r-- | core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterBenchmark.java | 34 | ||||
| -rw-r--r-- | core/src/test/java/eu/mulk/quarkus/googlecloud/jsonlogging/FormatterTest.java | 34 | ||||
| -rw-r--r-- | pom.xml | 7 | 
5 files changed, 152 insertions, 14 deletions
| diff --git a/README.adoc b/README.adoc index 6b479ca..7048262 100644 --- a/README.adoc +++ b/README.adoc @@ -446,3 +446,22 @@ Result:    }  }  ---- + + +== Development + +=== Running the Tests + +To run the **test suite**, run: + +[source,shell] +---- +$ mvn verify +---- + +To run the **benchmarks**, run: + +[source,shell] +---- +$ mvn verify -Pbenchmark +---- 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; +  }  } @@ -61,6 +61,7 @@ SPDX-License-Identifier: LGPL-3.0-or-later      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>      <compiler-plugin.version>3.13.0</compiler-plugin.version> +    <exec-maven-plugin.version>3.2.0</exec-maven-plugin.version>      <failsafe-plugin.version>${surefire-plugin.version}</failsafe-plugin.version>      <flatten-plugin.version>1.6.0</flatten-plugin.version>      <google-java-format.version>1.15.0</google-java-format.version> @@ -197,6 +198,12 @@ SPDX-License-Identifier: LGPL-3.0-or-later          </configuration>        </plugin> +      <plugin> +        <groupId>org.codehaus.mojo</groupId> +        <artifactId>exec-maven-plugin</artifactId> +        <version>${exec-maven-plugin.version}</version> +      </plugin> +      </plugins>    </build> | 
