diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PasswordSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PasswordSubCommand.java index 017917b844fb..27004c7e47fc 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PasswordSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PasswordSubCommand.java @@ -19,6 +19,7 @@ import org.hyperledger.besu.cli.BesuCommand; import org.hyperledger.besu.cli.subcommands.PasswordSubCommand.HashSubCommand; +import org.hyperledger.besu.cli.util.VersionProvider; import java.io.PrintStream; @@ -33,6 +34,7 @@ name = COMMAND_NAME, description = "This command provides password related actions.", mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class, subcommands = {HashSubCommand.class}) public class PasswordSubCommand implements Runnable { @@ -60,7 +62,8 @@ public void run() { @Command( name = "hash", description = "This command generates the hash of a given password.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class HashSubCommand implements Runnable { @SuppressWarnings({"FieldCanBeFinal", "FieldMayBeFinal"}) // PicoCLI requires non-final Strings. diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PublicKeySubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PublicKeySubCommand.java index 33f78a6eecb5..8dd3ac0b9ada 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PublicKeySubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/PublicKeySubCommand.java @@ -23,6 +23,7 @@ import org.hyperledger.besu.cli.options.stable.NodePrivateKeyFileOption; import org.hyperledger.besu.cli.subcommands.PublicKeySubCommand.AddressSubCommand; import org.hyperledger.besu.cli.subcommands.PublicKeySubCommand.ExportSubCommand; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.crypto.KeyPair; import org.hyperledger.besu.crypto.SignatureAlgorithmFactory; import org.hyperledger.besu.crypto.SignatureAlgorithmType; @@ -51,6 +52,7 @@ name = COMMAND_NAME, description = "This command provides node public key related actions.", mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class, subcommands = {ExportSubCommand.class, AddressSubCommand.class}) public class PublicKeySubCommand implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(PublicKeySubCommand.class); @@ -87,7 +89,8 @@ public void run() { @Command( name = "export", description = "This command outputs the node public key. Default output is standard output.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class ExportSubCommand extends KeyPairSubcommand implements Runnable { @Option( @@ -117,7 +120,8 @@ public void run() { description = "This command outputs the node's account address. " + "Default output is standard output.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class AddressSubCommand extends KeyPairSubcommand implements Runnable { @Option( diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/RetestethSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/RetestethSubCommand.java index 3a221dcc5bf8..e63cf9667398 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/RetestethSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/RetestethSubCommand.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.cli.DefaultCommandValues; import org.hyperledger.besu.cli.custom.JsonRPCAllowlistHostsProperty; import org.hyperledger.besu.cli.options.stable.LoggingLevelOption; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.ethereum.api.jsonrpc.JsonRpcConfiguration; import org.hyperledger.besu.ethereum.retesteth.RetestethConfiguration; import org.hyperledger.besu.ethereum.retesteth.RetestethService; @@ -38,7 +39,8 @@ @Command( name = COMMAND_NAME, description = "Run a Retesteth compatible server for reference tests.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) @SuppressWarnings("unused") public class RetestethSubCommand implements Runnable { diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/ValidateConfigSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/ValidateConfigSubCommand.java index 45379af909ac..53202ba092bb 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/ValidateConfigSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/ValidateConfigSubCommand.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.cli.BesuCommand; import org.hyperledger.besu.cli.DefaultCommandValues; import org.hyperledger.besu.cli.util.TomlConfigFileDefaultProvider; +import org.hyperledger.besu.cli.util.VersionProvider; import java.io.PrintStream; import java.nio.file.Path; @@ -32,7 +33,8 @@ @Command( name = COMMAND_NAME, description = "This command provides basic Besu config validation (syntax only).", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) public class ValidateConfigSubCommand implements Runnable { public static final String COMMAND_NAME = "validate-config"; diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommand.java index fd016a9a015b..e36f1bfec3b9 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommand.java @@ -28,6 +28,7 @@ import org.hyperledger.besu.cli.DefaultCommandValues; import org.hyperledger.besu.cli.subcommands.blocks.BlocksSubCommand.ExportSubCommand; import org.hyperledger.besu.cli.subcommands.blocks.BlocksSubCommand.ImportSubCommand; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.controller.BesuController; import org.hyperledger.besu.datatypes.Address; import org.hyperledger.besu.datatypes.Wei; @@ -73,6 +74,7 @@ name = COMMAND_NAME, description = "This command provides blocks related actions.", mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class, subcommands = {ImportSubCommand.class, ExportSubCommand.class}) public class BlocksSubCommand implements Runnable { @@ -118,7 +120,8 @@ public void run() { @Command( name = "import", description = "This command imports blocks from a file into the database.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class ImportSubCommand implements Runnable { @SuppressWarnings("unused") @ParentCommand @@ -302,7 +305,8 @@ private void importRlpBlocks(final BesuController controller, final Path path) @Command( name = "export", description = "This command exports a specific block, or list of blocks from storage.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class ExportSubCommand implements Runnable { @SuppressWarnings("unused") @ParentCommand diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/BackupState.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/BackupState.java index b17a7370091e..9bb0a2f03349 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/BackupState.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/BackupState.java @@ -20,6 +20,7 @@ import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_LONG_FORMAT_HELP; import org.hyperledger.besu.BesuInfo; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.controller.BesuController; import org.hyperledger.besu.ethereum.api.query.StateBackupService; import org.hyperledger.besu.ethereum.api.query.StateBackupService.BackupStatus; @@ -41,7 +42,8 @@ @Command( name = "x-backup-state", description = "Backs up the state and accounts at a specified block.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) public class BackupState implements Runnable { @Option( diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateBlockchainConfig.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateBlockchainConfig.java index b9a5e09ab4ea..0fe2b2f2cf80 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateBlockchainConfig.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateBlockchainConfig.java @@ -18,6 +18,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import org.hyperledger.besu.cli.DefaultCommandValues; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.config.GenesisConfigFile; import org.hyperledger.besu.config.GenesisConfigOptions; import org.hyperledger.besu.config.JsonGenesisConfigOptions; @@ -61,7 +62,8 @@ @Command( name = "generate-blockchain-config", description = "Generates node keypairs and genesis file with RLP encoded extra data.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) class GenerateBlockchainConfig implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(GenerateBlockchainConfig.class); diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateLogBloomCache.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateLogBloomCache.java index 4fe584f922e1..e9158692dfe0 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateLogBloomCache.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/GenerateLogBloomCache.java @@ -21,6 +21,7 @@ import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_LONG_FORMAT_HELP; import static org.hyperledger.besu.ethereum.api.query.cache.TransactionLogBloomCacher.BLOCKS_PER_BLOOM_CACHE; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.controller.BesuController; import org.hyperledger.besu.ethereum.api.query.cache.TransactionLogBloomCacher; import org.hyperledger.besu.ethereum.chain.MutableBlockchain; @@ -36,7 +37,8 @@ @Command( name = "generate-log-bloom-cache", description = "Generate cached values of block log bloom filters.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) public class GenerateLogBloomCache implements Runnable { @Option( diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/OperatorSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/OperatorSubCommand.java index a91da803ac67..f785a4e1244b 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/OperatorSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/OperatorSubCommand.java @@ -17,6 +17,7 @@ import static org.hyperledger.besu.cli.subcommands.operator.OperatorSubCommand.COMMAND_NAME; import org.hyperledger.besu.cli.BesuCommand; +import org.hyperledger.besu.cli.util.VersionProvider; import java.io.PrintStream; @@ -30,6 +31,7 @@ name = COMMAND_NAME, description = "Operator related actions such as generating configuration and caches.", mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class, subcommands = { GenerateBlockchainConfig.class, GenerateLogBloomCache.class, diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/RestoreState.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/RestoreState.java index 944f5d9c8cc1..93251b6ce60c 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/RestoreState.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/operator/RestoreState.java @@ -19,6 +19,7 @@ import static org.hyperledger.besu.cli.DefaultCommandValues.MANDATORY_LONG_FORMAT_HELP; import static org.hyperledger.besu.ethereum.trie.CompactEncoding.bytesToPath; +import org.hyperledger.besu.cli.util.VersionProvider; import org.hyperledger.besu.config.JsonUtil; import org.hyperledger.besu.controller.BesuController; import org.hyperledger.besu.datatypes.Hash; @@ -58,7 +59,8 @@ @Command( name = "x-restore-state", description = "Restores the chain from a previously generated backup-state.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) public class RestoreState implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(RestoreState.class); diff --git a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/rlp/RLPSubCommand.java b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/rlp/RLPSubCommand.java index 271da4689c8b..c27ebfb4c1df 100644 --- a/besu/src/main/java/org/hyperledger/besu/cli/subcommands/rlp/RLPSubCommand.java +++ b/besu/src/main/java/org/hyperledger/besu/cli/subcommands/rlp/RLPSubCommand.java @@ -20,6 +20,7 @@ import org.hyperledger.besu.cli.BesuCommand; import org.hyperledger.besu.cli.DefaultCommandValues; import org.hyperledger.besu.cli.subcommands.rlp.RLPSubCommand.EncodeSubCommand; +import org.hyperledger.besu.cli.util.VersionProvider; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -45,6 +46,7 @@ name = RLPSubCommand.COMMAND_NAME, description = "This command provides RLP data related actions.", mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class, subcommands = {EncodeSubCommand.class}) public class RLPSubCommand implements Runnable { @@ -79,7 +81,8 @@ public void run() { @Command( name = "encode", description = "This command encodes a JSON typed data into an RLP hex string.", - mixinStandardHelpOptions = true) + mixinStandardHelpOptions = true, + versionProvider = VersionProvider.class) static class EncodeSubCommand implements Runnable { @SuppressWarnings("unused") 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 0b62a7f00685..62d35830c0b5 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/PasswordSubCommandTest.java @@ -17,6 +17,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; +import org.hyperledger.besu.BesuInfo; + import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; @@ -62,6 +64,20 @@ public void passwordHashSubCommandHelpDisplaysHelp() { .contains("This command generates the hash of a given password"); } + @Test + public void passwordSubCommandVersionDisplaysVersion() { + parseCommand("password", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void passwordHashSubCommandVersionDisplaysVersion() { + parseCommand("password", "hash", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void passwordHashSubCommandHashesPassword() { parseCommand("password", "hash", "--password", "foo"); 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 ea1332ecac0c..65076f86bfa9 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/PublicKeySubCommandTest.java @@ -18,6 +18,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.contentOf; +import org.hyperledger.besu.BesuInfo; import org.hyperledger.besu.crypto.KeyPair; import org.hyperledger.besu.crypto.NodeKey; import org.hyperledger.besu.crypto.SECPPrivateKey; @@ -162,6 +163,13 @@ public void callingPublicKeySubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingPublicKeySubCommandVersionMustDisplayVersion() { + parseCommand(PUBLIC_KEY_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + // Export public key sub-sub-command @Test public void callingPublicKeyExportSubCommandHelpMustDisplayUsage() { @@ -170,6 +178,13 @@ public void callingPublicKeyExportSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingPublicKeyExportSubCommandVersionMustDisplayVersion() { + parseCommand(PUBLIC_KEY_SUBCOMMAND_NAME, PUBLIC_KEY_EXPORT_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void callingPublicKeyExportSubCommandWithoutPathMustWriteKeyToStandardOutput() { final NodeKey nodeKey = getNodeKey(); @@ -258,6 +273,14 @@ public void callingPublicKeyExportAddressSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingPublicKeyExportAddressSubCommandVersionMustDisplayVersion() { + parseCommand( + PUBLIC_KEY_SUBCOMMAND_NAME, PUBLIC_KEY_EXPORT_ADDRESS_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void callingPublicKeyExportAddressSubCommandWithoutPathMustWriteAddressToStandardOutput() { final NodeKey nodeKey = getNodeKey(); 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 bf094c48811f..dc8d0548e0c7 100644 --- a/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java +++ b/besu/src/test/java/org/hyperledger/besu/cli/ValidateConfigSubCommandTest.java @@ -17,6 +17,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.assertj.core.api.Assertions.assertThat; +import org.hyperledger.besu.BesuInfo; + import java.io.IOException; import java.net.URL; import java.nio.file.Files; @@ -60,6 +62,13 @@ public void callingValidateConfigSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingValidateConfigSubCommandVersionMustDisplayVersion() { + parseCommand(VALIDATE_CONFIG_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void callingValidateConfigSubCommandWithNonExistentMustDisplayError() { parseCommand(VALIDATE_CONFIG_SUBCOMMAND_NAME, "--config-file", "/non/existent/file"); 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 2feac8078e66..ccb115f5d814 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 @@ -25,6 +25,7 @@ import static org.assertj.core.api.Assertions.contentOf; import static org.hyperledger.besu.cli.operator.OperatorSubCommandTest.Cmd.cmd; +import org.hyperledger.besu.BesuInfo; import org.hyperledger.besu.cli.CommandTestAbstract; import org.hyperledger.besu.cli.subcommands.operator.OperatorSubCommand; import org.hyperledger.besu.crypto.SECP256K1; @@ -111,6 +112,41 @@ public void callingOperatorCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingOperatorCommandVersionMustDisplayVersion() { + parseCommand(OperatorSubCommand.COMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void callingBackupStateCommandVersionMustDisplayVersion() { + parseCommand("x-backup-state", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void callingGenerateBlockchainConfigCommandVersionMustDisplayVersion() { + parseCommand("generate-blockchain-config", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void callingGenerateLogBloomCacheCommandVersionMustDisplayVersion() { + parseCommand("generate-log-bloom-cache", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void callingRestoreStateCommandVersionMustDisplayVersion() { + parseCommand("x-restore-state", "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void generateBlockchainConfigMustGenerateKeysWhenGenerateIsTrue() throws IOException { runCmdAndCheckOutput( 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 0d793edaad55..822c73227188 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 @@ -18,6 +18,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.contentOf; +import org.hyperledger.besu.BesuInfo; import org.hyperledger.besu.cli.CommandTestAbstract; import java.io.BufferedWriter; @@ -101,6 +102,20 @@ public void callingRPLEncodeSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingRPLSubCommandVersionMustDisplayVersion() { + parseCommand(RLP_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + + @Test + public void callingRPLEncodeSubCommandVersionMustDisplayVersion() { + parseCommand(RLP_SUBCOMMAND_NAME, RLP_ENCODE_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void encodeWithoutPathMustWriteToStandardOutput() { 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 b4a4d2097379..b6421b84ad25 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 @@ -23,6 +23,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import org.hyperledger.besu.BesuInfo; import org.hyperledger.besu.cli.CommandTestAbstract; import org.hyperledger.besu.controller.BesuController; @@ -139,6 +140,13 @@ public void callingBlockSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingBlockSubCommandVersionMustDisplayVersion() { + parseCommand(BLOCK_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + // Import sub-sub-command @Test public void callingBlockImportSubCommandWithoutPathMustDisplayErrorAndUsage() { @@ -169,6 +177,13 @@ public void callingBlockImportSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingBlockImportSubCommandVersionMustDisplayVersion() { + parseCommand(BLOCK_SUBCOMMAND_NAME, BLOCK_IMPORT_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + @Test public void callingBlockImportSubCommandWithPathMustImportBlocksWithThisPath() throws Exception { final File fileToImport = temp.newFile("blocks.file"); @@ -457,6 +472,13 @@ public void callingBlockExportSubCommandHelpMustDisplayUsage() { assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); } + @Test + public void callingBlockExportSubCommandVersionMustDisplayVersion() { + parseCommand(BLOCK_SUBCOMMAND_NAME, BLOCK_EXPORT_SUBCOMMAND_NAME, "--version"); + assertThat(commandOutput.toString(UTF_8)).isEqualToIgnoringWhitespace(BesuInfo.version()); + assertThat(commandErrorOutput.toString(UTF_8)).isEmpty(); + } + private void createDbDirectory(final boolean createDataFiles) throws IOException { final File dbDir = folder.newFolder(BesuController.DATABASE_PATH); if (createDataFiles) {