From 5fe0372ffed98e28356e7426744415308442e3fe Mon Sep 17 00:00:00 2001 From: 0xBlockPay <0xblockpay@gmail.com> Date: Mon, 17 Jul 2023 13:51:48 +0200 Subject: [PATCH] change junit 4 to 5 in others files Signed-off-by: 0xBlockPay <0xblockpay@gmail.com> --- besu/build.gradle | 4 +- .../besu/ForkIdsNetworkConfigTest.java | 1 + .../chainexport/RlpBlockExporterTest.java | 37 +- .../chainimport/JsonBlockImporterTest.java | 20 +- .../hyperledger/besu/cli/BesuCommandTest.java | 43 +- .../besu/cli/CommandLineUtilsTest.java | 8 +- .../besu/cli/CommandTestAbstract.java | 1001 +++++++++-------- ...nvironmentVariableDefaultProviderTest.java | 8 +- .../besu/cli/PasswordSubCommandTest.java | 8 +- .../besu/cli/PublicKeySubCommandTest.java | 16 +- .../TomlConfigFileDefaultProviderTest.java | 29 +- .../cli/ValidateConfigSubCommandTest.java | 8 +- .../besu/cli/config/EthNetworkConfigTest.java | 10 +- .../cli/converter/FractionConverterTest.java | 9 +- .../MetricCategoryConverterTest.java | 13 +- .../converter/PercentageConverterTest.java | 9 +- .../cli/custom/RpcAuthFileValidatorTest.java | 8 +- .../cli/operator/OperatorSubCommandTest.java | 13 +- .../cli/options/AbstractCLIOptionsTest.java | 3 +- .../cli/options/EthProtocolOptionsTest.java | 8 +- .../cli/options/MetricsCLIOptionsTest.java | 6 +- .../cli/options/NetworkingOptionsTest.java | 8 +- .../besu/cli/options/OptionParserTest.java | 8 +- .../cli/options/SynchronizerOptionsTest.java | 6 +- .../options/TransactionPoolOptionsTest.java | 8 +- .../stable/LoggingLevelOptionTest.java | 6 +- .../besu/cli/rlp/RLPSubCommandTest.java | 14 +- .../blocks/BlocksSubCommandTest.java | 76 +- .../storage/StorageSubCommandTest.java | 8 +- .../util/BesuCommandCustomFactoryTest.java | 12 +- .../ConfigOptionSearchAndRunHandlerTest.java | 25 +- .../besu/cli/util/VersionProviderTest.java | 8 +- .../controller/BesuControllerBuilderTest.java | 21 +- .../besu/controller/BesuControllerTest.java | 8 +- ...nsusScheduleBesuControllerBuilderTest.java | 8 +- .../MergeBesuControllerBuilderTest.java | 22 +- .../QbftBesuControllerBuilderTest.java | 20 +- .../TransitionControllerBuilderTest.java | 12 +- .../besu/services/BesuEventsImplTest.java | 13 +- .../besu/services/PicoCLIOptionsImplTest.java | 12 +- 40 files changed, 807 insertions(+), 750 deletions(-) diff --git a/besu/build.gradle b/besu/build.gradle index 73977d81ba7..32829709e31 100644 --- a/besu/build.gradle +++ b/besu/build.gradle @@ -77,8 +77,10 @@ dependencies { implementation 'org.springframework.security:spring-security-crypto' implementation 'org.xerial.snappy:snappy-java' implementation 'tech.pegasys:jc-kzg-4844' + testImplementation 'org.testng:testng:7.1.0' + testImplementation 'org.testng:testng:7.1.0' - runtimeOnly 'org.apache.logging.log4j:log4j-jul' + runtimeOnly 'org.apache.logging.log4j:log4j-jul' runtimeOnly 'com.splunk.logging:splunk-library-javalogging' runtimeOnly 'org.fusesource.jansi:jansi' // for color logging in windows diff --git a/besu/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java b/besu/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java index 94ed79a8bf4..489ddf345e0 100644 --- a/besu/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java +++ b/besu/src/test/java/org/hyperledger/besu/ForkIdsNetworkConfigTest.java @@ -50,6 +50,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +//TODO find something for Enclosed @RunWith(Enclosed.class) public class ForkIdsNetworkConfigTest { diff --git a/besu/src/test/java/org/hyperledger/besu/chainexport/RlpBlockExporterTest.java b/besu/src/test/java/org/hyperledger/besu/chainexport/RlpBlockExporterTest.java index e6b60dad197..dea202ea8e3 100644 --- a/besu/src/test/java/org/hyperledger/besu/chainexport/RlpBlockExporterTest.java +++ b/besu/src/test/java/org/hyperledger/besu/chainexport/RlpBlockExporterTest.java @@ -49,26 +49,25 @@ import java.nio.file.Path; import java.util.Optional; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.junit.jupiter.MockitoExtension; /** Tests for {@link BlockExporter}. */ -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public final class RlpBlockExporterTest { - @ClassRule public static final TemporaryFolder folder = new TemporaryFolder(); + @TempDir public static Path folder; private static Blockchain blockchain; private static long chainHead; private static ProtocolSchedule protocolSchedule; - @BeforeClass + @BeforeAll public static void setupBlockchain() throws IOException { final BesuController controller = createController(); - final Path blocks = folder.newFile("1000.blocks").toPath(); + final Path blocks = folder.resolve("1000.blocks"); BlockTestUtil.write1000Blocks(blocks); blockchain = importBlocks(controller, blocks); chainHead = blockchain.getChainHeadBlockNumber(); @@ -84,7 +83,7 @@ private static Blockchain importBlocks(final BesuController controller, final Pa } private static BesuController createController() throws IOException { - final Path dataDir = folder.newFolder().toPath(); + final Path dataDir = folder; return new BesuController.Builder() .fromGenesisConfig(GenesisConfigFile.mainnet(), SyncMode.FAST) .synchronizerConfiguration(SynchronizerConfiguration.builder().build()) @@ -106,7 +105,7 @@ private static BesuController createController() throws IOException { @Test public void exportBlocks_noBounds() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); exporter.exportBlocks(outputPath, Optional.empty(), Optional.empty()); @@ -126,7 +125,7 @@ public void exportBlocks_noBounds() throws IOException { @Test public void exportBlocks_withLowerBound() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); final long lowerBound = 990; @@ -148,7 +147,7 @@ public void exportBlocks_withLowerBound() throws IOException { @Test public void exportBlocks_withUpperBound() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); final long upperBound = 10; @@ -170,7 +169,7 @@ public void exportBlocks_withUpperBound() throws IOException { @Test public void exportBlocks_withUpperAndLowerBounds() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); final long lowerBound = 5; @@ -193,7 +192,7 @@ public void exportBlocks_withUpperAndLowerBounds() throws IOException { @Test public void exportBlocks_withRangeBeyondChainHead() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); final long lowerBound = chainHead - 10; @@ -216,7 +215,7 @@ public void exportBlocks_withRangeBeyondChainHead() throws IOException { @Test public void exportBlocks_negativeStartNumber() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); assertThatThrownBy(() -> exporter.exportBlocks(outputPath, Optional.of(-1L), Optional.empty())) @@ -226,7 +225,7 @@ public void exportBlocks_negativeStartNumber() throws IOException { @Test public void exportBlocks_negativeEndNumber() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); assertThatThrownBy(() -> exporter.exportBlocks(outputPath, Optional.empty(), Optional.of(-1L))) @@ -236,7 +235,7 @@ public void exportBlocks_negativeEndNumber() throws IOException { @Test public void exportBlocks_outOfOrderBounds() throws IOException { - final File outputPath = folder.newFile(); + final File outputPath = folder.toFile(); final RlpBlockExporter exporter = new RlpBlockExporter(blockchain); assertThatThrownBy(() -> exporter.exportBlocks(outputPath, Optional.of(10L), Optional.of(2L))) diff --git a/besu/src/test/java/org/hyperledger/besu/chainimport/JsonBlockImporterTest.java b/besu/src/test/java/org/hyperledger/besu/chainimport/JsonBlockImporterTest.java index 00c86133ea6..ff922053c36 100644 --- a/besu/src/test/java/org/hyperledger/besu/chainimport/JsonBlockImporterTest.java +++ b/besu/src/test/java/org/hyperledger/besu/chainimport/JsonBlockImporterTest.java @@ -54,16 +54,15 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.io.Resources; import org.apache.tuweni.bytes.Bytes; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public abstract class JsonBlockImporterTest { - - @Rule public final TemporaryFolder folder = new TemporaryFolder(); + @TempDir + Path dataDir; + private final RlpBlockImporter rlpBlockImporter = new RlpBlockImporter(); protected final String consensusEngine; protected final GenesisConfigFile genesisConfigFile; @@ -96,14 +95,14 @@ public void importChain_unsupportedConsensusAlgorithm() throws IOException { } } - @RunWith(Parameterized.class) public static class ParameterizedTests extends JsonBlockImporterTest { public ParameterizedTests(final String consensusEngine) throws IOException { super(consensusEngine); } - @Parameters(name = "Name: {0}") + @ParameterizedTest + @ValueSource(strings = {"Name: {0}"}) public static Collection getParameters() { final Object[][] params = {{"ethash"}, {"clique"}}; return Arrays.asList(params); @@ -413,7 +412,6 @@ protected BesuController createController() throws IOException { protected BesuController createController(final GenesisConfigFile genesisConfigFile) throws IOException { - final Path dataDir = folder.newFolder().toPath(); return new BesuController.Builder() .fromGenesisConfig(genesisConfigFile, SyncMode.FAST) .synchronizerConfiguration(SynchronizerConfiguration.builder().build()) diff --git a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java index 7e634282260..da8a2bee30f 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/BesuCommandTest.java @@ -125,19 +125,19 @@ import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.toml.Toml; import org.apache.tuweni.toml.TomlParseResult; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BesuCommandTest extends CommandTestAbstract { private static final String ENCLAVE_URI = "http://1.2.3.4:5555"; @@ -211,12 +211,12 @@ public class BesuCommandTest extends CommandTestAbstract { DEFAULT_METRICS_CONFIGURATION = MetricsConfiguration.builder().build(); } - @Before + @BeforeEach public void setup() { MergeConfigOptions.setMergeEnabled(false); } - @After + @AfterEach public void tearDown() { MergeConfigOptions.setMergeEnabled(false); } @@ -374,7 +374,7 @@ public void callingWithConfigOptionButInvalidValueTomlFileShouldDisplayHelp() th public void overrideDefaultValuesIfKeyIsPresentInConfigFile() throws IOException { final URL configFile = this.getClass().getResource("/complete_config.toml"); final Path genesisFile = createFakeGenesisFile(GENESIS_VALID_JSON); - final File dataFolder = temp.newFolder(); + final File dataFolder = temp.toFile(); final String updatedConfig = Resources.toString(configFile, UTF_8) .replace("/opt/besu/genesis.json", escapeTomlString(genesisFile.toString())) @@ -3916,7 +3916,7 @@ public void colorCanBeEnabledOrDisabledExplicitly() { }); } - @Ignore + @Disabled("") public void pruningIsEnabledIfSyncModeIsFast() { parseCommand("--sync-mode", "FAST"); @@ -3927,7 +3927,7 @@ public void pruningIsEnabledIfSyncModeIsFast() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } - @Ignore + @Disabled("") public void pruningIsDisabledIfSyncModeIsFull() { parseCommand("--sync-mode", "FULL"); @@ -3949,7 +3949,7 @@ public void pruningEnabledExplicitly() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } - @Ignore + @Disabled("") public void pruningDisabledExplicitly() { parseCommand("--pruning-enabled=false", "--sync-mode=FAST"); @@ -4568,13 +4568,13 @@ public void privacyWithGoQuorumModeMustError() throws IOException { .contains("GoQuorum privacy is no longer supported in Besu"); } - @Rule public TemporaryFolder testFolder = new TemporaryFolder(); + @TempDir public Path testFolder; @Test public void errorIsRaisedIfStaticNodesAreNotAllowed() throws IOException { - final File staticNodesFile = testFolder.newFile("static-nodes.json"); + final File staticNodesFile = testFolder.resolve("static-nodes.json").toFile(); staticNodesFile.deleteOnExit(); - final File permissioningConfig = testFolder.newFile("permissioning"); + final File permissioningConfig = testFolder.resolve("permissioning").toFile(); permissioningConfig.deleteOnExit(); final EnodeURL staticNodeURI = @@ -4601,7 +4601,7 @@ public void errorIsRaisedIfStaticNodesAreNotAllowed() throws IOException { ("nodes-allowlist=[\"" + allowedNode.toString() + "\"]").getBytes(UTF_8)); parseCommand( - "--data-path=" + testFolder.getRoot().getPath(), + "--data-path=" + testFolder.getRoot(), "--bootnodes", "--permissions-nodes-config-file-enabled=true", "--permissions-nodes-config-file=" + permissioningConfig.getPath()); @@ -5442,12 +5442,11 @@ public void pkiBlockCreationPasswordFileRequired() { "File containing password to unlock keystore is required when PKI Block Creation is enabled"); } - @Rule public TemporaryFolder pkiTempFolder = new TemporaryFolder(); - + @TempDir public Path pkiTempFolder; @Test public void pkiBlockCreationFullConfig() throws Exception { // Create temp file with password - final File pwdFile = pkiTempFolder.newFile("pwd"); + final File pwdFile = pkiTempFolder.resolve("pwd").toFile(); FileUtils.writeStringToFile(pwdFile, "foo", UTF_8); parseCommand( diff --git a/besu/src/test/java/org/hyperledger/besu/cli/CommandLineUtilsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/CommandLineUtilsTest.java index f8bc8d8972d..726bf38965e 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/CommandLineUtilsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/CommandLineUtilsTest.java @@ -35,18 +35,18 @@ import java.util.List; import java.util.Map; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; import picocli.CommandLine.RunLast; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class CommandLineUtilsTest { @SuppressWarnings("PrivateStaticFinalLoggers") // @Mocks are inited by JUnit @Mock diff --git a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java index 3b9aafe35dc..cf53f072ada 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/CommandTestAbstract.java @@ -106,518 +106,565 @@ import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.bytes.Bytes32; import org.awaitility.Awaitility; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import picocli.CommandLine; import picocli.CommandLine.Model.CommandSpec; import picocli.CommandLine.RunLast; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public abstract class CommandTestAbstract { - private static final Logger TEST_LOGGER = LoggerFactory.getLogger(CommandTestAbstract.class); - protected final PrintStream originalOut = System.out; - protected final PrintStream originalErr = System.err; - protected final ByteArrayOutputStream commandOutput = new ByteArrayOutputStream(); - protected final ByteArrayOutputStream commandErrorOutput = new ByteArrayOutputStream(); - private final HashMap environment = new HashMap<>(); - - private final List besuCommands = new ArrayList<>(); - private KeyPair keyPair; - - protected static final RpcEndpointServiceImpl rpcEndpointServiceImpl = - new RpcEndpointServiceImpl(); - - @Mock protected RunnerBuilder mockRunnerBuilder; - @Mock protected Runner mockRunner; - - @Mock protected BesuController.Builder mockControllerBuilderFactory; - - @Mock protected BesuControllerBuilder mockControllerBuilder; - @Mock protected EthProtocolManager mockEthProtocolManager; - @Mock protected ProtocolSchedule mockProtocolSchedule; - @Mock protected ProtocolContext mockProtocolContext; - @Mock protected BlockBroadcaster mockBlockBroadcaster; - @Mock protected BesuController mockController; - @Mock protected RlpBlockExporter rlpBlockExporter; - @Mock protected JsonBlockImporter jsonBlockImporter; - @Mock protected RlpBlockImporter rlpBlockImporter; - @Mock protected StorageServiceImpl storageService; - @Mock protected SecurityModuleServiceImpl securityModuleService; - @Mock protected SecurityModule securityModule; - @Mock protected BesuConfiguration commonPluginConfiguration; - @Mock protected KeyValueStorageFactory rocksDBStorageFactory; - @Mock protected PrivacyKeyValueStorageFactory rocksDBSPrivacyStorageFactory; - @Mock protected PicoCLIOptions cliOptions; - @Mock protected NodeKey nodeKey; - @Mock protected BesuPluginContextImpl mockBesuPluginContext; - @Mock protected MutableBlockchain mockMutableBlockchain; - @Mock protected WorldStateArchive mockWorldStateArchive; - @Mock protected TransactionPool mockTransactionPool; - @Mock protected PrivacyPluginServiceImpl privacyPluginService; - - @SuppressWarnings("PrivateStaticFinalLoggers") // @Mocks are inited by JUnit - @Mock - protected Logger mockLogger; - - @Mock protected BesuComponent mockBesuComponent; - - @Mock protected PkiBlockCreationConfigurationProvider mockPkiBlockCreationConfigProvider; - @Mock protected PkiBlockCreationConfiguration mockPkiBlockCreationConfiguration; - - @Captor protected ArgumentCaptor> bytesCollectionCollector; - @Captor protected ArgumentCaptor pathArgumentCaptor; - @Captor protected ArgumentCaptor stringArgumentCaptor; - @Captor protected ArgumentCaptor intArgumentCaptor; - @Captor protected ArgumentCaptor longArgumentCaptor; - @Captor protected ArgumentCaptor floatCaptor; - @Captor protected ArgumentCaptor ethNetworkConfigArgumentCaptor; - @Captor protected ArgumentCaptor syncConfigurationCaptor; - @Captor protected ArgumentCaptor jsonRpcConfigArgumentCaptor; - @Captor protected ArgumentCaptor graphQLConfigArgumentCaptor; - @Captor protected ArgumentCaptor wsRpcConfigArgumentCaptor; - @Captor protected ArgumentCaptor metricsConfigArgumentCaptor; - @Captor protected ArgumentCaptor storageProviderArgumentCaptor; - @Captor protected ArgumentCaptor ethProtocolConfigurationArgumentCaptor; - @Captor protected ArgumentCaptor dataStorageConfigurationArgumentCaptor; - @Captor protected ArgumentCaptor pkiKeyStoreConfigurationArgumentCaptor; - - @Captor - protected ArgumentCaptor> - permissioningConfigurationArgumentCaptor; - - @Captor protected ArgumentCaptor transactionPoolConfigCaptor; - - @Captor protected ArgumentCaptor ethstatsOptionsArgumentCaptor; - - @Rule public final TemporaryFolder temp = new TemporaryFolder(); - - @Before - public void initMocks() throws Exception { - // doReturn used because of generic BesuController - doReturn(mockControllerBuilder) - .when(mockControllerBuilderFactory) - .fromEthNetworkConfig(any(), any(), any()); - when(mockControllerBuilder.synchronizerConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.ethProtocolConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.transactionPoolConfiguration(any())) - .thenReturn(mockControllerBuilder); - when(mockControllerBuilder.dataDirectory(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.miningParameters(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.nodeKey(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.metricsSystem(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.messagePermissioningProviders(any())) - .thenReturn(mockControllerBuilder); - when(mockControllerBuilder.privacyParameters(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.pkiBlockCreationConfiguration(any())) - .thenReturn(mockControllerBuilder); - when(mockControllerBuilder.clock(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.isRevertReasonEnabled(false)).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.storageProvider(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.isPruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.pruningConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.genesisConfigOverrides(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.gasLimitCalculator(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.requiredBlocks(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.reorgLoggingThreshold(anyLong())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.dataStorageConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.evmConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.networkConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.randomPeerPriority(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.maxPeers(anyInt())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.chainPruningConfiguration(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.maxPeers(anyInt())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.lowerBoundPeers(anyInt())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.maxRemotelyInitiatedPeers(anyInt())) - .thenReturn(mockControllerBuilder); - when(mockControllerBuilder.transactionSelectorFactory(any())).thenReturn(mockControllerBuilder); - when(mockControllerBuilder.besuComponent(any(BesuComponent.class))) - .thenReturn(mockControllerBuilder); - // doReturn used because of generic BesuController - doReturn(mockController).when(mockControllerBuilder).build(); - lenient().when(mockController.getProtocolManager()).thenReturn(mockEthProtocolManager); - lenient().when(mockController.getProtocolSchedule()).thenReturn(mockProtocolSchedule); - lenient().when(mockController.getProtocolContext()).thenReturn(mockProtocolContext); - lenient() - .when(mockController.getAdditionalPluginServices()) - .thenReturn(new NoopPluginServiceFactory()); - lenient().when(mockController.getNodeKey()).thenReturn(nodeKey); - - when(mockEthProtocolManager.getBlockBroadcaster()).thenReturn(mockBlockBroadcaster); - - when(mockProtocolContext.getBlockchain()).thenReturn(mockMutableBlockchain); - lenient().when(mockProtocolContext.getWorldStateArchive()).thenReturn(mockWorldStateArchive); - when(mockController.getTransactionPool()).thenReturn(mockTransactionPool); - - when(mockRunnerBuilder.vertx(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.besuController(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.discovery(anyBoolean())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.ethNetworkConfig(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.networkingConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.p2pAdvertisedHost(anyString())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.p2pListenPort(anyInt())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.p2pListenInterface(anyString())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.permissioningConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.p2pEnabled(anyBoolean())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.natMethod(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.natManagerServiceName(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.natMethodFallbackEnabled(anyBoolean())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.jsonRpcConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.engineJsonRpcConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.graphQLConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.webSocketConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.jsonRpcIpcConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.apiConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.dataDir(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.bannedNodeIds(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.metricsSystem(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.permissioningService(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.metricsConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.staticNodes(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.identityString(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.besuPluginContext(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.autoLogBloomCaching(anyBoolean())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.pidPath(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.ethstatsOptions(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.storageProvider(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.rpcEndpointService(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.legacyForkId(anyBoolean())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.rpcMaxLogsRange(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.enodeDnsConfiguration(any())).thenReturn(mockRunnerBuilder); - when(mockRunnerBuilder.build()).thenReturn(mockRunner); - - final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithmFactory.getInstance(); - - final Bytes32 keyPairPrvKey = - Bytes32.fromHexString("0xf7a58d5e755d51fa2f6206e91dd574597c73248aaf946ec1964b8c6268d6207b"); - keyPair = signatureAlgorithm.createKeyPair(signatureAlgorithm.createPrivateKey(keyPairPrvKey)); - - lenient().when(nodeKey.getPublicKey()).thenReturn(keyPair.getPublicKey()); - - lenient() - .when(storageService.getByName(eq("rocksdb"))) - .thenReturn(Optional.of(rocksDBStorageFactory)); - lenient() - .when(storageService.getByName(eq("rocksdb-privacy"))) - .thenReturn(Optional.of(rocksDBSPrivacyStorageFactory)); - lenient() - .when(securityModuleService.getByName(eq("localfile"))) - .thenReturn(Optional.of(() -> securityModule)); - lenient() - .when(rocksDBSPrivacyStorageFactory.create(any(), any(), any())) - .thenReturn(new InMemoryKeyValueStorage()); - - lenient() - .when(mockBesuPluginContext.getService(PicoCLIOptions.class)) - .thenReturn(Optional.of(cliOptions)); - lenient() - .when(mockBesuPluginContext.getService(StorageService.class)) - .thenReturn(Optional.of(storageService)); - - lenient() - .doReturn(mockPkiBlockCreationConfiguration) - .when(mockPkiBlockCreationConfigProvider) - .load(pkiKeyStoreConfigurationArgumentCaptor.capture()); - when(mockBesuComponent.getBesuCommandLogger()).thenReturn(mockLogger); - } - - @Before - public void setUpStreams() { - // reset the global opentelemetry singleton - GlobalOpenTelemetry.resetForTest(); - commandOutput.reset(); - commandErrorOutput.reset(); - System.setOut(new PrintStream(commandOutput)); - System.setErr(new PrintStream(commandErrorOutput)); - } - - // Display outputs for debug purpose - @After - public void displayOutput() throws IOException { - TEST_LOGGER.info("Standard output {}", commandOutput.toString(UTF_8)); - TEST_LOGGER.info("Standard error {}", commandErrorOutput.toString(UTF_8)); - - System.setOut(originalOut); - System.setErr(originalErr); - besuCommands.forEach(TestBesuCommand::close); - } - - protected NodeKey getNodeKey() { - return nodeKey; - } - - protected void setEnvironmentVariable(final String name, final String value) { - environment.put(name, value); - } - - protected TestBesuCommand parseCommand(final String... args) { - return parseCommand(System.in, args); - } - - protected TestBesuCommand parseCommand(final InputStream in, final String... args) { - return parseCommand(TestType.NO_PORT_CHECK, in, args); - } - - protected TestBesuCommand parseCommandWithRequiredOption(final String... args) { - return parseCommand(TestType.REQUIRED_OPTION, System.in, args); - } - - protected TestBesuCommand parseCommandWithPortCheck(final String... args) { - return parseCommand(TestType.PORT_CHECK, System.in, args); - } - - private JsonBlockImporter jsonBlockImporterFactory(final BesuController controller) { - return jsonBlockImporter; - } - - protected TestBesuCommand parseCommand( - final TestType testType, final InputStream in, final String... args) { - // turn off ansi usage globally in picocli - System.setProperty("picocli.ansi", "false"); - // reset GlobalOpenTelemetry - GlobalOpenTelemetry.resetForTest(); - - final TestBesuCommand besuCommand = getTestBesuCommand(testType); - besuCommands.add(besuCommand); - - final File defaultKeyFile = - KeyPairUtil.getDefaultKeyFile(DefaultCommandValues.getDefaultBesuDataPath(besuCommand)); - try { - Files.writeString(defaultKeyFile.toPath(), keyPair.getPrivateKey().toString()); - } catch (final IOException e) { - throw new RuntimeException(e); - } - besuCommand.setBesuConfiguration(commonPluginConfiguration); - - // parse using Ansi.OFF to be able to assert on non formatted output results - besuCommand.parse( - new RunLast(), - besuCommand.parameterExceptionHandler(), - besuCommand.executionExceptionHandler(), - in, - args); - return besuCommand; - } - - private TestBesuCommand getTestBesuCommand(final TestType testType) { - switch (testType) { - case REQUIRED_OPTION: - return new TestBesuCommandWithRequiredOption( - mockBesuComponent, - () -> rlpBlockImporter, - this::jsonBlockImporterFactory, - (blockchain) -> rlpBlockExporter, - mockRunnerBuilder, - mockControllerBuilderFactory, - mockBesuPluginContext, - environment, - storageService, - securityModuleService, - mockPkiBlockCreationConfigProvider, - privacyPluginService); - case PORT_CHECK: - return new TestBesuCommand( - mockBesuComponent, - () -> rlpBlockImporter, - this::jsonBlockImporterFactory, - (blockchain) -> rlpBlockExporter, - mockRunnerBuilder, - mockControllerBuilderFactory, - mockBesuPluginContext, - environment, - storageService, - securityModuleService, - mockPkiBlockCreationConfigProvider, - privacyPluginService); - default: - return new TestBesuCommandWithoutPortCheck( - mockBesuComponent, - () -> rlpBlockImporter, - this::jsonBlockImporterFactory, - (blockchain) -> rlpBlockExporter, - mockRunnerBuilder, - mockControllerBuilderFactory, - mockBesuPluginContext, - environment, - storageService, - securityModuleService, - mockPkiBlockCreationConfigProvider, - privacyPluginService); + private static final Logger TEST_LOGGER = LoggerFactory.getLogger(CommandTestAbstract.class); + protected final PrintStream originalOut = System.out; + protected final PrintStream originalErr = System.err; + protected final ByteArrayOutputStream commandOutput = new ByteArrayOutputStream(); + protected final ByteArrayOutputStream commandErrorOutput = new ByteArrayOutputStream(); + private final HashMap environment = new HashMap<>(); + + private final List besuCommands = new ArrayList<>(); + private KeyPair keyPair; + + protected static final RpcEndpointServiceImpl rpcEndpointServiceImpl = + new RpcEndpointServiceImpl(); + + @Mock + protected RunnerBuilder mockRunnerBuilder; + @Mock + protected Runner mockRunner; + + @Mock + protected BesuController.Builder mockControllerBuilderFactory; + + @Mock + protected BesuControllerBuilder mockControllerBuilder; + @Mock + protected EthProtocolManager mockEthProtocolManager; + @Mock + protected ProtocolSchedule mockProtocolSchedule; + @Mock + protected ProtocolContext mockProtocolContext; + @Mock + protected BlockBroadcaster mockBlockBroadcaster; + @Mock + protected BesuController mockController; + @Mock + protected RlpBlockExporter rlpBlockExporter; + @Mock + protected JsonBlockImporter jsonBlockImporter; + @Mock + protected RlpBlockImporter rlpBlockImporter; + @Mock + protected StorageServiceImpl storageService; + @Mock + protected SecurityModuleServiceImpl securityModuleService; + @Mock + protected SecurityModule securityModule; + @Mock + protected BesuConfiguration commonPluginConfiguration; + @Mock + protected KeyValueStorageFactory rocksDBStorageFactory; + @Mock + protected PrivacyKeyValueStorageFactory rocksDBSPrivacyStorageFactory; + @Mock + protected PicoCLIOptions cliOptions; + @Mock + protected NodeKey nodeKey; + @Mock + protected BesuPluginContextImpl mockBesuPluginContext; + @Mock + protected MutableBlockchain mockMutableBlockchain; + @Mock + protected WorldStateArchive mockWorldStateArchive; + @Mock + protected TransactionPool mockTransactionPool; + @Mock + protected PrivacyPluginServiceImpl privacyPluginService; + + @SuppressWarnings("PrivateStaticFinalLoggers") // @Mocks are inited by JUnit + @Mock + protected Logger mockLogger; + + @Mock + protected BesuComponent mockBesuComponent; + + @Mock + protected PkiBlockCreationConfigurationProvider mockPkiBlockCreationConfigProvider; + @Mock + protected PkiBlockCreationConfiguration mockPkiBlockCreationConfiguration; + + @Captor + protected ArgumentCaptor> bytesCollectionCollector; + @Captor + protected ArgumentCaptor pathArgumentCaptor; + @Captor + protected ArgumentCaptor stringArgumentCaptor; + @Captor + protected ArgumentCaptor intArgumentCaptor; + @Captor + protected ArgumentCaptor longArgumentCaptor; + @Captor + protected ArgumentCaptor floatCaptor; + @Captor + protected ArgumentCaptor ethNetworkConfigArgumentCaptor; + @Captor + protected ArgumentCaptor syncConfigurationCaptor; + @Captor + protected ArgumentCaptor jsonRpcConfigArgumentCaptor; + @Captor + protected ArgumentCaptor graphQLConfigArgumentCaptor; + @Captor + protected ArgumentCaptor wsRpcConfigArgumentCaptor; + @Captor + protected ArgumentCaptor metricsConfigArgumentCaptor; + @Captor + protected ArgumentCaptor storageProviderArgumentCaptor; + @Captor + protected ArgumentCaptor ethProtocolConfigurationArgumentCaptor; + @Captor + protected ArgumentCaptor dataStorageConfigurationArgumentCaptor; + @Captor + protected ArgumentCaptor pkiKeyStoreConfigurationArgumentCaptor; + + @Captor + protected ArgumentCaptor> + permissioningConfigurationArgumentCaptor; + + @Captor + protected ArgumentCaptor transactionPoolConfigCaptor; + + @Captor + protected ArgumentCaptor ethstatsOptionsArgumentCaptor; + + @TempDir public Path temp; + + @BeforeEach + public void initMocks() throws Exception { + // doReturn used because of generic BesuController + doReturn(mockControllerBuilder) + .when(mockControllerBuilderFactory) + .fromEthNetworkConfig(any(), any(), any()); + when(mockControllerBuilder.synchronizerConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.ethProtocolConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.transactionPoolConfiguration(any())) + .thenReturn(mockControllerBuilder); + when(mockControllerBuilder.dataDirectory(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.miningParameters(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.nodeKey(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.metricsSystem(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.messagePermissioningProviders(any())) + .thenReturn(mockControllerBuilder); + when(mockControllerBuilder.privacyParameters(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.pkiBlockCreationConfiguration(any())) + .thenReturn(mockControllerBuilder); + when(mockControllerBuilder.clock(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.isRevertReasonEnabled(false)).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.storageProvider(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.isPruningEnabled(anyBoolean())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.pruningConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.genesisConfigOverrides(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.gasLimitCalculator(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.requiredBlocks(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.reorgLoggingThreshold(anyLong())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.dataStorageConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.evmConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.networkConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.randomPeerPriority(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.maxPeers(anyInt())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.chainPruningConfiguration(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.maxPeers(anyInt())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.lowerBoundPeers(anyInt())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.maxRemotelyInitiatedPeers(anyInt())) + .thenReturn(mockControllerBuilder); + when(mockControllerBuilder.transactionSelectorFactory(any())).thenReturn(mockControllerBuilder); + when(mockControllerBuilder.besuComponent(any(BesuComponent.class))) + .thenReturn(mockControllerBuilder); + // doReturn used because of generic BesuController + doReturn(mockController).when(mockControllerBuilder).build(); + lenient().when(mockController.getProtocolManager()).thenReturn(mockEthProtocolManager); + lenient().when(mockController.getProtocolSchedule()).thenReturn(mockProtocolSchedule); + lenient().when(mockController.getProtocolContext()).thenReturn(mockProtocolContext); + lenient() + .when(mockController.getAdditionalPluginServices()) + .thenReturn(new NoopPluginServiceFactory()); + lenient().when(mockController.getNodeKey()).thenReturn(nodeKey); + + when(mockEthProtocolManager.getBlockBroadcaster()).thenReturn(mockBlockBroadcaster); + + when(mockProtocolContext.getBlockchain()).thenReturn(mockMutableBlockchain); + lenient().when(mockProtocolContext.getWorldStateArchive()).thenReturn(mockWorldStateArchive); + when(mockController.getTransactionPool()).thenReturn(mockTransactionPool); + + when(mockRunnerBuilder.vertx(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.besuController(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.discovery(anyBoolean())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.ethNetworkConfig(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.networkingConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.p2pAdvertisedHost(anyString())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.p2pListenPort(anyInt())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.p2pListenInterface(anyString())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.permissioningConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.p2pEnabled(anyBoolean())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.natMethod(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.natManagerServiceName(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.natMethodFallbackEnabled(anyBoolean())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.jsonRpcConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.engineJsonRpcConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.graphQLConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.webSocketConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.jsonRpcIpcConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.apiConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.dataDir(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.bannedNodeIds(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.metricsSystem(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.permissioningService(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.metricsConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.staticNodes(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.identityString(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.besuPluginContext(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.autoLogBloomCaching(anyBoolean())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.pidPath(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.ethstatsOptions(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.storageProvider(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.rpcEndpointService(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.legacyForkId(anyBoolean())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.rpcMaxLogsRange(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.enodeDnsConfiguration(any())).thenReturn(mockRunnerBuilder); + when(mockRunnerBuilder.build()).thenReturn(mockRunner); + + final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithmFactory.getInstance(); + + final Bytes32 keyPairPrvKey = + Bytes32.fromHexString("0xf7a58d5e755d51fa2f6206e91dd574597c73248aaf946ec1964b8c6268d6207b"); + keyPair = signatureAlgorithm.createKeyPair(signatureAlgorithm.createPrivateKey(keyPairPrvKey)); + + lenient().when(nodeKey.getPublicKey()).thenReturn(keyPair.getPublicKey()); + + lenient() + .when(storageService.getByName(eq("rocksdb"))) + .thenReturn(Optional.of(rocksDBStorageFactory)); + lenient() + .when(storageService.getByName(eq("rocksdb-privacy"))) + .thenReturn(Optional.of(rocksDBSPrivacyStorageFactory)); + lenient() + .when(securityModuleService.getByName(eq("localfile"))) + .thenReturn(Optional.of(() -> securityModule)); + lenient() + .when(rocksDBSPrivacyStorageFactory.create(any(), any(), any())) + .thenReturn(new InMemoryKeyValueStorage()); + + lenient() + .when(mockBesuPluginContext.getService(PicoCLIOptions.class)) + .thenReturn(Optional.of(cliOptions)); + lenient() + .when(mockBesuPluginContext.getService(StorageService.class)) + .thenReturn(Optional.of(storageService)); + + lenient() + .doReturn(mockPkiBlockCreationConfiguration) + .when(mockPkiBlockCreationConfigProvider) + .load(pkiKeyStoreConfigurationArgumentCaptor.capture()); + when(mockBesuComponent.getBesuCommandLogger()).thenReturn(mockLogger); } - } - - @CommandLine.Command - public static class TestBesuCommand extends BesuCommand { - - @CommandLine.Spec CommandLine.Model.CommandSpec spec; - private Vertx vertx; - - TestBesuCommand( - final BesuComponent besuComponent, - final Supplier mockBlockImporter, - final Function jsonBlockImporterFactory, - final Function rlpBlockExporterFactory, - final RunnerBuilder mockRunnerBuilder, - final BesuController.Builder controllerBuilderFactory, - final BesuPluginContextImpl besuPluginContext, - final Map environment, - final StorageServiceImpl storageService, - final SecurityModuleServiceImpl securityModuleService, - final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, - final PrivacyPluginServiceImpl privacyPluginService) { - super( - besuComponent, - mockBlockImporter, - jsonBlockImporterFactory, - rlpBlockExporterFactory, - mockRunnerBuilder, - controllerBuilderFactory, - besuPluginContext, - environment, - storageService, - securityModuleService, - new PermissioningServiceImpl(), - privacyPluginService, - pkiBlockCreationConfigProvider, - rpcEndpointServiceImpl, - new TransactionSelectionServiceImpl()); + + @BeforeEach + public void setUpStreams() { + // reset the global opentelemetry singleton + GlobalOpenTelemetry.resetForTest(); + commandOutput.reset(); + commandErrorOutput.reset(); + System.setOut(new PrintStream(commandOutput)); + System.setErr(new PrintStream(commandErrorOutput)); } - @Override - protected void validateP2PInterface(final String p2pInterface) { - // For testing, don't actually query for networking interfaces to validate this option + // Display outputs for debug purpose + @AfterEach + public void displayOutput() throws IOException { + TEST_LOGGER.info("Standard output {}", commandOutput.toString(UTF_8)); + TEST_LOGGER.info("Standard error {}", commandErrorOutput.toString(UTF_8)); + + System.setOut(originalOut); + System.setErr(originalErr); + besuCommands.forEach(TestBesuCommand::close); } - @Override - protected Vertx createVertx(final VertxOptions vertxOptions) { - vertx = super.createVertx(vertxOptions); - return vertx; + protected NodeKey getNodeKey() { + return nodeKey; } - public CommandSpec getSpec() { - return spec; + protected void setEnvironmentVariable(final String name, final String value) { + environment.put(name, value); } - public NetworkingOptions getNetworkingOptions() { - return unstableNetworkingOptions; + protected TestBesuCommand parseCommand(final String... args) { + return parseCommand(System.in, args); } - public SynchronizerOptions getSynchronizerOptions() { - return unstableSynchronizerOptions; + protected TestBesuCommand parseCommand(final InputStream in, final String... args) { + return parseCommand(TestType.NO_PORT_CHECK, in, args); } - public EthProtocolOptions getEthProtocolOptions() { - return unstableEthProtocolOptions; + protected TestBesuCommand parseCommandWithRequiredOption(final String... args) { + return parseCommand(TestType.REQUIRED_OPTION, System.in, args); } - public TransactionPoolOptions getTransactionPoolOptions() { - return unstableTransactionPoolOptions; + protected TestBesuCommand parseCommandWithPortCheck(final String... args) { + return parseCommand(TestType.PORT_CHECK, System.in, args); } - public MetricsCLIOptions getMetricsCLIOptions() { - return unstableMetricsCLIOptions; + private JsonBlockImporter jsonBlockImporterFactory(final BesuController controller) { + return jsonBlockImporter; } - public void close() { - if (vertx != null) { - final AtomicBoolean closed = new AtomicBoolean(false); - vertx.close(event -> closed.set(true)); - Awaitility.waitAtMost(30, TimeUnit.SECONDS).until(closed::get); - } + protected TestBesuCommand parseCommand( + final TestType testType, final InputStream in, final String... args) { + // turn off ansi usage globally in picocli + System.setProperty("picocli.ansi", "false"); + // reset GlobalOpenTelemetry + GlobalOpenTelemetry.resetForTest(); + + final TestBesuCommand besuCommand = getTestBesuCommand(testType); + besuCommands.add(besuCommand); + + final File defaultKeyFile = + KeyPairUtil.getDefaultKeyFile(DefaultCommandValues.getDefaultBesuDataPath(besuCommand)); + try { + Files.writeString(defaultKeyFile.toPath(), keyPair.getPrivateKey().toString()); + } catch (final IOException e) { + throw new RuntimeException(e); + } + besuCommand.setBesuConfiguration(commonPluginConfiguration); + + // parse using Ansi.OFF to be able to assert on non formatted output results + besuCommand.parse( + new RunLast(), + besuCommand.parameterExceptionHandler(), + besuCommand.executionExceptionHandler(), + in, + args); + return besuCommand; } - } - - @CommandLine.Command - public static class TestBesuCommandWithRequiredOption extends TestBesuCommand { - - @CommandLine.Option( - names = {"--accept-terms-and-conditions"}, - description = "You must explicitly accept terms and conditions", - arity = "1", - required = true) - private final Boolean acceptTermsAndConditions = false; - - TestBesuCommandWithRequiredOption( - final BesuComponent besuComponent, - final Supplier mockBlockImporter, - final Function jsonBlockImporterFactory, - final Function rlpBlockExporterFactory, - final RunnerBuilder mockRunnerBuilder, - final BesuController.Builder controllerBuilderFactory, - final BesuPluginContextImpl besuPluginContext, - final Map environment, - final StorageServiceImpl storageService, - final SecurityModuleServiceImpl securityModuleService, - final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, - final PrivacyPluginServiceImpl privacyPluginService) { - super( - besuComponent, - mockBlockImporter, - jsonBlockImporterFactory, - rlpBlockExporterFactory, - mockRunnerBuilder, - controllerBuilderFactory, - besuPluginContext, - environment, - storageService, - securityModuleService, - pkiBlockCreationConfigProvider, - privacyPluginService); + + private TestBesuCommand getTestBesuCommand(final TestType testType) { + switch (testType) { + case REQUIRED_OPTION: + return new TestBesuCommandWithRequiredOption( + mockBesuComponent, + () -> rlpBlockImporter, + this::jsonBlockImporterFactory, + (blockchain) -> rlpBlockExporter, + mockRunnerBuilder, + mockControllerBuilderFactory, + mockBesuPluginContext, + environment, + storageService, + securityModuleService, + mockPkiBlockCreationConfigProvider, + privacyPluginService); + case PORT_CHECK: + return new TestBesuCommand( + mockBesuComponent, + () -> rlpBlockImporter, + this::jsonBlockImporterFactory, + (blockchain) -> rlpBlockExporter, + mockRunnerBuilder, + mockControllerBuilderFactory, + mockBesuPluginContext, + environment, + storageService, + securityModuleService, + mockPkiBlockCreationConfigProvider, + privacyPluginService); + default: + return new TestBesuCommandWithoutPortCheck( + mockBesuComponent, + () -> rlpBlockImporter, + this::jsonBlockImporterFactory, + (blockchain) -> rlpBlockExporter, + mockRunnerBuilder, + mockControllerBuilderFactory, + mockBesuPluginContext, + environment, + storageService, + securityModuleService, + mockPkiBlockCreationConfigProvider, + privacyPluginService); + } } - public Boolean getAcceptTermsAndConditions() { - return acceptTermsAndConditions; + @CommandLine.Command + public static class TestBesuCommand extends BesuCommand { + + @CommandLine.Spec + CommandLine.Model.CommandSpec spec; + private Vertx vertx; + + TestBesuCommand( + final BesuComponent besuComponent, + final Supplier mockBlockImporter, + final Function jsonBlockImporterFactory, + final Function rlpBlockExporterFactory, + final RunnerBuilder mockRunnerBuilder, + final BesuController.Builder controllerBuilderFactory, + final BesuPluginContextImpl besuPluginContext, + final Map environment, + final StorageServiceImpl storageService, + final SecurityModuleServiceImpl securityModuleService, + final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, + final PrivacyPluginServiceImpl privacyPluginService) { + super( + besuComponent, + mockBlockImporter, + jsonBlockImporterFactory, + rlpBlockExporterFactory, + mockRunnerBuilder, + controllerBuilderFactory, + besuPluginContext, + environment, + storageService, + securityModuleService, + new PermissioningServiceImpl(), + privacyPluginService, + pkiBlockCreationConfigProvider, + rpcEndpointServiceImpl, + new TransactionSelectionServiceImpl()); + } + + @Override + protected void validateP2PInterface(final String p2pInterface) { + // For testing, don't actually query for networking interfaces to validate this option + } + + @Override + protected Vertx createVertx(final VertxOptions vertxOptions) { + vertx = super.createVertx(vertxOptions); + return vertx; + } + + public CommandSpec getSpec() { + return spec; + } + + public NetworkingOptions getNetworkingOptions() { + return unstableNetworkingOptions; + } + + public SynchronizerOptions getSynchronizerOptions() { + return unstableSynchronizerOptions; + } + + public EthProtocolOptions getEthProtocolOptions() { + return unstableEthProtocolOptions; + } + + public TransactionPoolOptions getTransactionPoolOptions() { + return unstableTransactionPoolOptions; + } + + public MetricsCLIOptions getMetricsCLIOptions() { + return unstableMetricsCLIOptions; + } + + public void close() { + if (vertx != null) { + final AtomicBoolean closed = new AtomicBoolean(false); + vertx.close(event -> closed.set(true)); + Awaitility.waitAtMost(30, TimeUnit.SECONDS).until(closed::get); + } + } } - } - - @CommandLine.Command - public static class TestBesuCommandWithoutPortCheck extends TestBesuCommand { - - TestBesuCommandWithoutPortCheck( - final BesuComponent context, - final Supplier mockBlockImporter, - final Function jsonBlockImporterFactory, - final Function rlpBlockExporterFactory, - final RunnerBuilder mockRunnerBuilder, - final BesuController.Builder controllerBuilderFactory, - final BesuPluginContextImpl besuPluginContext, - final Map environment, - final StorageServiceImpl storageService, - final SecurityModuleServiceImpl securityModuleService, - final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, - final PrivacyPluginServiceImpl privacyPluginService) { - super( - context, - mockBlockImporter, - jsonBlockImporterFactory, - rlpBlockExporterFactory, - mockRunnerBuilder, - controllerBuilderFactory, - besuPluginContext, - environment, - storageService, - securityModuleService, - pkiBlockCreationConfigProvider, - privacyPluginService); + + @CommandLine.Command + public static class TestBesuCommandWithRequiredOption extends TestBesuCommand { + + @CommandLine.Option( + names = {"--accept-terms-and-conditions"}, + description = "You must explicitly accept terms and conditions", + arity = "1", + required = true) + private final Boolean acceptTermsAndConditions = false; + + TestBesuCommandWithRequiredOption( + final BesuComponent besuComponent, + final Supplier mockBlockImporter, + final Function jsonBlockImporterFactory, + final Function rlpBlockExporterFactory, + final RunnerBuilder mockRunnerBuilder, + final BesuController.Builder controllerBuilderFactory, + final BesuPluginContextImpl besuPluginContext, + final Map environment, + final StorageServiceImpl storageService, + final SecurityModuleServiceImpl securityModuleService, + final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, + final PrivacyPluginServiceImpl privacyPluginService) { + super( + besuComponent, + mockBlockImporter, + jsonBlockImporterFactory, + rlpBlockExporterFactory, + mockRunnerBuilder, + controllerBuilderFactory, + besuPluginContext, + environment, + storageService, + securityModuleService, + pkiBlockCreationConfigProvider, + privacyPluginService); + } + + public Boolean getAcceptTermsAndConditions() { + return acceptTermsAndConditions; + } } - @Override - protected void checkIfRequiredPortsAreAvailable() { - // For testing, don't check for port conflicts + @CommandLine.Command + public static class TestBesuCommandWithoutPortCheck extends TestBesuCommand { + + TestBesuCommandWithoutPortCheck( + final BesuComponent context, + final Supplier mockBlockImporter, + final Function jsonBlockImporterFactory, + final Function rlpBlockExporterFactory, + final RunnerBuilder mockRunnerBuilder, + final BesuController.Builder controllerBuilderFactory, + final BesuPluginContextImpl besuPluginContext, + final Map environment, + final StorageServiceImpl storageService, + final SecurityModuleServiceImpl securityModuleService, + final PkiBlockCreationConfigurationProvider pkiBlockCreationConfigProvider, + final PrivacyPluginServiceImpl privacyPluginService) { + super( + context, + mockBlockImporter, + jsonBlockImporterFactory, + rlpBlockExporterFactory, + mockRunnerBuilder, + controllerBuilderFactory, + besuPluginContext, + environment, + storageService, + securityModuleService, + pkiBlockCreationConfigProvider, + privacyPluginService); + } + + @Override + protected void checkIfRequiredPortsAreAvailable() { + // For testing, don't check for port conflicts + } } - } - private enum TestType { - REQUIRED_OPTION, - PORT_CHECK, - NO_PORT_CHECK - } + private enum TestType { + REQUIRED_OPTION, + PORT_CHECK, + NO_PORT_CHECK + } } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/EnvironmentVariableDefaultProviderTest.java b/besu/src/test/java/org/hyperledger/besu/cli/EnvironmentVariableDefaultProviderTest.java index af609327340..9953ca519f7 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/EnvironmentVariableDefaultProviderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/EnvironmentVariableDefaultProviderTest.java @@ -21,13 +21,13 @@ import java.util.HashMap; import java.util.Map; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.OptionSpec; import picocli.CommandLine.Model.PositionalParamSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class EnvironmentVariableDefaultProviderTest { private final Map environment = new HashMap<>(); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java index 62d35830c0b..5d661f92038 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java @@ -19,12 +19,12 @@ import org.hyperledger.besu.BesuInfo; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.CommandSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class PasswordSubCommandTest extends CommandTestAbstract { @Test diff --git a/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java index 3da574e8e32..d2ca00990a0 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java @@ -35,14 +35,14 @@ import org.bouncycastle.asn1.sec.SECNamedCurves; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.crypto.params.ECDomainParameters; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.CommandSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class PublicKeySubCommandTest extends CommandTestAbstract { private static final String EXPECTED_PUBLIC_KEY_USAGE = @@ -126,13 +126,13 @@ public class PublicKeySubCommandTest extends CommandTestAbstract { private static final String ALGORITHM = SignatureAlgorithm.ALGORITHM; private static ECDomainParameters curve; - @BeforeClass + @BeforeAll public static void setUp() { final X9ECParameters params = SECNamedCurves.getByName(CURVE_NAME); curve = new ECDomainParameters(params.getCurve(), params.getG(), params.getN(), params.getH()); } - @Before + @BeforeEach public void before() { SignatureAlgorithmFactory.resetInstance(); } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/TomlConfigFileDefaultProviderTest.java b/besu/src/test/java/org/hyperledger/besu/cli/TomlConfigFileDefaultProviderTest.java index 1481db9526d..aba969e189f 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/TomlConfigFileDefaultProviderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/TomlConfigFileDefaultProviderTest.java @@ -26,28 +26,29 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; import picocli.CommandLine.Model.CommandSpec; import picocli.CommandLine.Model.OptionSpec; import picocli.CommandLine.ParameterException; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TomlConfigFileDefaultProviderTest { @Mock CommandLine mockCommandLine; @Mock CommandSpec mockCommandSpec; - @Rule public final TemporaryFolder temp = new TemporaryFolder(); + @TempDir public Path temp; @Test public void defaultValueForMatchingKey() throws IOException { @@ -58,7 +59,7 @@ public void defaultValueForMatchingKey() throws IOException { validOptionsMap.put("--a-longer-option", null); when(mockCommandSpec.optionsMap()).thenReturn(validOptionsMap); - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); try (final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8)) { @@ -124,7 +125,7 @@ public void defaultValueForOptionMustMatchType() throws IOException { when(mockCommandSpec.optionsMap()).thenReturn(validOptionsMap); - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); try (final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8)) { @@ -240,7 +241,7 @@ public void configFileNotFoundMustThrow() { @Test public void invalidConfigMustThrow() throws IOException { - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); final TomlConfigFileDefaultProvider providerUnderTest = new TomlConfigFileDefaultProvider(mockCommandLine, tempConfigFile); @@ -256,7 +257,7 @@ public void invalidConfigMustThrow() throws IOException { @Test public void invalidConfigContentMustThrow() throws IOException { - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8); fileWriter.write("an-invalid-syntax=======...."); @@ -282,7 +283,7 @@ public void unknownOptionMustThrow() throws IOException { Map validOptionsMap = new HashMap<>(); when(mockCommandSpec.optionsMap()).thenReturn(validOptionsMap); - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8); fileWriter.write("invalid_option=true"); @@ -310,7 +311,7 @@ public void tomlTableHeadingsMustBeIgnored() throws IOException { validOptionsMap.put("--onemore-valid-option", null); when(mockCommandSpec.optionsMap()).thenReturn(validOptionsMap); - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8); fileWriter.write("a-valid-option=123"); @@ -351,7 +352,7 @@ public void tomlTableHeadingsMustNotSkipValidationOfUnknownOptions() throws IOEx validOptionsMap.put("--a-valid-option", null); when(mockCommandSpec.optionsMap()).thenReturn(validOptionsMap); - final File tempConfigFile = temp.newFile("config.toml"); + final File tempConfigFile = temp.resolve("config.toml").toFile(); final BufferedWriter fileWriter = Files.newBufferedWriter(tempConfigFile.toPath(), UTF_8); fileWriter.write("[ignoreme]"); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java index dc8d0548e0c..ac6efbf405b 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java @@ -25,12 +25,12 @@ import java.nio.file.Path; import com.google.common.io.Resources; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.CommandSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ValidateConfigSubCommandTest extends CommandTestAbstract { private static final String EXPECTED_PUBLIC_KEY_USAGE = diff --git a/besu/src/test/java/org/hyperledger/besu/cli/config/EthNetworkConfigTest.java b/besu/src/test/java/org/hyperledger/besu/cli/config/EthNetworkConfigTest.java index 66e8592b5e4..729c37c88fe 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/config/EthNetworkConfigTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/config/EthNetworkConfigTest.java @@ -23,11 +23,13 @@ import java.math.BigInteger; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -@RunWith(MockitoJUnitRunner.class) +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) public class EthNetworkConfigTest { @Test diff --git a/besu/src/test/java/org/hyperledger/besu/cli/converter/FractionConverterTest.java b/besu/src/test/java/org/hyperledger/besu/cli/converter/FractionConverterTest.java index 022bca1ec27..1e09942509b 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/converter/FractionConverterTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/converter/FractionConverterTest.java @@ -19,11 +19,12 @@ import org.hyperledger.besu.cli.converter.exception.FractionConversionException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; -@RunWith(MockitoJUnitRunner.class) +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) public class FractionConverterTest { private final FractionConverter fractionConverter = new FractionConverter(); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/converter/MetricCategoryConverterTest.java b/besu/src/test/java/org/hyperledger/besu/cli/converter/MetricCategoryConverterTest.java index db34fb9d5e4..d63abc014ae 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/converter/MetricCategoryConverterTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/converter/MetricCategoryConverterTest.java @@ -20,20 +20,21 @@ import org.hyperledger.besu.plugin.services.metrics.MetricCategory; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class MetricCategoryConverterTest { private MetricCategoryConverter metricCategoryConverter; @Mock MetricCategory metricCategory; - @Before + @BeforeEach public void setUp() { metricCategoryConverter = new MetricCategoryConverter(); } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/converter/PercentageConverterTest.java b/besu/src/test/java/org/hyperledger/besu/cli/converter/PercentageConverterTest.java index 6fc6f9dc7e7..c387bb12832 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/converter/PercentageConverterTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/converter/PercentageConverterTest.java @@ -19,11 +19,12 @@ import org.hyperledger.besu.cli.converter.exception.PercentageConversionException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -@RunWith(MockitoJUnitRunner.class) +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) public class PercentageConverterTest { private final PercentageConverter percentageConverter = new PercentageConverter(); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/custom/RpcAuthFileValidatorTest.java b/besu/src/test/java/org/hyperledger/besu/cli/custom/RpcAuthFileValidatorTest.java index 714086245a4..42f7e125195 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/custom/RpcAuthFileValidatorTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/custom/RpcAuthFileValidatorTest.java @@ -17,14 +17,18 @@ import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import org.junit.Test; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; import picocli.CommandLine.ParameterException; -@RunWith(MockitoJUnitRunner.StrictStubs.class) +//TODO @RunWith(MockitoJUnitRunner.StrictStubs.class) +@ExtendWith(MockitoExtension.class) public class RpcAuthFileValidatorTest { private static final String CORRECT_TOML = "/rpcauth/auth_correct.toml"; diff --git a/besu/src/test/java/org/hyperledger/besu/cli/operator/OperatorSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/operator/OperatorSubCommandTest.java index 414412ebb4a..569219cb687 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/operator/OperatorSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/operator/OperatorSubCommandTest.java @@ -52,13 +52,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.vertx.core.json.JsonObject; import org.apache.tuweni.bytes.Bytes32; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.CommandSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class OperatorSubCommandTest extends CommandTestAbstract { private static final String EXPECTED_OPERATOR_USAGE = @@ -80,7 +81,7 @@ public class OperatorSubCommandTest extends CommandTestAbstract { private Path tmpOutputDirectoryPath; - @Before + @BeforeEach public void init() throws IOException { SignatureAlgorithmFactory.resetInstance(); tmpOutputDirectoryPath = createTempDirectory(format("output-%d", currentTimeMillis())); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/AbstractCLIOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/AbstractCLIOptionsTest.java index 91d7e35c39c..adf1675c312 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/AbstractCLIOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/AbstractCLIOptionsTest.java @@ -18,12 +18,11 @@ import static org.assertj.core.api.Assertions.assertThat; import org.hyperledger.besu.cli.CommandTestAbstract; +import org.junit.jupiter.api.Test; import java.util.Collections; import java.util.List; -import org.junit.Test; - public abstract class AbstractCLIOptionsTest> extends CommandTestAbstract { @Test diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/EthProtocolOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/EthProtocolOptionsTest.java index 1dc6f0329fb..5f53b900b54 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/EthProtocolOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/EthProtocolOptionsTest.java @@ -20,12 +20,12 @@ import org.hyperledger.besu.cli.options.unstable.EthProtocolOptions; import org.hyperledger.besu.ethereum.eth.EthProtocolConfiguration; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class EthProtocolOptionsTest extends AbstractCLIOptionsTest { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/MetricsCLIOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/MetricsCLIOptionsTest.java index 5bcaaa553fc..e2724635d48 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/MetricsCLIOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/MetricsCLIOptionsTest.java @@ -17,10 +17,10 @@ import org.hyperledger.besu.cli.options.unstable.MetricsCLIOptions; import org.hyperledger.besu.metrics.prometheus.MetricsConfiguration; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class MetricsCLIOptionsTest extends AbstractCLIOptionsTest { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/NetworkingOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/NetworkingOptionsTest.java index c59747dac73..057946bad01 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/NetworkingOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/NetworkingOptionsTest.java @@ -23,11 +23,11 @@ import java.util.Arrays; import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class NetworkingOptionsTest extends AbstractCLIOptionsTest { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/OptionParserTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/OptionParserTest.java index 7dbb3958c2c..fd648905908 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/OptionParserTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/OptionParserTest.java @@ -21,11 +21,11 @@ import com.google.common.collect.Range; import org.apache.tuweni.units.bigints.UInt256; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class OptionParserTest { @Test diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/SynchronizerOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/SynchronizerOptionsTest.java index affb5a9d4d3..4b6eff62d23 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/SynchronizerOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/SynchronizerOptionsTest.java @@ -23,10 +23,10 @@ import java.util.List; import com.google.common.collect.Range; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class SynchronizerOptionsTest extends AbstractCLIOptionsTest { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/TransactionPoolOptionsTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/TransactionPoolOptionsTest.java index 5a235524c6a..85f72a09ae0 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/TransactionPoolOptionsTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/TransactionPoolOptionsTest.java @@ -23,11 +23,11 @@ import java.time.Duration; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TransactionPoolOptionsTest extends AbstractCLIOptionsTest< ImmutableTransactionPoolConfiguration.Builder, TransactionPoolOptions> { diff --git a/besu/src/test/java/org/hyperledger/besu/cli/options/stable/LoggingLevelOptionTest.java b/besu/src/test/java/org/hyperledger/besu/cli/options/stable/LoggingLevelOptionTest.java index 4d0a67e75ca..18b09434dee 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/options/stable/LoggingLevelOptionTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/options/stable/LoggingLevelOptionTest.java @@ -21,8 +21,8 @@ import java.util.Arrays; import org.apache.logging.log4j.Level; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; import picocli.CommandLine.Model.CommandSpec; import picocli.CommandLine.ParameterException; @@ -31,7 +31,7 @@ public class LoggingLevelOptionTest { private LoggingLevelOption levelOption; - @Before + @BeforeEach public void setUp() { levelOption = new LoggingLevelOption(); } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/rlp/RLPSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/rlp/RLPSubCommandTest.java index 822c7322718..ede71ce7a04 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/rlp/RLPSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/rlp/RLPSubCommandTest.java @@ -27,8 +27,8 @@ import java.io.IOException; import java.nio.file.Files; -import org.junit.After; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; import picocli.CommandLine.Model.CommandSpec; public class RLPSubCommandTest extends CommandTestAbstract { @@ -160,7 +160,7 @@ public void encodeWithOutputFileMustWriteInThisFile() throws Exception { @Test public void encodeWithInputFilePathMustReadFromThisFile() throws Exception { - final File tempJsonFile = temp.newFile("test.json"); + final File tempJsonFile = temp.resolve("test.json").toFile(); try (final BufferedWriter fileWriter = Files.newBufferedWriter(tempJsonFile.toPath(), UTF_8)) { fileWriter.write( @@ -181,7 +181,7 @@ public void encodeWithInputFilePathMustReadFromThisFile() throws Exception { @Test public void canEncodeToQbftExtraData() throws IOException { - final File tempJsonFile = temp.newFile("test.json"); + final File tempJsonFile = temp.resolve("test.json").toFile(); try (final BufferedWriter fileWriter = Files.newBufferedWriter(tempJsonFile.toPath(), UTF_8)) { fileWriter.write( @@ -208,7 +208,7 @@ public void canEncodeToQbftExtraData() throws IOException { @Test public void encodeWithInvalidInputMustRaiseAnError() throws Exception { - final File tempJsonFile = temp.newFile("invalid_test.json"); + final File tempJsonFile = temp.resolve("invalid_test.json").toFile(); try (final BufferedWriter fileWriter = Files.newBufferedWriter(tempJsonFile.toPath(), UTF_8)) { fileWriter.write("{\"property\":0}"); @@ -228,7 +228,7 @@ public void encodeWithInvalidInputMustRaiseAnError() throws Exception { @Test public void encodeWithEmptyInputMustRaiseAnError() throws Exception { - final File tempJsonFile = temp.newFile("empty.json"); + final File tempJsonFile = temp.resolve("empty.json").toFile(); parseCommand(RLP_SUBCOMMAND_NAME, RLP_ENCODE_SUBCOMMAND_NAME, "--from", tempJsonFile.getPath()); @@ -251,7 +251,7 @@ public void encodeWithEmptyStdInputMustRaiseAnError() throws Exception { .startsWith("An error occurred while trying to read the JSON data."); } - @After + @AfterEach public void restoreStdin() { System.setIn(System.in); } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommandTest.java index 6a0b5592d27..35fa641fc8d 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommandTest.java @@ -36,17 +36,17 @@ import java.nio.file.Paths; import java.util.Optional; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine.Model.CommandSpec; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BlocksSubCommandTest extends CommandTestAbstract { - @Rule public final TemporaryFolder folder = new TemporaryFolder(); + @TempDir public Path folder; private static final String EXPECTED_BLOCK_USAGE = "Usage: besu blocks [-hV] [COMMAND]" @@ -187,7 +187,7 @@ public void callingBlockImportSubCommandVersionMustDisplayVersion() { @Test public void callingBlockImportSubCommandWithPathMustImportBlocksWithThisPath() throws Exception { - final File fileToImport = temp.newFile("blocks.file"); + final File fileToImport = temp.resolve("blocks.file").toFile(); parseCommand( BLOCK_SUBCOMMAND_NAME, BLOCK_IMPORT_SUBCOMMAND_NAME, "--from", fileToImport.getPath()); @@ -202,7 +202,7 @@ public void callingBlockImportSubCommandWithPathMustImportBlocksWithThisPath() t @Test public void blocksImport_rlpFormat() throws Exception { - final File fileToImport = temp.newFile("blocks.file"); + final File fileToImport = temp.resolve("blocks.file").toFile(); parseCommand( BLOCK_SUBCOMMAND_NAME, BLOCK_IMPORT_SUBCOMMAND_NAME, @@ -222,9 +222,9 @@ public void blocksImport_rlpFormat() throws Exception { @Test public void blocksImport_rlpFormatMultiple() throws Exception { - final File fileToImport = temp.newFile("blocks.file"); - final File file2ToImport = temp.newFile("blocks2.file"); - final File file3ToImport = temp.newFile("blocks3.file"); + final File fileToImport = temp.resolve("blocks.file").toFile(); + final File file2ToImport = temp.resolve("blocks2.file").toFile(); + final File file3ToImport = temp.resolve("blocks3.file").toFile(); parseCommand( BLOCK_SUBCOMMAND_NAME, BLOCK_IMPORT_SUBCOMMAND_NAME, @@ -248,7 +248,7 @@ public void blocksImport_rlpFormatMultiple() throws Exception { @Test public void blocksImport_jsonFormat() throws Exception { final String fileContent = "test"; - final File fileToImport = temp.newFile("blocks.file"); + final File fileToImport = temp.resolve("blocks.file").toFile(); final Writer fileWriter = Files.newBufferedWriter(fileToImport.toPath(), UTF_8); fileWriter.write(fileContent); fileWriter.close(); @@ -273,7 +273,7 @@ public void blocksImport_jsonFormat() throws Exception { public void blocksExport_missingFileParam() throws IOException { createDbDirectory(true); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME); final String expectedErrorOutputStart = "Missing required option: '--to='"; @@ -285,16 +285,16 @@ public void blocksExport_missingFileParam() throws IOException { @Test public void blocksExport_noDbDirectory() throws IOException { - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", outputFile.getPath()); final String expectedErrorOutputStart = "Chain is empty. Unable to export blocks from specified data directory: " - + folder.getRoot().getAbsolutePath() + + folder.getRoot().toAbsolutePath() + File.separator + BesuController.DATABASE_PATH; assertThat(commandOutput.toString(UTF_8)).isEmpty(); @@ -306,16 +306,16 @@ public void blocksExport_noDbDirectory() throws IOException { @Test public void blocksExport_emptyDbDirectory() throws IOException { createDbDirectory(false); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", outputFile.getPath()); final String expectedErrorOutputStart = "Chain is empty. Unable to export blocks from specified data directory: " - + folder.getRoot().getAbsolutePath() + + folder.getRoot().toAbsolutePath() + File.separator + BesuController.DATABASE_PATH; assertThat(commandOutput.toString(UTF_8)).isEmpty(); @@ -327,9 +327,9 @@ public void blocksExport_emptyDbDirectory() throws IOException { @Test public void blocksExport_noStartOrEnd() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -343,9 +343,9 @@ public void blocksExport_noStartOrEnd() throws IOException { @Test public void blocksExport_withStartAndNoEnd() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -360,9 +360,9 @@ public void blocksExport_withStartAndNoEnd() throws IOException { @Test public void blocksExport_withEndAndNoStart() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -377,9 +377,9 @@ public void blocksExport_withEndAndNoStart() throws IOException { @Test public void blocksExport_withStartAndEnd() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -395,9 +395,9 @@ public void blocksExport_withStartAndEnd() throws IOException { @Test public void blocksExport_withOutOfOrderStartAndEnd() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -414,9 +414,9 @@ public void blocksExport_withOutOfOrderStartAndEnd() throws IOException { @Test public void blocksExport_withEmptyRange() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -433,9 +433,9 @@ public void blocksExport_withEmptyRange() throws IOException { @Test public void blocksExport_withInvalidStart() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -451,9 +451,9 @@ public void blocksExport_withInvalidStart() throws IOException { @Test public void blocksExport_withInvalidEnd() throws IOException { createDbDirectory(true); - final File outputFile = folder.newFile("blocks.bin"); + final File outputFile = folder.resolve("blocks.bin").toFile(); parseCommand( - "--data-path=" + folder.getRoot().getAbsolutePath(), + "--data-path=" + folder.getRoot().toAbsolutePath(), BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--to", @@ -481,7 +481,7 @@ public void callingBlockExportSubCommandVersionMustDisplayVersion() { } private void createDbDirectory(final boolean createDataFiles) throws IOException { - final File dbDir = folder.newFolder(BesuController.DATABASE_PATH); + final File dbDir = folder.resolve(BesuController.DATABASE_PATH).toFile(); if (createDataFiles) { final Path dataFilePath = Paths.get(dbDir.getAbsolutePath(), "0000001.sst"); final boolean success = new File(dataFilePath.toString()).createNewFile(); @@ -491,7 +491,7 @@ private void createDbDirectory(final boolean createDataFiles) throws IOException @Test public void blocksImportWithNoSyncModeDoesNotRaiseNPE() throws IOException { - final File fileToImport = temp.newFile("blocks.file"); + final File fileToImport = temp.resolve("blocks.file").toFile(); parseCommand( BLOCK_SUBCOMMAND_NAME, BLOCK_IMPORT_SUBCOMMAND_NAME, "--from", fileToImport.getPath()); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/subcommands/storage/StorageSubCommandTest.java b/besu/src/test/java/org/hyperledger/besu/cli/subcommands/storage/StorageSubCommandTest.java index a8a1bedc649..c86b4b62fea 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/subcommands/storage/StorageSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/subcommands/storage/StorageSubCommandTest.java @@ -31,11 +31,11 @@ import org.hyperledger.besu.ethereum.storage.keyvalue.KeyValueSegmentIdentifier; import org.hyperledger.besu.services.kvstore.InMemoryKeyValueStorage; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.Silent.class) +@ExtendWith(MockitoExtension.class) public class StorageSubCommandTest extends CommandTestAbstract { @Test diff --git a/besu/src/test/java/org/hyperledger/besu/cli/util/BesuCommandCustomFactoryTest.java b/besu/src/test/java/org/hyperledger/besu/cli/util/BesuCommandCustomFactoryTest.java index d83fa43a655..f3494b506b0 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/util/BesuCommandCustomFactoryTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/util/BesuCommandCustomFactoryTest.java @@ -22,18 +22,18 @@ import java.util.Arrays; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BesuCommandCustomFactoryTest { @Mock private PluginVersionsProvider pluginVersionsProvider; - @Before + @BeforeEach public void initMocks() { when(pluginVersionsProvider.getPluginVersions()).thenReturn(Arrays.asList("v1", "v2")); } diff --git a/besu/src/test/java/org/hyperledger/besu/cli/util/ConfigOptionSearchAndRunHandlerTest.java b/besu/src/test/java/org/hyperledger/besu/cli/util/ConfigOptionSearchAndRunHandlerTest.java index 0f0c1e696a3..19ce71a2ddc 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/util/ConfigOptionSearchAndRunHandlerTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/util/ConfigOptionSearchAndRunHandlerTest.java @@ -28,18 +28,19 @@ import java.io.File; import java.io.IOException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; import picocli.CommandLine.IDefaultValueProvider; import picocli.CommandLine.IExecutionStrategy; @@ -49,11 +50,11 @@ import picocli.CommandLine.ParseResult; import picocli.CommandLine.RunLast; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConfigOptionSearchAndRunHandlerTest { private static final String CONFIG_FILE_OPTION_NAME = "--config-file"; - @Rule public final TemporaryFolder temp = new TemporaryFolder(); + @TempDir public Path temp; private LoggingLevelOption levelOption; private final IExecutionStrategy resultHandler = new RunLast(); @@ -68,7 +69,7 @@ public class ConfigOptionSearchAndRunHandlerTest { @Mock IGetter mockConfigOptionGetter; @Mock BesuParameterExceptionHandler mockParameterExceptionHandler; - @Before + @BeforeEach public void initMocks() { when(mockCommandSpec.commandLine()).thenReturn(mockCommandLine); when(mockParseResult.commandSpec()).thenReturn(mockCommandSpec); @@ -87,7 +88,7 @@ public void initMocks() { @Test public void handleWithCommandLineOption() throws Exception { - when(mockConfigOptionGetter.get()).thenReturn(temp.newFile()); + when(mockConfigOptionGetter.get()).thenReturn(temp.toFile()); final List result = configParsingHandler.handle(mockParseResult); verify(mockCommandLine).setDefaultValueProvider(any(IDefaultValueProvider.class)); verify(mockCommandLine).setExecutionStrategy(eq(resultHandler)); @@ -105,7 +106,7 @@ public void handleWithEnvironmentVariable() throws IOException { new ConfigOptionSearchAndRunHandler( resultHandler, mockParameterExceptionHandler, - singletonMap("BESU_CONFIG_FILE", temp.newFile().getAbsolutePath())); + singletonMap("BESU_CONFIG_FILE", temp.toFile().getAbsolutePath())); when(mockParseResult.hasMatchedOption(CONFIG_FILE_OPTION_NAME)).thenReturn(false); @@ -160,7 +161,7 @@ public void handleThrowsErrorWithWithEnvironmentVariableAndCommandLineSpecified( new ConfigOptionSearchAndRunHandler( resultHandler, mockParameterExceptionHandler, - singletonMap("BESU_CONFIG_FILE", temp.newFile().getAbsolutePath())); + singletonMap("BESU_CONFIG_FILE", temp.toFile().getAbsolutePath())); when(mockParseResult.hasMatchedOption(CONFIG_FILE_OPTION_NAME)).thenReturn(true); diff --git a/besu/src/test/java/org/hyperledger/besu/cli/util/VersionProviderTest.java b/besu/src/test/java/org/hyperledger/besu/cli/util/VersionProviderTest.java index 6fba9cf66a4..57f16c90210 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/util/VersionProviderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/util/VersionProviderTest.java @@ -23,12 +23,12 @@ import java.util.Collections; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class VersionProviderTest { @Mock private PluginVersionsProvider pluginVersionsProvider; diff --git a/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerBuilderTest.java b/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerBuilderTest.java index bd8d06d2a5e..b902ed6ae85 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerBuilderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerBuilderTest.java @@ -58,21 +58,21 @@ import org.hyperledger.besu.services.kvstore.InMemoryKeyValueStorage; import java.math.BigInteger; +import java.nio.file.Path; import java.time.Clock; import java.util.OptionalLong; import com.google.common.collect.Range; import org.apache.tuweni.bytes.Bytes; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.Answers; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BesuControllerBuilderTest { private BesuControllerBuilder besuControllerBuilder; @@ -98,9 +98,8 @@ public class BesuControllerBuilderTest { BigInteger networkId = BigInteger.ONE; - @Rule public final TemporaryFolder tempDirRule = new TemporaryFolder(); - - @Before + @TempDir public Path tempDirRule; + @BeforeEach public void setup() { when(genesisConfigFile.getParentHash()).thenReturn(Hash.ZERO.toHexString()); when(genesisConfigFile.getDifficulty()).thenReturn(Bytes.of(0).toHexString()); @@ -152,7 +151,7 @@ BesuControllerBuilder visitWithMockConfigs(final BesuControllerBuilder builder) .miningParameters(miningParameters) .metricsSystem(observableMetricsSystem) .privacyParameters(privacyParameters) - .dataDirectory(tempDirRule.getRoot().toPath()) + .dataDirectory(tempDirRule.getRoot()) .clock(clock) .transactionPoolConfiguration(poolConfiguration) .nodeKey(nodeKey) diff --git a/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerTest.java b/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerTest.java index e6b631a4e88..29667c9c0bf 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/BesuControllerTest.java @@ -37,13 +37,13 @@ import java.util.OptionalLong; import com.google.common.io.Resources; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.Spy; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BesuControllerTest { @Spy private GenesisConfigFile genesisConfigFile = GenesisConfigFile.mainnet(); diff --git a/besu/src/test/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilderTest.java b/besu/src/test/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilderTest.java index 4e1d87f4a68..cf98ec49add 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/ConsensusScheduleBesuControllerBuilderTest.java @@ -54,13 +54,13 @@ import java.util.function.BiFunction; import org.assertj.core.api.SoftAssertions; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConsensusScheduleBesuControllerBuilderTest { private @Mock BiFunction< NavigableSet>, Optional, ProtocolSchedule> diff --git a/besu/src/test/java/org/hyperledger/besu/controller/MergeBesuControllerBuilderTest.java b/besu/src/test/java/org/hyperledger/besu/controller/MergeBesuControllerBuilderTest.java index 15fb3fd3ec2..9ceeddda64b 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/MergeBesuControllerBuilderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/MergeBesuControllerBuilderTest.java @@ -61,6 +61,7 @@ import org.hyperledger.besu.services.kvstore.InMemoryKeyValueStorage; import java.math.BigInteger; +import java.nio.file.Path; import java.time.Clock; import java.util.Collections; import java.util.Optional; @@ -70,15 +71,15 @@ import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.bytes.Bytes32; import org.apache.tuweni.units.bigints.UInt256; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class MergeBesuControllerBuilderTest { private MergeBesuControllerBuilder besuControllerBuilder; @@ -102,10 +103,9 @@ public class MergeBesuControllerBuilderTest { BigInteger networkId = BigInteger.ONE; private final BlockHeaderTestFixture headerGenerator = new BlockHeaderTestFixture(); private final BaseFeeMarket feeMarket = new LondonFeeMarket(0, Optional.of(Wei.of(42))); - - @Rule public final TemporaryFolder tempDirRule = new TemporaryFolder(); - - @Before + @TempDir + public Path tempDirRule; + @BeforeEach public void setup() { when(genesisConfigFile.getParentHash()).thenReturn(Hash.ZERO.toHexString()); when(genesisConfigFile.getDifficulty()).thenReturn(Bytes.of(0).toHexString()); @@ -160,7 +160,7 @@ MergeBesuControllerBuilder visitWithMockConfigs(final MergeBesuControllerBuilder .miningParameters(miningParameters) .metricsSystem(observableMetricsSystem) .privacyParameters(privacyParameters) - .dataDirectory(tempDirRule.getRoot().toPath()) + .dataDirectory(tempDirRule.getRoot()) .clock(clock) .transactionPoolConfiguration(poolConfiguration) .nodeKey(nodeKey) diff --git a/besu/src/test/java/org/hyperledger/besu/controller/QbftBesuControllerBuilderTest.java b/besu/src/test/java/org/hyperledger/besu/controller/QbftBesuControllerBuilderTest.java index 395abeb22d6..e441a26ee74 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/QbftBesuControllerBuilderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/QbftBesuControllerBuilderTest.java @@ -56,20 +56,20 @@ import org.hyperledger.besu.services.kvstore.InMemoryKeyValueStorage; import java.math.BigInteger; +import java.nio.file.Path; import java.time.Clock; import java.util.List; import com.google.common.collect.Range; import org.apache.tuweni.bytes.Bytes; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class QbftBesuControllerBuilderTest { private BesuControllerBuilder qbftBesuControllerBuilder; @@ -91,9 +91,9 @@ public class QbftBesuControllerBuilderTest { private static final BigInteger networkId = BigInteger.ONE; private static final NodeKey nodeKey = NodeKeyUtils.generate(); - @Rule public final TemporaryFolder tempDirRule = new TemporaryFolder(); + @TempDir public Path tempDirRule; - @Before + @BeforeEach public void setup() { // besu controller setup when(genesisConfigFile.getParentHash()).thenReturn(Hash.ZERO.toHexString()); @@ -142,7 +142,7 @@ public void setup() { .miningParameters(miningParameters) .metricsSystem(observableMetricsSystem) .privacyParameters(privacyParameters) - .dataDirectory(tempDirRule.getRoot().toPath()) + .dataDirectory(tempDirRule.getRoot()) .clock(clock) .transactionPoolConfiguration(poolConfiguration) .nodeKey(nodeKey) diff --git a/besu/src/test/java/org/hyperledger/besu/controller/TransitionControllerBuilderTest.java b/besu/src/test/java/org/hyperledger/besu/controller/TransitionControllerBuilderTest.java index 9fc337095f2..9b80bb26352 100644 --- a/besu/src/test/java/org/hyperledger/besu/controller/TransitionControllerBuilderTest.java +++ b/besu/src/test/java/org/hyperledger/besu/controller/TransitionControllerBuilderTest.java @@ -50,17 +50,17 @@ import java.util.Optional; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; /** * We only bother testing transitionControllerBuilder for PoW and Clique since those are the only * network types that are transitioning to PoS. */ -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class TransitionControllerBuilderTest { @Mock ProtocolSchedule preMergeProtocolSchedule; @@ -80,7 +80,7 @@ public class TransitionControllerBuilderTest { TransitionProtocolSchedule transitionProtocolSchedule; - @Before + @BeforeEach public void setup() { transitionProtocolSchedule = spy( diff --git a/besu/src/test/java/org/hyperledger/besu/services/BesuEventsImplTest.java b/besu/src/test/java/org/hyperledger/besu/services/BesuEventsImplTest.java index 68170f3258c..d97c3558a9c 100644 --- a/besu/src/test/java/org/hyperledger/besu/services/BesuEventsImplTest.java +++ b/besu/src/test/java/org/hyperledger/besu/services/BesuEventsImplTest.java @@ -76,14 +76,15 @@ import com.google.common.base.Supplier; import com.google.common.base.Suppliers; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; @SuppressWarnings("unchecked") -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class BesuEventsImplTest { private static final Supplier SIGNATURE_ALGORITHM = @@ -109,7 +110,7 @@ public class BesuEventsImplTest { private MutableBlockchain blockchain; private final BlockDataGenerator gen = new BlockDataGenerator(); - @Before + @BeforeEach public void setUp() { blockchain = DefaultBlockchain.createMutable( diff --git a/besu/src/test/java/org/hyperledger/besu/services/PicoCLIOptionsImplTest.java b/besu/src/test/java/org/hyperledger/besu/services/PicoCLIOptionsImplTest.java index ac7e7fb9593..52f37f769a9 100644 --- a/besu/src/test/java/org/hyperledger/besu/services/PicoCLIOptionsImplTest.java +++ b/besu/src/test/java/org/hyperledger/besu/services/PicoCLIOptionsImplTest.java @@ -17,16 +17,16 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.junit.MockitoJUnitRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; import picocli.CommandLine.UnmatchedArgumentException; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class PicoCLIOptionsImplTest { @Command @@ -46,7 +46,7 @@ static final class MixinOptions { private CommandLine commandLine; private PicoCLIOptionsImpl serviceImpl; - @Before + @BeforeEach public void setUp() { command = new SimpleCommand(); mixin = new MixinOptions();