From 325020d637cb254345d7dc0390caafea201312f7 Mon Sep 17 00:00:00 2001 From: Volodymyr Kravets Date: Wed, 24 Jul 2024 14:37:53 +0300 Subject: [PATCH 1/2] chore: add java21 support --- .github/workflows/build_and_test.yml | 121 ++---- build.gradle | 3 +- gradle/verification-metadata.xml | 387 ++++++++---------- gradle/wrapper/gradle-wrapper.properties | 4 +- rskj-core/build.gradle | 27 +- .../main/java/co/rsk/config/NodeCliFlags.java | 2 +- .../co/rsk/util/PreflightChecksUtils.java | 18 +- .../org/ethereum/config/SystemProperties.java | 6 +- .../java/co/rsk/util/MaxSizeHashMapTest.java | 41 +- .../co/rsk/util/PreflightChecksUtilsTest.java | 64 +-- 10 files changed, 309 insertions(+), 364 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 6b567ccacc0..d6c37dd5ab7 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -16,11 +16,12 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup Java JDK - uses: actions/setup-java@v3 + - name: Setup Java & Gradle + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: 'gradle' - name: Verify files run: | @@ -28,21 +29,17 @@ jobs: gpg2 --verify SHA256SUMS.asc && sha256sum --check SHA256SUMS.asc - uses: actions/cache@v4 - name: Cache Gradle - id: cache-gradle + name: Cache Gradle Wrapper + id: cache-gradle-wrapper with: path: | - .gradle/caches - gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Get gradle wrapper and build dependencies - if: steps.cache-gradle.outputs.cache-hit != 'true' + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + + - name: Get Gradle wrapper + if: steps.cache-gradle-wrapper.outputs.cache-hit != 'true' run: | ./configure.sh - ./gradlew --no-daemon dependencies - name: Build run: | @@ -63,29 +60,20 @@ jobs: with: fetch-depth: 0 - - name: Setup Java JDK - uses: actions/setup-java@v3 + - name: Setup Java & Gradle + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: 'gradle' - - uses: actions/cache@v4 - name: Restore Gradle cache - id: cache-gradle + - uses: actions/cache/restore@v4 + name: Restore Gradle Wrapper with: path: | - .gradle/caches - gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Get gradle wrapper and build dependencies - run: | - if [ ! -f gradle/wrapper/gradle-wrapper.jar ]; then - ./configure.sh - ./gradlew --no-daemon dependencies - fi + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + fail-on-cache-miss: true - name: Download build artifacts uses: actions/download-artifact@v4 @@ -192,28 +180,20 @@ jobs: run: | node --unhandled-rejections=strict generateBtcBlocks.js - - name: Setup Java JDK - uses: actions/setup-java@v3 + - name: Setup Java & Gradle + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: 'gradle' - - uses: actions/cache@v4 - name: Cache Gradle - id: cache-gradle + - uses: actions/cache/restore@v4 + name: Restore Gradle Wrapper with: path: | - .gradle/caches - gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Get gradle wrapper and build dependencies - if: steps.cache-gradle.outputs.cache-hit != 'true' - run: | - ./configure.sh - ./gradlew --no-daemon dependencies + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + fail-on-cache-miss: true - name: Download build artifacts uses: actions/download-artifact@v4 @@ -253,28 +233,20 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Setup Java JDK - uses: actions/setup-java@v3 + - name: Setup Java & Gradle + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: 'gradle' - - uses: actions/cache@v4 - name: Cache Gradle - id: cache-gradle + - uses: actions/cache/restore@v4 + name: Restore Gradle Wrapper with: path: | - .gradle/caches - gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Get gradle wrapper and build dependencies - if: steps.cache-gradle.outputs.cache-hit != 'true' - run: | - ./configure.sh - ./gradlew --no-daemon dependencies + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + fail-on-cache-miss: true - name: Run tests run: | @@ -295,32 +267,25 @@ jobs: rskj-core/build/reports/ integration-tests: + needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Setup Java JDK - uses: actions/setup-java@v3 + - name: Setup Java & Gradle + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' + cache: 'gradle' - - uses: actions/cache@v4 - name: Cache Gradle - id: cache-gradle + - uses: actions/cache/restore@v4 + name: Restore Gradle Wrapper with: path: | - .gradle/caches - gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Get gradle wrapper and build dependencies - if: steps.cache-gradle.outputs.cache-hit != 'true' - run: | - ./configure.sh - ./gradlew --no-daemon dependencies + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + fail-on-cache-miss: true - name: Run tests run: | diff --git a/build.gradle b/build.gradle index 87a3e53a0f3..9a423cc072c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id "org.sonarqube" version "2.7.1" + id "org.sonarqube" version "5.1.0.4882" } subprojects { @@ -7,4 +7,3 @@ subprojects { group = 'co.rsk' version = config.modifier?.trim() ? config.versionNumber + "-" + config.modifier : config.versionNumber } - diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 80197a80f27..08400597a2e 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1,5 +1,5 @@ - + true false @@ -658,25 +658,25 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + @@ -890,41 +890,41 @@ - - - + + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + @@ -980,6 +980,14 @@ + + + + + + + + @@ -996,14 +1004,6 @@ - - - - - - - - @@ -1012,14 +1012,6 @@ - - - - - - - - @@ -1028,127 +1020,97 @@ - - - - - - - - - - - - - - - - + + + - - - - + + - - - + + + - - - - - - + + + - - - - + + - - - + + + - - + + - - - + + + - - - - - - - + + - - - - - - + + + - - - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + @@ -1175,41 +1137,46 @@ - - - + + + - - + + - - + + + + + + + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + @@ -1233,12 +1200,12 @@ - - - + + + - - + + @@ -1246,12 +1213,9 @@ - - - - - - + + + @@ -1262,12 +1226,12 @@ - - - + + + - - + + @@ -1278,12 +1242,9 @@ - - - - - - + + + @@ -1294,12 +1255,12 @@ - - - + + + - - + + @@ -1310,6 +1271,14 @@ + + + + + + + + @@ -1355,35 +1324,35 @@ - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41300f2ff9f..6ccd39c0b61 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,6 +2,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip -distributionSha256Sum=29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionSha256Sum=9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c name=RskJ diff --git a/rskj-core/build.gradle b/rskj-core/build.gradle index 12d319362dd..c807b21457e 100644 --- a/rskj-core/build.gradle +++ b/rskj-core/build.gradle @@ -24,7 +24,7 @@ testing { suites { integrationTest(JvmTestSuite) { dependencies { - implementation project + implementation project() } } } @@ -150,16 +150,17 @@ ext { ] testLibVersions = [ - junitVer : '5.8.1', - junitSuiteVer : '1.9.0', - mockitoVer : '4.6.1', - awaitilityVer : '4.2.0', - commonsIoVer : '2.11.0', - commonsCodecVer: '1.15', - jacksonVer : '2.15.4', - okhttpWsVer : '2.7.5', - - rskLllVer : '0.0.2', + junitVer : '5.10.3', + junitSuiteVer : '1.10.3', + mockitoInlineVer : '5.2.0', + mockitoJupiterVer : '5.12.0', + awaitilityVer : '4.2.0', + commonsIoVer : '2.11.0', + commonsCodecVer : '1.15', + jacksonVer : '2.15.4', + okhttpWsVer : '2.7.5', + + rskLllVer : '0.0.2', ] jmhLibVersions = [ @@ -171,8 +172,8 @@ ext { junitLib : "org.junit.jupiter:junit-jupiter-engine:${testLibVersions.junitVer}", junitParams : "org.junit.jupiter:junit-jupiter-params:${testLibVersions.junitVer}", junitSuite : "org.junit.platform:junit-platform-suite:${testLibVersions.junitSuiteVer}", - mockitoLib : "org.mockito:mockito-inline:${testLibVersions.mockitoVer}", - mockitoJupiter : "org.mockito:mockito-junit-jupiter:${testLibVersions.mockitoVer}", + mockitoLib : "org.mockito:mockito-inline:${testLibVersions.mockitoInlineVer}", + mockitoJupiter : "org.mockito:mockito-junit-jupiter:${testLibVersions.mockitoJupiterVer}", awaitilityLib : "org.awaitility:awaitility:${testLibVersions.awaitilityVer}", commonsIoLib : "commons-io:commons-io:${testLibVersions.commonsIoVer}", commonsCodecLib : "commons-codec:commons-codec:${testLibVersions.commonsCodecVer}", diff --git a/rskj-core/src/main/java/co/rsk/config/NodeCliFlags.java b/rskj-core/src/main/java/co/rsk/config/NodeCliFlags.java index f1f05d598d5..a485d770ebc 100644 --- a/rskj-core/src/main/java/co/rsk/config/NodeCliFlags.java +++ b/rskj-core/src/main/java/co/rsk/config/NodeCliFlags.java @@ -31,7 +31,7 @@ public enum NodeCliFlags implements CliArg { DB_IMPORT("import", SystemProperties.PROPERTY_DB_IMPORT, true), VERIFY_CONFIG("verify-config", SystemProperties.PROPERTY_BC_VERIFY, true), PRINT_SYSTEM_INFO("print-system-info", SystemProperties.PROPERTY_PRINT_SYSTEM_INFO, true), - SKIP_JAVA_CHECK("skip-java-check", SystemProperties.PROPERTY_SKIP_JAVA_VERSION_CHECK, false), + SKIP_JAVA_CHECK("skip-java-check", SystemProperties.PROPERTY_CHECK_JAVA_VERSION, false), NETWORK_TESTNET("testnet", SystemProperties.PROPERTY_BC_CONFIG_NAME, "testnet"), NETWORK_REGTEST("regtest", SystemProperties.PROPERTY_BC_CONFIG_NAME, "regtest"), NETWORK_DEVNET("devnet", SystemProperties.PROPERTY_BC_CONFIG_NAME, "devnet"), diff --git a/rskj-core/src/main/java/co/rsk/util/PreflightChecksUtils.java b/rskj-core/src/main/java/co/rsk/util/PreflightChecksUtils.java index d33787e6815..d2e65891c8e 100644 --- a/rskj-core/src/main/java/co/rsk/util/PreflightChecksUtils.java +++ b/rskj-core/src/main/java/co/rsk/util/PreflightChecksUtils.java @@ -1,13 +1,15 @@ package co.rsk.util; import co.rsk.RskContext; -import co.rsk.config.NodeCliFlags; import com.google.common.annotations.VisibleForTesting; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; +import java.util.Collections; +import java.util.Set; +import java.util.TreeSet; /** * Created by Nazaret GarcĂ­a on 21/01/2021 @@ -25,7 +27,9 @@ public class PreflightChecksUtils { private static final Logger logger = LoggerFactory.getLogger(PreflightChecksUtils.class); - private static final int[] SUPPORTED_JAVA_VERSIONS = {17}; + public static final Set SUPPORTED_JAVA_VERSIONS = Collections.unmodifiableSet( + new TreeSet<>(Arrays.asList(17, 21)) + ); private final RskContext rskContext; @@ -41,10 +45,10 @@ public PreflightChecksUtils(RskContext rskContext) { void checkSupportedJavaVersion() throws PreflightCheckException { String javaVersion = getJavaVersion(); - int intJavaVersion = getIntJavaVersion(javaVersion); + int majorJavaVersion = getMajorJavaVersion(javaVersion); - if (Arrays.stream(SUPPORTED_JAVA_VERSIONS).noneMatch(v -> intJavaVersion == v)) { - String errorMessage = String.format("Invalid Java Version '%s'. Supported versions: %s", intJavaVersion, StringUtils.join(SUPPORTED_JAVA_VERSIONS, ' ')); + if (!SUPPORTED_JAVA_VERSIONS.contains(majorJavaVersion)) { + String errorMessage = String.format("Invalid Java Version '%s'. Supported versions: %s", majorJavaVersion, StringUtils.join(SUPPORTED_JAVA_VERSIONS, ", ")); logger.error(errorMessage); throw new PreflightCheckException(errorMessage); } @@ -63,7 +67,7 @@ String getJavaVersion() { * @return the Java version as an int value (8, 9, etc.) */ @VisibleForTesting - int getIntJavaVersion(String version) { + int getMajorJavaVersion(String version) { if (version.startsWith("1.")) { version = version.substring(2); } @@ -83,7 +87,7 @@ int getIntJavaVersion(String version) { } public void runChecks() throws PreflightCheckException { - if (!rskContext.getCliArgs().getFlags().contains(NodeCliFlags.SKIP_JAVA_CHECK)) { + if (rskContext.getRskSystemProperties().shouldCheckJavaVersion()) { checkSupportedJavaVersion(); } } diff --git a/rskj-core/src/main/java/org/ethereum/config/SystemProperties.java b/rskj-core/src/main/java/org/ethereum/config/SystemProperties.java index 26e97fcfc94..69493f096b8 100644 --- a/rskj-core/src/main/java/org/ethereum/config/SystemProperties.java +++ b/rskj-core/src/main/java/org/ethereum/config/SystemProperties.java @@ -101,7 +101,7 @@ public abstract class SystemProperties { public static final String PROPERTY_PRINT_SYSTEM_INFO = "system.printInfo"; - public static final String PROPERTY_SKIP_JAVA_VERSION_CHECK = "system.checkJavaVersion"; + public static final String PROPERTY_CHECK_JAVA_VERSION = "system.checkJavaVersion"; public static final String PROPERTY_PERSIST_STATES_CACHE_SNAPSHOT = "cache.states.persist-snapshot"; public static final String PROPERTY_PERSIST_BLOOMS_CACHE_SNAPSHOT = "cache.blooms.persist-snapshot"; @@ -592,8 +592,8 @@ public boolean shouldPrintSystemInfo() { return getBoolean(PROPERTY_PRINT_SYSTEM_INFO, false); } - public boolean shouldSkipJavaVersionCheck() { - return getBoolean(PROPERTY_SKIP_JAVA_VERSION_CHECK, false); + public boolean shouldCheckJavaVersion() { + return getBoolean(PROPERTY_CHECK_JAVA_VERSION, true); } public boolean shouldPersistStatesCacheSnapshot() { diff --git a/rskj-core/src/test/java/co/rsk/util/MaxSizeHashMapTest.java b/rskj-core/src/test/java/co/rsk/util/MaxSizeHashMapTest.java index 996117831f8..f5fe89e9ebe 100644 --- a/rskj-core/src/test/java/co/rsk/util/MaxSizeHashMapTest.java +++ b/rskj-core/src/test/java/co/rsk/util/MaxSizeHashMapTest.java @@ -1,36 +1,39 @@ +/* + * This file is part of RskJ + * Copyright (C) 2019 RSK Labs Ltd. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + package co.rsk.util; -import org.ethereum.TestUtils; import org.junit.jupiter.api.Test; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; class MaxSizeHashMapTest { @Test - void maxSizeMap_Test() { - int maxSize = 50_000; + void maxSizeMapTest() { + int maxSize = 10; Map maxSizeMap = new MaxSizeHashMap<>(maxSize, true); - Object[] table = TestUtils.getInternalState(maxSizeMap, "table"); - assertNull(table); - for(int i=0; i < maxSize/2 ; i++) { - maxSizeMap.put(i, i); - } - table = TestUtils.getInternalState(maxSizeMap, "table"); - assertEquals(65_536, table.length); - for(int i=maxSize/2; i < maxSize ; i++) { - maxSizeMap.put(i, i); - } - table = TestUtils.getInternalState(maxSizeMap, "table"); - assertEquals(131_072, table.length); - for(int i=maxSize; i < maxSize + maxSize ; i++) { + for(int i=0; i < 2*maxSize ; i++) { maxSizeMap.put(i, i); } - table = TestUtils.getInternalState(maxSizeMap, "table"); - assertEquals(131_072, table.length); + assertEquals(maxSize, maxSizeMap.size()); } } diff --git a/rskj-core/src/test/java/co/rsk/util/PreflightChecksUtilsTest.java b/rskj-core/src/test/java/co/rsk/util/PreflightChecksUtilsTest.java index fb26da48228..a370b9c83a4 100644 --- a/rskj-core/src/test/java/co/rsk/util/PreflightChecksUtilsTest.java +++ b/rskj-core/src/test/java/co/rsk/util/PreflightChecksUtilsTest.java @@ -1,13 +1,16 @@ package co.rsk.util; import co.rsk.RskContext; +import org.apache.commons.lang3.StringUtils; import org.ethereum.util.RskTestContext; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.nio.file.Path; +import java.util.Arrays; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; /** @@ -40,14 +43,14 @@ void getIntJavaVersion_OK() { RskContext rskContext = new RskTestContext(tempDir); PreflightChecksUtils preflightChecksUtils = new PreflightChecksUtils(rskContext); - Assertions.assertEquals(8, preflightChecksUtils.getIntJavaVersion("1.8.0_275")); - Assertions.assertEquals(8, preflightChecksUtils.getIntJavaVersion("1.8.0_72-ea")); - Assertions.assertEquals(11, preflightChecksUtils.getIntJavaVersion("11.8.0_71-ea")); - Assertions.assertEquals(11, preflightChecksUtils.getIntJavaVersion("11.0")); - Assertions.assertEquals(9, preflightChecksUtils.getIntJavaVersion("9")); - Assertions.assertEquals(11, preflightChecksUtils.getIntJavaVersion("11")); - Assertions.assertEquals(333, preflightChecksUtils.getIntJavaVersion("333")); - Assertions.assertEquals(9, preflightChecksUtils.getIntJavaVersion("9-ea")); + Assertions.assertEquals(8, preflightChecksUtils.getMajorJavaVersion("1.8.0_275")); + Assertions.assertEquals(8, preflightChecksUtils.getMajorJavaVersion("1.8.0_72-ea")); + Assertions.assertEquals(11, preflightChecksUtils.getMajorJavaVersion("11.8.0_71-ea")); + Assertions.assertEquals(11, preflightChecksUtils.getMajorJavaVersion("11.0")); + Assertions.assertEquals(9, preflightChecksUtils.getMajorJavaVersion("9")); + Assertions.assertEquals(11, preflightChecksUtils.getMajorJavaVersion("11")); + Assertions.assertEquals(333, preflightChecksUtils.getMajorJavaVersion("333")); + Assertions.assertEquals(9, preflightChecksUtils.getMajorJavaVersion("9-ea")); rskContext.close(); } @@ -59,41 +62,42 @@ void runChecks_invalidJavaVersion_exceptionIsThrown() { when(preflightChecksUtilsSpy.getJavaVersion()).thenReturn("16"); - Exception exception = Assertions.assertThrows(PreflightCheckException.class, preflightChecksUtilsSpy::runChecks); - Assertions.assertEquals("Invalid Java Version '16'. Supported versions: 17", exception.getMessage()); + Exception exception = assertThrows(PreflightCheckException.class, preflightChecksUtilsSpy::runChecks); + String expectedMsg = "Invalid Java Version '16'. Supported versions: " + StringUtils.join(PreflightChecksUtils.SUPPORTED_JAVA_VERSIONS, ", "); + Assertions.assertEquals(expectedMsg, exception.getMessage()); rskContext.close(); } @Test - void runChecks_currentJavaVersionIs17_OK() throws Exception { - RskContext rskContext = new RskTestContext(tempDir); - PreflightChecksUtils preflightChecksUtilsSpy = spy(new PreflightChecksUtils(rskContext)); + void runChecks_runAllChecks_OK() throws Exception { + for (String ver : Arrays.asList("17.0.3", "21.0.1")) { + try (RskContext rskContext = new RskTestContext(tempDir)) { + PreflightChecksUtils preflightChecksUtilsSpy = spy(new PreflightChecksUtils(rskContext)); - when(preflightChecksUtilsSpy.getJavaVersion()).thenReturn("17"); + when(preflightChecksUtilsSpy.getJavaVersion()).thenReturn(ver); - preflightChecksUtilsSpy.runChecks(); + preflightChecksUtilsSpy.runChecks(); - verify(preflightChecksUtilsSpy, times(1)).getJavaVersion(); - verify(preflightChecksUtilsSpy, times(1)).getIntJavaVersion("17"); - - rskContext.close(); + verify(preflightChecksUtilsSpy, times(1)).getJavaVersion(); + verify(preflightChecksUtilsSpy, times(1)).getMajorJavaVersion(ver); + verify(preflightChecksUtilsSpy, times(1)).checkSupportedJavaVersion(); + } + } } @Test - void runChecks_runAllChecks_OK() throws Exception { - RskContext rskContext = new RskTestContext(tempDir); - PreflightChecksUtils preflightChecksUtilsSpy = spy(new PreflightChecksUtils(rskContext)); - - when(preflightChecksUtilsSpy.getJavaVersion()).thenReturn("17.0.3"); + void runChecks_nextLTS_NotSupportedYet() throws Exception { + try (RskContext rskContext = new RskTestContext(tempDir)) { + PreflightChecksUtils preflightChecksUtilsSpy = spy(new PreflightChecksUtils(rskContext)); - preflightChecksUtilsSpy.runChecks(); + when(preflightChecksUtilsSpy.getJavaVersion()).thenReturn("25.0.2"); - verify(preflightChecksUtilsSpy, times(1)).getJavaVersion(); - verify(preflightChecksUtilsSpy, times(1)).getIntJavaVersion("17.0.3"); - verify(preflightChecksUtilsSpy, times(1)).checkSupportedJavaVersion(); + assertThrows(PreflightCheckException.class, preflightChecksUtilsSpy::runChecks); - rskContext.close(); + verify(preflightChecksUtilsSpy, times(1)).getJavaVersion(); + verify(preflightChecksUtilsSpy, times(1)).getMajorJavaVersion("25.0.2"); + verify(preflightChecksUtilsSpy, times(1)).checkSupportedJavaVersion(); + } } - } From 2cc5befa5f086284c86067aa6cbb9552b9aa2298 Mon Sep 17 00:00:00 2001 From: Volodymyr Kravets Date: Tue, 30 Jul 2024 11:15:53 +0300 Subject: [PATCH 2/2] chore: run unit tests for java21 in workflow --- .github/workflows/build_and_test.yml | 29 ++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index d6c37dd5ab7..4e48c183ca7 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -53,7 +53,7 @@ jobs: rskj-core/build smell-test: - needs: unit-tests + needs: unit-tests-java17 runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -227,7 +227,7 @@ jobs: npm test kill $rskpid - unit-tests: + unit-tests-java17: needs: build runs-on: ubuntu-latest steps: @@ -266,6 +266,31 @@ jobs: path: | rskj-core/build/reports/ + unit-tests-java21: + needs: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Java & Gradle + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + cache: 'gradle' + + - uses: actions/cache/restore@v4 + name: Restore Gradle Wrapper + with: + path: | + gradle/wrapper/gradle-wrapper.jar + key: gradle-wrapper-v1 + fail-on-cache-miss: true + + - name: Run tests + run: | + ./gradlew --no-daemon --stacktrace test + integration-tests: needs: build runs-on: ubuntu-latest