diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index c67c56ee..f154c1fd 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -8,7 +8,7 @@ jobs: name: Java ${{ matrix.java }} strategy: matrix: - java: [8, 11, 12, 13, 14, 15, 16, 17] + java: [8, 11, 12, 13, 14, 15, 16, 17, 18] env: REPO_SLUG: ${{ github.repository }} BRANCH: ${{ github.head_ref }} diff --git a/junit4/junit4-runner/src/main/java/org/quickperf/junit4/QuickPerfJUnitRunner.java b/junit4/junit4-runner/src/main/java/org/quickperf/junit4/QuickPerfJUnitRunner.java index 0ad16cda..488e122b 100644 --- a/junit4/junit4-runner/src/main/java/org/quickperf/junit4/QuickPerfJUnitRunner.java +++ b/junit4/junit4-runner/src/main/java/org/quickperf/junit4/QuickPerfJUnitRunner.java @@ -81,9 +81,12 @@ public Statement methodInvoker(FrameworkMethod frameworkMethod, Object test) { private int findJUnit4AllocationOffset() { int allocationOffsetBeforeJava16 = findAllocationOffsetBeforeJava16(); JVM.Version jvmVersion = JVM.INSTANCE.version; - if(jvmVersion.isLessThanTo16()) { + if (jvmVersion.isLessThanTo16()) { return allocationOffsetBeforeJava16; } + if (jvmVersion.isGreaterThanOrEqualTo18()) { + return findAllocationOffsetFromJava18(); + } return allocationOffsetBeforeJava16 + 8; } @@ -100,6 +103,13 @@ private boolean junit4_13IsUsed() { return junit4Version.startsWith("4.13"); } + private int findAllocationOffsetFromJava18() { + if (junit4_13IsUsed()) { + return 56_768; + } + return 56_800; + } + @Override public Statement withBefores(FrameworkMethod frameworkMethod, Object testInstance, Statement statement) { diff --git a/junit5/junit5-extension/src/main/java/org/quickperf/junit5/QuickPerfTestExtension.java b/junit5/junit5-extension/src/main/java/org/quickperf/junit5/QuickPerfTestExtension.java index ac92d6b0..8cefaaec 100644 --- a/junit5/junit5-extension/src/main/java/org/quickperf/junit5/QuickPerfTestExtension.java +++ b/junit5/junit5-extension/src/main/java/org/quickperf/junit5/QuickPerfTestExtension.java @@ -56,8 +56,11 @@ public void beforeEach(ExtensionContext extensionContext) { private int findJunit5AllocationOffset() { JVM.Version jvmVersion = JVM.INSTANCE.version; + if(jvmVersion.isGreaterThanOrEqualTo18()) { + return 43_224; + } if(jvmVersion.isGreaterThanOrEqualTo16()) { - return 48; + return 48; } return 40; } diff --git a/jvm/jvm-core/src/main/java/org/quickperf/jvm/JVM.java b/jvm/jvm-core/src/main/java/org/quickperf/jvm/JVM.java index 81e36415..8f99bcb0 100644 --- a/jvm/jvm-core/src/main/java/org/quickperf/jvm/JVM.java +++ b/jvm/jvm-core/src/main/java/org/quickperf/jvm/JVM.java @@ -91,6 +91,10 @@ public boolean isGreaterThanOrEqualTo16() { return !is7() && !is8() && findJvmVersionAsInt() >= 16; } + public boolean isGreaterThanOrEqualTo18() { + return !is7() && !is8() && findJvmVersionAsInt() >= 18; + } + public boolean isLessThanTo16() { return !isGreaterThanOrEqualTo16(); } diff --git a/spring/junit4-spring-base-tests/src/test/java/org/quickperf/spring/AbstractJUnit4SpringTestBase.java b/spring/junit4-spring-base-tests/src/test/java/org/quickperf/spring/AbstractJUnit4SpringTestBase.java index 69b7ad98..3dc91779 100644 --- a/spring/junit4-spring-base-tests/src/test/java/org/quickperf/spring/AbstractJUnit4SpringTestBase.java +++ b/spring/junit4-spring-base-tests/src/test/java/org/quickperf/spring/AbstractJUnit4SpringTestBase.java @@ -22,6 +22,8 @@ public abstract class AbstractJUnit4SpringTestBase { boolean testEnabled = true; + boolean noHeapAllocationTestEnabled = true; + @Test public void a_test_throwing_an_assertion_error_and_a_performance_issue_should_fail() { @@ -78,7 +80,7 @@ public abstract class AbstractJUnit4SpringTestBase { @Test public void a_test_method_having_a_performance_property_not_respected_in_a_dedicated_jvm_should_fail() { - if(!testEnabled) { + if(!testEnabled || !noHeapAllocationTestEnabled) { return; } @@ -98,7 +100,7 @@ public abstract class AbstractJUnit4SpringTestBase { @Test public void a_test_method_allocating_and_annotated_with_no_allocation_should_fail() { - if(!testEnabled) { + if(!testEnabled || !noHeapAllocationTestEnabled) { return; } diff --git a/spring/junit4-spring5/src/test/java/org/quickperf/spring/JUnit4Spring5Test.java b/spring/junit4-spring5/src/test/java/org/quickperf/spring/JUnit4Spring5Test.java index aaf52870..74b18aeb 100644 --- a/spring/junit4-spring5/src/test/java/org/quickperf/spring/JUnit4Spring5Test.java +++ b/spring/junit4-spring5/src/test/java/org/quickperf/spring/JUnit4Spring5Test.java @@ -16,6 +16,7 @@ import org.junit.runner.RunWith; import org.quickperf.annotation.DisableQuickPerf; import org.quickperf.annotation.FunctionalIteration; +import org.quickperf.jvm.JVM; import org.quickperf.jvm.annotations.ExpectNoHeapAllocation; import org.quickperf.spring.database.ClassWithAFailingTestAndTransactionalTestExecutionListener; import org.quickperf.spring.junit4.QuickPerfSpringRunner; @@ -26,6 +27,11 @@ public class JUnit4Spring5Test extends AbstractJUnit4SpringTestBase { + { + JVM.Version jvmVersion = JVM.INSTANCE.version; + noHeapAllocationTestEnabled = !jvmVersion.isGreaterThanOrEqualTo18(); + } + private static class TestApplicationContextInitializer implements ApplicationContextInitializer { diff --git a/testng/testng-listener/src/main/java/org/quickperf/testng/QuickPerfTestNGListener.java b/testng/testng-listener/src/main/java/org/quickperf/testng/QuickPerfTestNGListener.java index bdfe1b35..41779ce4 100644 --- a/testng/testng-listener/src/main/java/org/quickperf/testng/QuickPerfTestNGListener.java +++ b/testng/testng-listener/src/main/java/org/quickperf/testng/QuickPerfTestNGListener.java @@ -29,6 +29,7 @@ import org.testng.IHookable; import org.testng.ITestNGMethod; import org.testng.ITestResult; +import org.testng.annotations.IFactoryAnnotation; import java.lang.reflect.Method; import java.util.Collection; @@ -85,6 +86,9 @@ private TestExecutionContext buildTestExecutionContext(ITestResult testResult) { private int findTestNGAllocationOffset() { JVM.Version jvmVersion = JVM.INSTANCE.version; + if(jvmVersion.isGreaterThanOrEqualTo18()) { + return 56_800; + } if(jvmVersion.isGreaterThanOrEqualTo16()) { return 80; }