// Copyright (c) 2014-2018 Zano Project // Copyright (c) 2014-2018 The Louisdor Project // Copyright (c) 2012-2013 The Cryptonote developers // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include #include "include_base_utils.h" using namespace epee; #include "common/command_line.h" #include "transactions_flow_test.h" #include "miniupnp_test.h" #include "core_concurrency_test.h" #include "string_coding.h" #include "currency_core/currency_format_utils.h" #include "generate_test_genesis.h" #include "deadlock_guard_test.h" #include "difficulty_analysis.h" #include "plain_wallet_tests.h" #include "crypto_tests.h" namespace po = boost::program_options; const command_line::arg_descriptor arg_test_core_prepare_and_store = { "prepare-and-store-events-to-file", "", "", true }; const command_line::arg_descriptor arg_test_core_load_and_replay = { "load-and-replay-events-from-file", "", "", true }; namespace { const command_line::arg_descriptor arg_test_transactions_flow = {"test-transactions-flow", ""}; const command_line::arg_descriptor arg_test_miniupnp = {"test-miniupnp", ""}; const command_line::arg_descriptor arg_test_core_concurrency = {"test-core-concurrency", ""}; const command_line::arg_descriptor arg_working_folder = {"working-folder", "", "."}; const command_line::arg_descriptor arg_source_wallet = {"source-wallet", "", "", true}; const command_line::arg_descriptor arg_dest_wallet = {"dest-wallet", "", "", true}; const command_line::arg_descriptor arg_source_wallet_pass = {"source-wallet-pass", "", "", true}; const command_line::arg_descriptor arg_dest_wallet_pass = {"dest-wallet-pass", "", "", true}; const command_line::arg_descriptor arg_daemon_addr_a = {"daemon-addr-a", "", "127.0.0.1:8080"}; const command_line::arg_descriptor arg_daemon_addr_b = {"daemon-addr-b", "", "127.0.0.1:8082"}; const command_line::arg_descriptor arg_transfer_amount = {"transfer-amount", "", 60000000000000}; const command_line::arg_descriptor arg_mix_in_factor = {"mix-in-factor", "", 10}; const command_line::arg_descriptor arg_tx_count = {"tx-count", "", 100}; const command_line::arg_descriptor arg_tx_per_second = {"tx-per-second", "", 20}; const command_line::arg_descriptor arg_test_repeat_count = {"test-repeat-count", "", 1}; const command_line::arg_descriptor arg_action = {"action", "", 0 }; const command_line::arg_descriptor arg_max_tx_in_pool = { "max-tx-in-pool", "", 10000 }; const command_line::arg_descriptor arg_data_dir = {"data-dir", "Specify data directory", "."}; const command_line::arg_descriptor arg_wthreads = {"wthreads", "number of writing threads to run", 1}; const command_line::arg_descriptor arg_rthreads = {"rthreads", "number of reading threads to run", 1}; const command_line::arg_descriptor arg_blocks = {"blocks", "number of blocks to generate", 250}; const command_line::arg_descriptor arg_generate_test_genesis_json = { "generate-test-genesis-json", "generates test genesis json, specify amount of accounts", 0, true }; const command_line::arg_descriptor arg_deadlock_guard = { "test-deadlock-guard", "Do deadlock guard test", false, true }; const command_line::arg_descriptor arg_difficulty_analysis = { "difficulty-analysis", "Do difficulty analysis", "", true }; const command_line::arg_descriptor arg_test_plain_wallet = { "test-plainwallet", "Do testing of plain wallet interface", false, true }; const command_line::arg_descriptor arg_crypto_tests = { "crypto-tests", "Run experimental crypto tests", "", true }; } int main(int argc, char* argv[]) { TRY_ENTRY(); string_tools::set_module_name_and_folder(argv[0]); uint64_t reward = 0; currency::get_block_reward(false, 500000, 589313, 10300000000000000, reward, 11030); //set up logging options //log_space::get_set_log_detalisation_level(true, LOG_LEVEL_1); //log_space::log_singletone::add_logger(LOGGER_CONSOLE, NULL, NULL, LOG_LEVEL_2); //log_space::log_singletone::add_logger(LOGGER_FILE, // log_space::log_singletone::get_default_log_file().c_str(), // log_space::log_singletone::get_default_log_folder().c_str()); po::options_description desc_options("Allowed options"); command_line::add_arg(desc_options, command_line::arg_help); command_line::add_arg(desc_options, arg_test_transactions_flow); command_line::add_arg(desc_options, arg_test_miniupnp); command_line::add_arg(desc_options, arg_test_core_concurrency); command_line::add_arg(desc_options, arg_test_core_prepare_and_store); command_line::add_arg(desc_options, arg_test_core_load_and_replay); command_line::add_arg(desc_options, arg_working_folder); command_line::add_arg(desc_options, arg_source_wallet); command_line::add_arg(desc_options, arg_dest_wallet); command_line::add_arg(desc_options, arg_source_wallet_pass); command_line::add_arg(desc_options, arg_dest_wallet_pass); command_line::add_arg(desc_options, arg_daemon_addr_a); command_line::add_arg(desc_options, arg_daemon_addr_b); command_line::add_arg(desc_options, arg_transfer_amount); command_line::add_arg(desc_options, arg_mix_in_factor); command_line::add_arg(desc_options, arg_tx_count); command_line::add_arg(desc_options, arg_tx_per_second); command_line::add_arg(desc_options, arg_test_repeat_count); command_line::add_arg(desc_options, arg_action); command_line::add_arg(desc_options, arg_data_dir); command_line::add_arg(desc_options, arg_wthreads); command_line::add_arg(desc_options, arg_rthreads); command_line::add_arg(desc_options, arg_blocks); command_line::add_arg(desc_options, arg_generate_test_genesis_json); command_line::add_arg(desc_options, arg_max_tx_in_pool); command_line::add_arg(desc_options, arg_deadlock_guard); command_line::add_arg(desc_options, arg_difficulty_analysis); command_line::add_arg(desc_options, arg_test_plain_wallet); command_line::add_arg(desc_options, arg_crypto_tests); test_serialization(); po::variables_map vm; bool r = command_line::handle_error_helper(desc_options, [&]() { po::store(po::parse_command_line(argc, argv, desc_options), vm); po::notify(vm); return true; }); if (!r) return 1; if (command_line::get_arg(vm, command_line::arg_help)) { std::cout << desc_options << std::endl; return 0; } size_t repeat_count = command_line::get_arg(vm, arg_test_repeat_count); if (command_line::get_arg(vm, arg_test_transactions_flow)) { //const std::string working_folder = command_line::get_arg(vm, arg_working_folder); std::string path_source_wallet, path_target_wallet, source_wallet_pass, target_wallet_pass; path_source_wallet = command_line::get_arg(vm, arg_source_wallet); path_target_wallet = command_line::get_arg(vm, arg_dest_wallet); source_wallet_pass = command_line::get_arg(vm, arg_source_wallet_pass); target_wallet_pass = command_line::get_arg(vm, arg_dest_wallet_pass); const std::string c_path_source_wallet = path_source_wallet; const std::string c_path_target_wallet = path_target_wallet; std::string daemon_addr_a = command_line::get_arg(vm, arg_daemon_addr_a); std::string daemon_addr_b = command_line::get_arg(vm, arg_daemon_addr_b); //uint64_t amount_to_transfer = command_line::get_arg(vm, arg_transfer_amount); size_t mix_in_factor = command_line::get_arg(vm, arg_mix_in_factor); //size_t transactions_count = command_line::get_arg(vm, arg_tx_count); //size_t transactions_per_second = command_line::get_arg(vm, arg_tx_per_second); size_t action = command_line::get_arg(vm, arg_action); size_t max_tx_in_pool = command_line::get_arg(vm, arg_max_tx_in_pool); for(size_t i = 0; i != repeat_count; i++) if(!transactions_flow_test( epee::string_encoding::utf8_to_wstring(c_path_source_wallet), source_wallet_pass, epee::string_encoding::utf8_to_wstring(c_path_target_wallet), target_wallet_pass, daemon_addr_a, daemon_addr_b, /* amount_to_transfer, */ mix_in_factor, action, max_tx_in_pool)) break; std::string s; std::cin >> s; return 0; }else if(command_line::get_arg(vm, arg_test_miniupnp)) { miniupnp_test(); return 0; }else if(command_line::has_arg(vm, arg_generate_test_genesis_json)) { generate_test_genesis(command_line::get_arg(vm, arg_generate_test_genesis_json)); return 0; } else if (command_line::has_arg(vm, arg_difficulty_analysis)) { run_difficulty_analysis(command_line::get_arg(vm, arg_difficulty_analysis)); return 0; } else if (command_line::get_arg(vm, arg_deadlock_guard) ) { do_deadlock_test_main(); return 1; } else if (command_line::has_arg(vm, arg_test_plain_wallet)) { run_plain_wallet_api_test(); return 1; } else if (command_line::get_arg(vm, arg_test_core_concurrency)) { for (size_t i = 0; i != repeat_count; i++) { LOG_PRINT_L0("REPEAT #" << i); size_t wthreads = command_line::get_arg(vm, arg_wthreads); size_t rthreads = command_line::get_arg(vm, arg_rthreads); size_t blocks_count = command_line::get_arg(vm, arg_blocks); if (!core_concurrency_test(vm, wthreads, rthreads, blocks_count)) break; } return 0; } else if (command_line::has_arg(vm, arg_crypto_tests)) { return crypto_tests(command_line::get_arg(vm, arg_crypto_tests)); } else { std::cout << desc_options << std::endl; return 1; } CATCH_ENTRY_L0("main", 1); return 0; }