2018-12-27 18:50:45 +03:00
// 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 <boost/program_options.hpp>
# 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"
2019-01-23 13:16:48 +03:00
# include "difficulty_analysis.h"
2020-01-23 03:26:25 +01:00
# include "plain_wallet_tests.h"
2020-12-23 01:40:02 +03:00
# include "crypto_tests.h"
2018-12-27 18:50:45 +03:00
namespace po = boost : : program_options ;
2022-04-21 17:43:50 +02:00
const command_line : : arg_descriptor < std : : string > arg_test_core_prepare_and_store ( " prepare-and-store-events-to-file " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_test_core_load_and_replay ( " load-and-replay-events-from-file " , " " ) ;
2018-12-27 18:50:45 +03:00
namespace
{
2022-04-21 17:43:50 +02:00
const command_line : : arg_descriptor < bool > arg_test_transactions_flow ( " test-transactions-flow " , " " ) ;
const command_line : : arg_descriptor < bool > arg_test_miniupnp ( " test-miniupnp " , " " ) ;
const command_line : : arg_descriptor < bool > arg_test_core_concurrency ( " test-core-concurrency " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_working_folder ( " working-folder " , " " , " . " ) ;
const command_line : : arg_descriptor < std : : string > arg_source_wallet ( " source-wallet " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_dest_wallet ( " dest-wallet " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_source_wallet_pass ( " source-wallet-pass " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_dest_wallet_pass ( " dest-wallet-pass " , " " ) ;
const command_line : : arg_descriptor < std : : string > arg_daemon_addr_a ( " daemon-addr-a " , " " , " 127.0.0.1:8080 " ) ;
const command_line : : arg_descriptor < std : : string > arg_daemon_addr_b ( " daemon-addr-b " , " " , " 127.0.0.1:8082 " ) ;
const command_line : : arg_descriptor < uint64_t > arg_transfer_amount ( " transfer-amount " , " " , 60000000000000 ) ;
const command_line : : arg_descriptor < size_t > arg_mix_in_factor ( " mix-in-factor " , " " , 10 ) ;
const command_line : : arg_descriptor < size_t > arg_tx_count ( " tx-count " , " " , 100 ) ;
const command_line : : arg_descriptor < size_t > arg_tx_per_second ( " tx-per-second " , " " , 20 ) ;
const command_line : : arg_descriptor < size_t > arg_test_repeat_count ( " test-repeat-count " , " " , 1 ) ;
const command_line : : arg_descriptor < size_t > arg_action ( " action " , " " , 0 ) ;
const command_line : : arg_descriptor < size_t > arg_max_tx_in_pool ( " max-tx-in-pool " , " " , 10000 ) ;
const command_line : : arg_descriptor < std : : string > arg_data_dir ( " data-dir " , " Specify data directory " , " . " ) ;
const command_line : : arg_descriptor < size_t > arg_wthreads ( " wthreads " , " number of writing threads to run " , 1 ) ;
const command_line : : arg_descriptor < size_t > arg_rthreads ( " rthreads " , " number of reading threads to run " , 1 ) ;
const command_line : : arg_descriptor < size_t > arg_blocks ( " blocks " , " number of blocks to generate " , 250 ) ;
const command_line : : arg_descriptor < size_t > arg_generate_test_genesis_json ( " generate-test-genesis-json " , " generates test genesis json, specify amount of accounts " ) ;
const command_line : : arg_descriptor < bool > arg_deadlock_guard ( " test-deadlock-guard " , " Do deadlock guard test " ) ;
const command_line : : arg_descriptor < std : : string > arg_difficulty_analysis ( " difficulty-analysis " , " Do difficulty analysis " ) ;
const command_line : : arg_descriptor < bool > arg_test_plain_wallet ( " test-plainwallet " , " Do testing of plain wallet interface " ) ;
const command_line : : arg_descriptor < std : : string > arg_crypto_tests ( " crypto-tests " , " Run experimental crypto tests " ) ;
2018-12-27 18:50:45 +03:00
}
int main ( int argc , char * argv [ ] )
{
TRY_ENTRY ( ) ;
string_tools : : set_module_name_and_folder ( argv [ 0 ] ) ;
//set up logging options
2020-02-28 12:28:00 +01:00
//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());
2018-12-27 18:50:45 +03:00
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 ) ;
2019-01-23 18:35:59 +03:00
command_line : : add_arg ( desc_options , arg_difficulty_analysis ) ;
2020-12-23 01:40:02 +03:00
command_line : : add_arg ( desc_options , arg_test_plain_wallet ) ;
command_line : : add_arg ( desc_options , arg_crypto_tests ) ;
2018-12-27 18:50:45 +03:00
2023-07-13 15:47:37 +02:00
test_serialization2 ( ) ;
2018-12-27 18:50:45 +03:00
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 ) )
{
2019-01-23 13:16:48 +03:00
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 ) ) ;
2018-12-27 18:50:45 +03:00
return 0 ;
}
else if ( command_line : : get_arg ( vm , arg_deadlock_guard ) )
{
do_deadlock_test_main ( ) ;
return 1 ;
}
2020-01-27 20:57:12 +01:00
else if ( command_line : : has_arg ( vm , arg_test_plain_wallet ) )
2020-01-23 03:26:25 +01:00
{
run_plain_wallet_api_test ( ) ;
return 1 ;
}
2018-12-27 18:50:45 +03:00
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 ;
}
2021-02-15 15:48:50 +03:00
else if ( command_line : : has_arg ( vm , arg_crypto_tests ) )
2020-12-23 01:40:02 +03:00
{
2021-02-15 15:48:50 +03:00
return crypto_tests ( command_line : : get_arg ( vm , arg_crypto_tests ) ) ;
2020-12-23 01:40:02 +03:00
}
2018-12-27 18:50:45 +03:00
else
{
std : : cout < < desc_options < < std : : endl ;
return 1 ;
}
CATCH_ENTRY_L0 ( " main " , 1 ) ;
return 0 ;
}