diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -2,6 +2,8 @@ project(bitcoin-test) +option(TEST_UPGRADE "Run unit tests with the next upgrade activated in addition to regular tests" OFF) + # Process json files. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/data") @@ -152,6 +154,16 @@ ${JSON_HEADERS} ) +if (TEST_UPGRADE) + add_test( + NAME + "bitcoin-upgrade-activated" + COMMAND + "test_bitcoin" + "-gravitonactivationtime=1573819200" + ) +endif() + target_link_libraries(test_bitcoin rpcclient server) if(TARGET bitcoinconsensus-shared) target_link_libraries(test_bitcoin bitcoinconsensus-shared) diff --git a/src/test/activation_tests.cpp b/src/test/activation_tests.cpp --- a/src/test/activation_tests.cpp +++ b/src/test/activation_tests.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include @@ -26,14 +27,15 @@ CBlockIndex prev; const Consensus::Params ¶ms = Params().GetConsensus(); - const auto activation = params.gravitonActivationTime; - - BOOST_CHECK(!IsGravitonEnabled(params, nullptr)); + const auto activation = + gArgs.GetArg("-gravitonactivationtime", params.gravitonActivationTime); + SetMockTime(activation - 1000000); std::array blocks; for (size_t i = 1; i < blocks.size(); ++i) { blocks[i].pprev = &blocks[i - 1]; } + BOOST_CHECK(!IsGravitonEnabled(params, &blocks.back())); SetMTP(blocks, activation - 1); BOOST_CHECK(!IsGravitonEnabled(params, &blocks.back())); diff --git a/src/test/test_bitcoin_main.cpp b/src/test/test_bitcoin_main.cpp --- a/src/test/test_bitcoin_main.cpp +++ b/src/test/test_bitcoin_main.cpp @@ -3,9 +3,11 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #define BOOST_TEST_MODULE Bitcoin Test Suite +#define BOOST_TEST_NO_MAIN #include #include +#include #include @@ -23,3 +25,63 @@ bool ShutdownRequested() { return false; } + +const std::vector boostRuntimeParams = {"-auto_debug", + "-d", + "-build_info", + "-i", + "-catch_system_errors", + "-s", + "-color_output", + "-x", + "-detect_fp_exceptions", + "-detect_memory_leaks", + "-help", + "-list_content", + "-list_labels", + "-log_format", + "-f", + "-log_level", + "-l", + "-log_sink", + "-k", + "-logger", + "-output_format", + "-o", + "-random", + "-report_format", + "-m", + "-report_level", + "-r", + "-report_memory_leaks_to", + "-report_sink", + "-e", + "-result_code", + "-c", + "-run_test", + "-t", + "-save_pattern", + "-show_progress", + "-p", + "-use_alt_stack", + "-?", + "-wait_for_debugger", + "-w"}; + +int main(int argc, char *argv[], char *envp[]) { + // Whitelisting BOOST test framework CLI params + for (auto &arg : boostRuntimeParams) { + gArgs.AddArg(arg, "", false, OptionsCategory::HIDDEN); + } + + // Additional CLI params supported by test_bitcoin: + gArgs.AddArg("-gravitonactivationtime", "", false, OptionsCategory::HIDDEN); + + std::string error; + if (!gArgs.ParseParameters(argc, argv, error)) { + fprintf(stderr, "Error parsing command line arguments: %s\n", + error.c_str()); + return EXIT_FAILURE; + } + return boost::unit_test::unit_test_main(&init_unit_test, argc, argv); +}