You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmonero/tests/txsearch_tests.cpp

515 lines
144 KiB

#include "src/MicroCore.h"
#include "../src/CurrentBlockchainStatus.h"
#include "../src/ThreadRAII.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "helpers.h"
#include "mocks.h"
namespace
{
using json = nlohmann::json;
//class OUTPUTIDENT_TEST : public ::testing::Test
//{
//public:
//static void
//SetUpTestCase()
//{
//string config_path {"../config/config.json"};
//config_json = xmreg::BlockchainSetup::read_config(config_path);
//}
//protected:
//virtual void
//SetUp()
//{
//bc_setup = xmreg::BlockchainSetup{net_type, do_not_relay, config_json};
//cbs_mock = make_shared<MockCurrentBlockchainStatus>();
//}
//network_type net_type {network_type::TESTNET};
//bool do_not_relay {false};
//xmreg::BlockchainSetup bc_setup;
//std::shared_ptr<MockCurrentBlockchainStatus> cbs_mock;
//static json config_json;
//};
//json OUTPUTIDENT_TEST::config_json;
//string addr_9wq79 {"9wq792k9sxVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4bh2tCh"};
//string viewkey_9wq79 {"f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06"};
//TEST_F(OUTPUTIDENT_TEST, NonDefaultConstruction)
//{
//ADDR_VIEWKEY_FROM_STRING(addr_9wq79, viewkey_9wq79, net_type);
//transaction tx;
//crypto::hash tx_hash;
//bool is_coinbase {false};
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_coinbase};
//EXPECT_TRUE(true);
//}
//TEST_F(OUTPUTIDENT_TEST, IncomingPreRingctTransaction)
//{
//// private testnet tx_hash 01e3d29a5b6b6e1999b9e7e48b9abe101bb93055b701b23d98513fb0646e7570
//string tx_hex {"0100020280e08d84ddcb0107041e6508060e1df9733757fb1563579b3a0ecefb4063dc66a75ad6bae3d0916ab862789c31f6aa0280e08d84ddcb01075f030f17031713f43315e59fbd6bacb3aa1a868edc33a0232f5031f6c573d6d7b23e752b6beee10580d0b8e1981a02e04e4d7d674381d16bf50bdc1581f75f7b2df591b7a40d73efd8f5b3c4be2a828088aca3cf02025c3fb06591f216cab833bb6deb2e173e0a9a138addf527eaff80912b8f4ff47280f882ad1602779945c0e6cbbc7def201e170a38bb9822109ddc01f330a5b00d12eb26b6fd4880e0bcefa757024f05eb53b5ebd60e502abd5a2fcb74b057b523acccd191df8076e27083ef619180c0caf384a302022dffb5574d937c1add2cf88bd374af40d577c7cc1a22c3c8805afd49840a60962101945fd9057dd42ef52164368eab1a5f430268e029f83815897d4f1e08b0e00873dbf5b4127be86ba01f23f021a40f29e29110f780fa0be36041ecf00b6c7b480edb090ba58dea640ca19aa4921a56c4b6dcbf11897c53db427dfdbc2f3072480b6c02f409b45c5d2401a19d8cfb13d9124d858d2774d9945f448f19e1e243e004588368813689c1c1be4e1242c633b7a2eb4936546fda57c99dac7fab81e40d0512e39d04ce285f96ac80f6d91ee39157189d73e198fa6b397bd34d8685dbf20e3f869043b686c291f8d4401f673978c683841ec39c45ce06564ccf87c68a080ad17bcce3d7240cd8d57ecbb190fef27578679cdd39ea3c868ab65d6d1d2c20062e921ceea054f755ceef8cd24e54078f9a5bedea2ca59d90ad277bd250c90605b3dd832aa15a4eb01080210ade74638f1558e203c644aa608147c9f596ce3c03023e99f9ca5b3cae41cbd230bc20f2b87f1e06967c852115abc7e56566ddaf09b5774568375fa0f27b45d946cfb2859f1c7a3ad6b7a8e097e955a6ee77c6db0b083dbda85b317dcd77e4be29079420bf683a91ac94feb0f788d5e3dfe72bef028768d76f9ebffd4cb2fd4a314e293df51cb43f12091632e93f4f97fdab7ab60dd50611233fbb1048dccd6478184b914710c894d8116620fcfd09d73ef304c90af210a4724c9e8adb2c47396a67944d6fe827a9b06f7a3c3b6cd2946f328cc306e0a0d194443734cc90fb94ccdb74f8fa7a19690793ddc2b0b06e52d0d4d8530ac227d58a2936fbbf18bbbc2af03443a44ff2a844be527371fedc03c50cce200e8e2b4fdb501e2fba103aafc2487be7faaa83f3894bdcfad873a6697ad930500bc56e28139ef4c6d9b8ee06390b4bcb1b6bfcc6e3136be89e3bdccff50d104906d354569aedfd8b2a5cb62b8738218760a9ebbc5dff3de038ab2e0369f28e3d0d921d28b388acdf69988b5c77120de5317be614da7c774f1f815a7137625da90f0342ca5df7bbc8515066c3d8fa37f1d69727f69e540ff66578bd0e6adf73fa074ce25809e47f06edc9d8ac9f49b4f02b8fd48ef8b03d7a6e823c6e2fc105ee0384a5a3a4bfefc41cf7240847e50121233de0083bbd904903b9879ecdd5a3b701a2196e13e438cf3980ab0b85c5e4e3595c46f034cb393b1e291e3e288678c90e9aac0abe0723520d47e94584ff65dfec8d4d1b1d2c378f87347f429a2178b10ad530bfe406441d7b21c1f0ea04920c9715434b16e6f5c561eab4e8b31040a30b280fc0e3ebc71d1d85a6711591487a50e4ca1362aae564c6e332b97da65c0c07"};
//// the tx has only one output for 10 xmr, so we check
//// if we can identify it.
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_9wq79, viewkey_9wq79, net_type);
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//oi.identify_outputs();
//EXPECT_EQ(oi.identified_outputs.size(), 1);
//EXPECT_EQ(oi.identified_inputs.size(), 0);
//EXPECT_EQ(oi.get_tx_hash_str(), tx_hash_str);
//EXPECT_EQ(oi.get_tx_prefix_hash_str(), tx_prefix_hash_str);
//EXPECT_EQ(oi.get_tx_pub_key_str(), tx_pub_key_str);
//EXPECT_EQ(oi.get_mixin_no(), 7);
//EXPECT_EQ(oi.total_received, 10000000000000ull);
//EXPECT_FALSE(oi.tx_is_coinbase);
//EXPECT_FALSE(oi.is_rct);
//auto out_info = oi.identified_outputs[0];
//EXPECT_EQ(pod_to_hex(out_info.pub_key),
//"2dffb5574d937c1add2cf88bd374af40d577c7cc1a22c3c8805afd49840a6096");
//EXPECT_EQ(out_info.amount, 10000000000000ull);
//EXPECT_EQ(out_info.idx_in_tx, 4);
//EXPECT_TRUE(out_info.rtc_outpk.empty());
//EXPECT_TRUE(out_info.rtc_mask.empty());
//EXPECT_TRUE(out_info.rtc_amount.empty());
//}
//// private testnet wallet 9wq792k9sxVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4bh2tCh
//// viewkey f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
//// spendkey 509a9761fde8856fc38e79ca705d85f979143524f178f8e2e0eb539fc050e905
//// seed: deftly large tirade gumball android leech sidekick opened iguana voice gels focus poaching itches network espionage much jailed vaults winter oatmeal eleven science siren winter
//string addr_9wq792k {"9wq792k9sxVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4bh2tCh"};
//string viewkey_9wq792k {"f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06"};
//// ./xmr2csv --testnet -b /home/mwo/testnet/node_01/testnet/lmdb/ -a 9wq792k9sxVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4bh2tCh -v f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
//string known_outputs_csv_9wq792k {"./res/outputs_testnet_9wq792k9.csv"};
//TEST_F(OUTPUTIDENT_TEST, OutgingPreRingctTransaction)
//{
//// private testnet tx_hash 0889658a54ddfaa61f62fdc0393adc498e1227195d413de45c5f0e0da3f5068d
//string tx_hex {"0100020280e08d84ddcb0107b902e401081b2c10418ba25b21dc2e9fd3d6d8dd69c14888ab0ed429f8cc86a7edba20bdd2bde61bab0280c0caf384a30207d10194012438201e78879c4ee5f780a4fcabc5ce20716080392fc4715db6334f956e210283beed920f0580c0caf384a302020ffede2e6e4a3d613f6ebcca9d3337d54c5b65f7095cc04faf6c9408206b463c80f882ad16021b48cdc46b84e348596f35a0fb4f0107da3a7e5f8b486be6a36fc90ff052117e80d0b8e1981a02e6de1aa8176921a8d5f8ef02a12004f5183f77a601c347f84e7be18c400572e18088aca3cf02022f061ade6afb847d57d29609255089b477d2c33c34d06e13ec5982d18eb785c580c0f9decfae010211c7792d1a8d8c23bbd0e2c4c79b28a711fa4d6ff64906013ddd2b8bca42a6d444022100000000000000000000000000000000000000000000006f70656e6d6f6e65726f0189bb4ab10d9ae0b84096fe0f4b95da56e3949b71c6eca5f284a4a02c83ed174675d6b1d2e529f5e4199bb738a47e7f50fc7acbf86a3908eb0c3023013ea9e808974dd6e0c0fe2c9853d316d63a35206628790b60997a22cefb9383762ba05a0fb11987072d29d76b172700ea6b9cb61ddbdea60372b35de748f9a7fc0d18f30a02b76e272c76446d828b6cef9a2df96f867792da27f08ca116dca121f73bcf09fe4fff1a1b8a099fffafefac87f10ecdaf02f48e0b903ced2d737bcb803f0c0525588ed99e71b21c35878ce0697990bf768bc35e0e6841bf1cf91c1fc116ee0a01343ec7e52ded6bdb89571b40590834d4c04715b4eb28102dad54b455dd6d03380e9eac3c058159e7fa4f5d3da30b3eda24c7e49a87e1523e5b478efdb8020fa03a4788d214a7ec64454366525ebf66ef8692a0db97a2ff96e1ad926e315105104c7ef19f59aff25265f54489f7e0fdde6205e6f62b4beb6b0d5a2a233a4807e5460bd83dfa3929b56bd84705cee12ce7bcaca09539bd128fc9e7513a3e63022297c65ef1ac04bb1807b85fa3ef38342aa8342ec33dfe4979a1590d372218034649bbb7975d6790e04105cef27a6337996896758f4fa6a962425fc802dd790114020c4f14efe604f00b8f829d6c82bd2c9719a60c39565944998d43f299070ab78325c8a20557e03dd2e50e516503d16bd436b5af949a978097e0ce347a700c13c5ce0d039ea7bfc7cc8e975c0710e74b6b0930ffd597eaf80c0fdc18711e0e6c8e1aed3c2bd4ff035df0745e69d30ec0dff351c0d780cda8873c010419d209c19d6fc4c366911170892c6e696709069e6469018ff2c61f5f42b283bd4c590a3e5f71f7934635c1e7cca1cbf0ec91517ce65673c1b6c6c961625537b2e93208db342fb9c2f246c6d636adf66bece8bae648be290140452d63c6d87fb3ff990c86725d7bc4968cac48f10d7b6a4d35b63e3040c42f6e76e7224fa308a042b10807cd36ffe28daca3e2a755645be3f588565f9ee79b19b7f8c572a872bb61fd08c9d6473dfe2a5ae4f100744ed91e2e8817ef417309c4d0f4a5023272b87b8b00c08ee85c037417b5241e6715db7b0e932ef7e08cba00914bf485a46690f0370016d3e2ca265accec86c295cd02c13d67fa6bcc1f51803d537eaef804bdeaef05316c79554916dc5afb6ac1581436a26ac5cd687d83b4ccbbfae8e230eac2aa0c2b87f2db0b70cea9ad4cf9cb3218c4aa37da05245bc401a1ea4afcdcd833d40fadc38c6d38bd75fe63a364a0bed1c9b6656b4f803b944e5947d1c398a9eed200"};
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_9wq792k, viewkey_9wq792k, net_type);
//// the ring members data from the above tx
////
//// this hex is obtained using onion explorer runnign with --enbale-as-hex flag
//// it is hex, serializied representation of of map of key_images
//// with corresponding ring members output_data_t info structure
//// we do this so that we just mack all the calls, instead of
//// accessing real blockchain for this data.
//string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a6172636869766500000000010200000001080001d102650102890102c10102e10102ff010277020600a0724e1809000001070001a03730613039333763663136313063306466363332333864373363323235346163363039623031343565663335333436653034373331656534633166343336643830653031303030303030303030303030643230303030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03262306634636561663332353534613665386637306433383662613630343166613664316635346134326430363937663832663436393936396531346336303161313031303030303030303030303030363530313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a06137623538633963396133333837653637336464646232306433336632626566336131393239636261653434353338346336656361346361313934646237653263353031303030303030303030303030383930313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03538336531303131363633313133326666383361633364636135393831656335393634626634386434663439366331333537343137653361366539646333333866643031303030303030303030303030633130313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03866363363633930346637643033626131343565366638323039333334353064633332313661306365393537666135613234373139336463323434653063623630303030303030303030303030303030646630313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a03832653363626164653363333963323636386534666439303861383662663237376533366637316563326631663465386432636363306666646236363236393133393032303030303030303030303030666430313030303030303030303030303136336464363832656339373763646461353935333164613366666137323939386136663838333761626164633633366161656463386265313962326437633701a035366261663166393130653861316366326264396235313464386333313030633531393731303565383033643462306230636137616664383863643462353764623130323030303030303030303030303735303230303030303030303030303031363364643638326563393737636464613539353331646133666661373239393861366638383337616261646336333661616564633862653139623264376337010800023901021d02022502024002026c02027c0202bd0206007083d05d0601070001a06236616662313139646231396538616266656636303062326431383135653332636238626236366130663566363532396434303931313534653163313330623037363031303030303030303030303030336130313030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439346533303462643861376261626131343331633065633563383431623162346236333137626232353131663561636531393461343066653534323366646635613032303030303030303030303030316530323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03732353739376634623939636163373736396362343264646532313434303731346138363362303036363739306431343937386634336138643261653431353436323032303030303030303030303030323630323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a03439383766656363333237663463646266323461343564386162366334323535623930303535623263633730323364386161656538626461633133303466343637643032303030303030303030303030343130323030303030303030303030303539613033613331353361393934643732333237653464393234323164336533323931623166613162323430646534346239326437663632656330313238663101a035656639383664613231383461333533336365313961636533656137353331383533633936313237653365346633366136386131393935623331626630373635613930323030303030303030303030303664303230303030303030303030303035396130336133313533613939346437323332376534643932343231643365333239316231666131623234306465343
//MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
//ASSERT_TRUE(xmreg::output_data_from_hex(ring_member_data_hex,
//mock_ring_members_data));
//MockGettingOutputs get_outputs(mock_ring_members_data);
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Invoke(&get_outputs,
//&MockGettingOutputs
//::get_output_keys));
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//xmreg::TxSearch::known_outputs_t known_outputs;
//ASSERT_TRUE(xmreg::check_and_adjust_path(known_outputs_csv_9wq792k));
//ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
//known_outputs_csv_9wq792k, known_outputs));
//oi.identify_outputs();
//oi.identify_inputs(known_outputs,
//cbs_mock.get());
//EXPECT_EQ(oi.identified_inputs.size(), 2);
//uint64_t found_input_amounts {0};
//for (auto& in_info: oi.identified_inputs)
//found_input_amounts += in_info.amount;
//EXPECT_EQ(found_input_amounts, 17000000000000ull);
//}
//// stagenet private wallet 56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6
//// viewkey f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
//// spendkey 509a9761fde8856fc38e79ca705d85f979143524f178f8e2e0eb539fc050e905
//// seed: deftly large tirade gumball android leech sidekick opened iguana voice gels focus poaching itches network espionage much jailed vaults winter oatmeal eleven science siren winter
//string addr_56Vbjcz {"56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6"};
//string viewkey_56Vbjcz {"f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06"};
//// ./xmr2csv --stagenet -b /home/mwo/stagenet/node_01/stagenet/lmdb/ -a 56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6 -v f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
//string known_outputs_csv_56bCoE {"./res/outputs_stagenet_56Vbjcz.csv"};
//TEST_F(OUTPUTIDENT_TEST, SweepUnmixableTransaction)
//{
//// sweep_unmixable transaction made on v5
//// private stagenet tx_hash af696f9a30fd0d436dfce3d57c6e37647752272769dcc0d194aa20b8a6ae74a6
//string tx_hex {"01000302808095e789c6040100ec2245d2315165ca3a91da51fa002b5507f69b8ee1e555b6f6eaac0ad20fff2202c096b1020100a437de705e6fbfdb6bec4398cdba4dff6bb0c8c6df63c4beb4ae02aac615fe7b0280a094a58d1d01001d503f5cb31e451ebf4ef9b63b8c63cc500acab66d1a9f77518c485ded98f50209808c8d9e02020b448a5786be20d9a00a6755b58731198d7a6c0ed7b95cc34746d7a494a4b106f0a20402cea836e49a83bfe8a49c3bd56abe798fa237f35e8461dd1ce7dcfb8bd5b845dca0c21e024ed38b1a948b8ce0f97a8a678e92c24cec543794c4d3f8802670c2b661cb77f480a0d9e61d02bc39ce2271070ebef256e392e5aaab3c7feb3104dcad5ff882942c1a926da90c808095e789c60402b4b86255abb6c6f8c5c7e30dc08ba0ba7eca238b3444b54c757de554ec8b649580b489130261d5e374d2b305266d7edbb28acf536d78dee151e0e727436cbfdaa9bb8e55398088aca3cf020233aabe91db1381b46c8389dd675188ba9f11da292b5341d324b1b97bc7bffa0280a4e803023bc9a0c13f6f4d36f06bdfcd08194fdd1c08f7e9a4838530780b03678524599b80d0b8e1981a02ac89c9e71c93e6c292bc22185f3de25fc925f37119a4ec8d9980082072f408892101d9b33806437cf186d61b6ff0bd8abdc30b96cfa7999e3d244bc6d0f202a9ee280859aab9dca3fbf3ce304fdcbaedb1e1df2319e9b807c492837579d029f54a0ab551d3aaf6ddbc811d13e4c1abf441c29d2dad28c6b7e14d5bf1345d27a8e40c0c0bf7d21149b9cd1f669985ba99055350eac0233ab0365ef72ed9eca65ec2044d7590c40f7ee365bc70d4f10445219df80cf9066894fa955050b913dc22ff0d5fa6aed1e24b0b3cad8e158d128c102c33df277c1af00cade9b1843de9d01000bd7d3e4221476226f84b54694a895fec3fff83ff567147991303de6bfb2f6301"};
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_56Vbjcz, viewkey_56Vbjcz,
//network_type::STAGENET);
//// the ring members data from the above tx
////
//// this hex is obtained using onion explorer runnign with --enbale-as-hex flag
//// it is hex, serializied representation of of map of key_images
//// with corresponding ring members output_data_t info structure
//// we do this so that we just mack all the calls, instead of
//// accessing real blockchain for this data.
//string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a617263686976650000000001030000000102000003404b4c000001010001a06538343030376337306637623738643732643934326531383734663063393862383261323731656164656437383734353862616334363138643464396366303330303030303030303030303030303030313930633030303030303030303030306330626534666238373762396365353038373731333233626366316662393438343731306565323330323030303663336538636161633665346630326661626601020000050010a5d4e801010001a06636383534363563653565616239663862393163316566656465353961343161306134346161313538343634623630373339383935616633366236346233653230303030303030303030303030303030316331653030303030303030303030306262366637303632636133303664363732613733306532613266323139626462653430633966623366653464363031333639326166393363646232653063643101020000060040e59c301201010001a064316539643262333336303132633736306462316262666236633933326437633338326132663738666566333535303163313463393965653861613835366538303030303030303030303030303030306630303930303030303030303030303030326661333533616138346561386334346338303233303635643739343136303662316661356332363464636366343664633634393465626539363036663230"};
//MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
//ASSERT_TRUE(xmreg::output_data_from_hex(ring_member_data_hex,
//mock_ring_members_data));
//MockGettingOutputs get_outputs(mock_ring_members_data);
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Invoke(&get_outputs,
//&MockGettingOutputs
//::get_output_keys));
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//xmreg::TxSearch::known_outputs_t known_outputs;
//ASSERT_TRUE(xmreg::check_and_adjust_path(known_outputs_csv_56bCoE));
//ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
//known_outputs_csv_56bCoE, known_outputs));
//oi.identify_outputs();
//EXPECT_EQ(oi.identified_outputs.size(), 9);
//EXPECT_EQ(oi.get_mixin_no(), 1);
//EXPECT_EQ(oi.total_received, 20998648570000ull);
//EXPECT_FALSE(oi.is_rct);
//EXPECT_EQ(pod_to_hex(oi.identified_outputs[0].pub_key),
//"0b448a5786be20d9a00a6755b58731198d7a6c0ed7b95cc34746d7a494a4b106");
//EXPECT_EQ(pod_to_hex(oi.identified_outputs.back().pub_key),
//"ac89c9e71c93e6c292bc22185f3de25fc925f37119a4ec8d9980082072f40889");
//oi.identify_inputs(known_outputs,
//cbs_mock.get());
//EXPECT_EQ(oi.identified_inputs.size(), 3);
//uint64_t found_input_amounts {0};
//for (auto& in_info: oi.identified_inputs)
//found_input_amounts += in_info.amount;
//EXPECT_EQ(found_input_amounts, 21000005000000ull);
//}
//// ./xmr2csv --stagenet -b /home/mwo/stagenet/node_01/stagenet/lmdb/ -a 56VbjczrFCVZiLn66S3Qzv8QfmtcwkdXgM5cWGsXAPxoQeMQ79md51PLPCijvzk1iHbuHi91pws5B7iajTX9KTtJ4Z6HAo6 -v f747f4a4838027c9af80e6364a941b60c538e67e9ea198b6ec452b74c276de06
//string known_outputs_csv_2_56bCoE {"./res/outputs_stagenet_2_56Vbjcz.csv"};
//TEST_F(OUTPUTIDENT_TEST, OutgingMixRingctTransaction)
//{
//// rintct txs with mixture of key images (pre- and post-ringct)
//// private stagenet tx_hash 33bb33518ee4a328173a12e9cb37b7fdccee33935653419589dea30e0f54ad72
//string tx_hex {"020011028094ebdc030704314a0f060129e87744d511a9442adecacc0ed57393251a60bb99cffe7a99a7f3681c2aa371e70280d293ad0307050d7803200612e7cea6a2f34794c259fd23cd6e343bd6e82c7a888940f33bf28d52833df52e090280c09e90acbb140700010201010201df726719bf76d6d4d6763a19095de1710bc12409d6bb0a5be3fd6ee3aa29765f0280d0acf30e07ee03f408de01860163ad020cdd17c2b969bc533f8687900ba3e1df05e5d137addd68747708f512a644ec2e9e0280c0fc82aa0207c0041c9c048401950af40624dca383d04176f3f4fac05b1525e10aac499aac034fe5cc98eb2a7b37bf8ab9120280c089a9a2f50f0700020201010101dbaf23996694ec61e8b3159a2284145595aa05d84bde0dd6f98304ec9a17c3250280b09dc2df0107d304ec0bb30267c401ef02ad02d9b9dbea21bbf083b1345b60a2e88d68d43b92bdb2ec061b391ab19de35ca936020007abf301c88f02dd0396108d04b001cc04d875845c042498a05fdbd585b17eb974895a754b32551932b0719c4c79a0bded020007a2b903b031b51cec069a0b8202ec08c3860c7e39306ced8fd9337ad49f0057796d84c87fca1746ff2d1e41712897470280c089a9a2f50f070003010101010196d823627d093a5a6c9850ada8a448480e4decf8ec81137a162bb92e8f792ad90280d0b8e1981a070309140301020446a2c27067de4a7b91c585fa813095bc7105b5570a3d39933021d079c2ea7e5b0280e8eda1ba0107d504c5038502f301ee01940a32442817aac5f26652544cd0835906a94ca3339bd9fd40fa94fe4dde5cbfbc4dff0280c0a8ca9a3a0700010201010101441f1bb37c8dcf54f9e3b5c67d3d88b0885ce74b4cfe585ebe07d4dd63941e5c028080d194b5740705bd059002b001820339d901393205d0fefc8655dae0ebe1de72cdcb17727b1e9aeb16e2baf614f386c417f2028090dfc04a07d204067ae905fc078801be042ff23ff06c18b7fdff369ae16c820478079aff2e52c2b172bbd56828509a55810280c0fc82aa0207d9049f06b1087c8c029601f302169770d5291999984d354eb5bc0ab3de73cc3bfe87a9d1d31cc13561eb539a1f0280e08d84ddcb01079d288212ba0ee670c41eac03c7050646837a39ad973681553cb75c89c5eaf6b658ba46722b4d459d8262fcfb5a7b0200020e907350595bb23b50388459533ab5617672c752bb97d60454d077d4df9bdcc60002586c51fcfe54f68fda156dd8b947f9e2e661a5d66f05d905a4392fc271b903a92101f3338290d33f3c9cee99203dfb6441ff71fadcfef90646db7dfc250b12e2774602e0fa89b261144441d52471375d5b6fa20bb4657968fa138f0518c8b7b259519fbe4906ea03f509ac2c3da0aa9ca2e23b376bedea8fa8139f8636f1744bb1aabe52c95480a0a33547e6f546be1f3814a2686f3e557231b568096ddb56f0dd4c7e439c0f8976fcc8baa0211dfbd22dd4e5025396b41266b5b15a97fecc75b088124a37ca3350d001a9ae71f96a4f4e204642c92967455403919541186077c85da1c5143f06d551070998ce959544f84ee00ed1f5333b235ff432625f6536f02509462c5c939b62d13522a6d36031935015f92bae5eabae277dfdb22971552f3964b8430b2cdaeaed13cfea9d50a3877aea4d3c5683a65691c82c09879a3102a3349048175be9857f15991126a7ff5a90e3c10f246bc10cf29861702417d4ef83c080621c40f47520f86f58643603293409c80ee891cbd1918436f2633ae71373682516a22513893690f2a108cbd68587ae209e1094612da7739737c0e5f4ac89026de5d97ae2332c4fab46fb2b1cee80eac46a4921a2129821e0e22663ea2e961381acff30021cc08d9b951fb29add0069445630341dcc4f220c0bcfaba36bc843a4502f32aa2128b2c44fe3f8fc968a0a487a7e7044d62f5623d610075dafd28b6b51cb6803591d424cb47d8f6c4b5fe4fa2b1d72393f47ff80f17f35f5495cc5e18449e1d7e637cde9d142baa893f9e8c919662aeb4a148dc39ba64c0b4f9e1a0b122873ddb52d12b144c12dca4cdaa776213449c32c15cbf820262b4ab5e21695b729b49fb29988cb3eb1d57132f0f85b5f838a877c0bf74c698aa3908fb331266062f70fc141ab940aa8d5c917e5d3fe06ef727908e03aaae87cb802d3c05b2fc4de7003bdabd4d8a01ace48f50631da273cb264a003e18bc784d89450a294ee3fc0960c7c89ac2f28170ae19b4f8ce08d91ddbe7b612d12aba3ab2fd214a63371a4400180ebb8b00206e3a268f32718e8eefd5505d7240b5fecca0dfd29f21caf9c11511136ed9576af0b44572f7c1abe14933cd6ea795dea3d26363a2af9c7294995afbd678fbd6f21ca853084594e31e38f957c639f3774ca0098ae0c03f393ffd10068845dabca6b38092e7a1320ce9e5bdca0cf9699c0f2f8f966f7f38927deb609e8891ab2d8006a7bbfd158d4da3abea0c9e9641457b3d3dbcfccec615c70500e8c944d0f79fa63cc3378ac458b313ff74f3697b8e67f9465726693e1f7e6db04e5c0ccd2bc5fb0388f4f404820b23e990323f11366ed30e724b1583960d3120104fe63e01ba2d8b27f1cd6fec494d9c5f42e18431444f8bf0a9c2c3478e11a0b585138ba13b36daab845a342a3f9eb4921180a21ac35bbaff02ff273dac4d4070f8e6c8bbf7f60679151823a483993184ec7034d79165085d513e7114687ab0476f20dc8bbef4ae0d5b5c1a385da1aa7cb2638516d53e0e20be30a9d6568120e1c85929fb798e9883a5f61897ffacd6cc7a8d22fac82adefe00ce8185e3259069ae0bf4b9f79c41e34f387d214e634c0e95
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_56Vbjcz, viewkey_56Vbjcz,
//network_type::STAGENET);
//// the ring members data from the above tx
////
//// this hex is obtained using onion explorer runnign with --enbale-as-hex flag
//// it is hex, serializied representation of of map of key_images
//// with corresponding ring members output_data_t info structure
//// we do this so that we just mack all the calls, instead of
//// accessing real blockchain for this data.
//string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a61726368697665000000000111000000010800000101010301040105010601070600204aa9d101000001070001a06631316433336266616466633330303830393136333966303333323131346662353762373930663263316363373363636538326335363262656338313132376330303030303030303030303030303030666631333030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a03039663566643065616531656662353732396362636330656464396335316330316536376663626661313066626435326338613631343461343236333637393530303030303030303030303030303030303831343030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a03536383337333263633563373537623334373738663331396565343239613234363364663936313263623334336461623263303432346433393962316165653130303030303030303030303030303030306331343030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a03164333966383364366163303731616435316465326132366663326266656163623464343738633264306432383931366535336537613535303263303737313530303030303030303030303030303030306431343030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a03430316533363332636139643062313463393536656238323135363635366665396437613837626161323132343736343738666536343037653664363331353630303030303030303030303030303030306631343030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a03031313534633661386161653539373361393137323339383836663836306163663135633230626661643632373963353939613231623233333733643061353230303030303030303030303030303030313931343030303030303030303030306263306561653562396336616436333837613431313933633436663363316430373136643737643634653232623265303762346263653735363736356132306201a038623762623235616132336539656539396564373430333066636262613231383436306463343333326437633166663830343337323434346366316564653461303030303030303030303030303030303265313430303030303030303030303062633065616535623963366164363338376134313139336334366633633164303731366437376436346532326232653037623462636537353637363561323062010800000101010301040105010701080600a007c2da5101070001a03531623763653437633337616132363839356633313230633661376566393837343062326332626537306338396630303734373133613036353966313262356130303030303030303030303030303030303031343030303030303030303030303432333236393938353133306631363635313661356261383631303936643732656363633637616461626134356562333733396130656263363161333230616501a03365623234383835343166363130343036393466643161373433353534366163373864623531653864386539393535643735316665336134383233306530353330303030303030303030303030303030306331343030303030303030303030303432333236393938353133306631363635313661356261383631303936643732656363633637616461626134356562333733396130656263363161333230616501a03864323330666663336464313639313064393034366539356331316538323365343566323839316632356233643836646236643836326237376162343661623930303030303030303030303030303030323331343030303030303030303030303432333236393938353133306631363635313661356261383631303936643732656363633637616461626134356562333733396130656263363161333230616501a06261373733653332636239343263626566373866663933393166333062303438333031313433643133626330323132313133316334646235623734633036643330303030303030303030303030303030326231343030303030303030303030303432333236393938353133306631363635313661356261383631303936643732656363633637616461626134356562333733396130656263363161333230616501a031363065636565303833653639303266313163653835666162623862376334376263313761363839326439373961653535636263326261313739393635643230303030303030303030303030303030303266313430303030303030303030303034323332363939383531333066313636353136613562613836313039366437326563636336376164616261343565623337333961306562633631613332306
//MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
//ASSERT_TRUE(xmreg::output_data_from_hex(ring_member_data_hex,
//mock_ring_members_data));
//MockGettingOutputs get_outputs(mock_ring_members_data);
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Invoke(&get_outputs,
//&MockGettingOutputs
//::get_output_keys));
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//xmreg::TxSearch::known_outputs_t known_outputs;
//ASSERT_TRUE(xmreg::check_and_adjust_path(known_outputs_csv_2_56bCoE));
//ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
//known_outputs_csv_2_56bCoE, known_outputs));
//oi.identify_outputs();
//EXPECT_EQ(oi.identified_outputs.size(), 1);
//EXPECT_EQ(oi.get_mixin_no(), 7);
//EXPECT_EQ(oi.total_received, 42433713670000);
//EXPECT_TRUE(oi.is_rct);
//oi.identify_inputs(known_outputs, cbs_mock.get());
//// numer of inputs is basically number
//// of all possible maches of our mixins.
//// this number is basically the number of
//// "output match?" strings - 1 in the explorer
//EXPECT_EQ(oi.identified_inputs.size(), 41);
//uint64_t found_input_amounts {0};
//for (auto& in_info: oi.identified_inputs)
//found_input_amounts += in_info.amount;
//EXPECT_EQ(found_input_amounts, 1669459856930000ull);
//// check when there are no found ring members candidates
//xmreg::TxSearch::known_outputs_t empty_known_outputs;
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Invoke(&get_outputs,
//&MockGettingOutputs
//::get_output_keys));
//xmreg::OutputInputIdentification oi2 {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//oi2.identify_inputs(empty_known_outputs,
//cbs_mock.get());
//EXPECT_EQ(oi2.identified_inputs.size(), 0);
//}
//TEST_F(OUTPUTIDENT_TEST, OutgingRingctTransaction)
//{
//// rintct txs with mixture of key images (pre- and post-ringct)
//// private stagenet tx_hash 7d492770e6b008dd74267c52c15d25c22aac1bdb5289d20e4633351c56063e34
//string tx_hex {"020002020007d48404338607a508ab056a0e8cfba183c9b7bcb1c05b782c42bb18ac36f9a03fc554415a30f1afb08a7d8f42020007b0c601e5408aa801a06221f508e7015517a37edd7b6c3434e9af2f57574838cec745d559b0361129ebc482eda49e33020002108a1e293bed049dbc44d9495020796ef7c3ec5ca5bfd67c1ea6c72a2441350f0002afb7943d2da8affd427e7fb820819c43ef41384d45fb14679fdf3029f4301ea721011495986d51cf148e45eabb455822b7cf0453541bd4899ea435256b2526b9c2a802e093f6933ebda27b6c2907bd7bdad62bcc2d759846ff5afe5671b508294879072cd9a1c82a96d40e013e73037a5937b88db9ffba8941d5b8a4adc1ff0d56ed7826beb8c44ffd6d963a39a18f77cde4b57218d3d34718285da2be28825e2d92cafd0156a706fa0d8d9a11ff77f92777f870eb16f54f3c026094649ad4ad708c990e47569e03a82d0406d277ebebf0cbd6ac5bf29f0fa5938aafbdb0b0d80c46ea5ddfdce901246437966c79c2d8a802e4c11ccaa3a0baace2aff1f052d811a65e3e18983b0b1625e91ceb1bf6355d8825cce21ebb645d60171001312e1f4f012ba2d401af9ad0e43a0874e87fd21ce809fb3a51737dab05060fd3570c2455b0ec1415bdaae297362b6ef750d34a29b880a0d58399e809c5fc0dc9772d1f0bc07f0af07bd20d6d507dde938c44cfa101a2555a43bfab015fd7ee9dfe106e4542d534382de20e4258ffa42f0e28a7a662aa9a5d81faace7f92bf22260fb4a4500144c7cd76902d56b91995fa733546229e3dd941f55f91e6fe3ef177d089cc91af2d02b85e809fec1656f2349b05c9f5950a831ff5b674b10e7d7fed9cc1270ad76b1291b840711d19e583e03cb4385cec9f3a6f63c6f721c99c4192aec41aca83edac0ab9105c894ea3edd826a601c75b22dff1e363e551348d1e0a019e0ef09d6dcaa640a020742fb672f6d3c99a925d73071268ef9007f51d7e283fa703dc475dee3182b036746510f568a3abe9704450fc1460525acb544c79e7b8fa6d98df156f0d4aa0bd455b928097aa01b75c740ed2c13ce9655015f639a90e2bc7512240e8c372a0e5e466e0c9b1378f72445deda6b1e1ba3cd5980ec9329574aa987fe960e641401973283df3ae3f39247914a6966ecf0a60248172ed066a7dfce62370438de5a06824689a4670cf73ff8a0ea1d46c89e97f48ca298fed0f24879ba94bd143b73092a59501eb7fb465dea2ea1d7d5b1a6ed87d11f3e118cb966ec550aa84cbfa207b24368eb194ef073e2baf0307194c5954383348ce6b6b76f531d2460e45903059e40f6d0d39c4962531bab37848953c612815510d3d850be8aaaf785031fdd088c3df74ca2ca21916aadde0c17c6774f5192c62110833391a286ae40408c780352dd4c0086dfe3faf9d0f7feee8c1360661f5cb7da2bc0458ec2ec692e94fd0e65971210683d2fab4efbea76056a82bc2c8d20c2b5647a7668a64cf942d0720715366f172ffe7b25ada2977eb544d4e680cbf4c165095b71c42ead73b82f4406750ee44f172083b1589e846004264221a4fe3487d8b37163df498f8d6b978805c6ad0648807f9014d3f6faa8c389043fa38428a821155d9df7bd059551ea480f3e74f07dd3bc73fb3d6a48bce322ad7f7ee55942f18333ebc9c570d1ca134b0579dd2d7edddf50eeeccaa0da03659f57654e2df839fe349fbe2ac4550daa210a5789292492fdf7f17c252d0aa527b59f2e06c8028dad3d0bdac8eef1862cc400a11d4d913d536fe5e577d3102b6314a730fb48fbaf969c95e78d1f09b1ed7104e615c7dc13fbbf1eb4fd73f7a027ba58a123b10b4a0c08bbc34b84270b8e0600e49701680af7635be6c23bf59137b62399f4d47ae7dfbe1a1b96f19bb6a42c0065e397c25a01f053e4afae6360ae572da4dab2afcbf861df98162cf7d8fe8707fe0e2f25e8c7f01c8eaa021087f17d194493bad9775046fef50b7889c8fca60d16c3d0ecc41f44e0578aea4723a404d4f24585391299cfa111d3608b7cfc6a01120a55a9313e7cf411da4431306fac89615f2e004eba2b20c94b580803ae420a6d7f40b54c06c19ee553bb27e230ac90fb1434dc63dd896d58b31d6f4e343306747c19c63c74aa37590078ceab076090855645d667677bb92dee03e0194ec5093d3b4d214be2b66d80e66bf3602d0383c77c1636c727ca868a0177b2d2559607551c0abb3a3c76ca00cf7fab972464c75fd1b0ec932653caf310f9cf9f5f6c059debc9717fdacb17c5fcf8af3043079af36f1fa6789303c1a422e2f439f5ba08a6091259ceb0706c0f20e8049d6194a34dcc8a0dd69ae55d619c6b0a70981c0731682d03f1c7b574408e2274edcbf558d98a709236223ad59ada971e9ca8e902568caef8bb4469d10abd2f9ece7ae6b5bd394900a6f7aded50c710817e79960272c0c4dd9c6c7fb4a825078bf37b11be79f00a629e5f2dada3208dff76f8540ece09ee925c20301736c20463a0f791ada954c5e0ba2e33227f0827da2ca8ec0da6cc52c3f8aad459113aa5adf7898b007fac9152c799fa47bee63cc828d8910c560794a42a5947d42e417978c301f695feffd5b1ba9daa53d1a9d4de6ad99f016fec322330494438cf82cfde89db4f1cdc2d0923af4a60957eaa8a2f5a8c1f0ff2bfcede99f582b30a2e7f2bb5c373a815907945053412c44b1acccdde0d9a037859894a7164bacafa4fb3428f420069f5649a98bce94aea1b29bd1a831f1c01c1b0dd8fc31b7fe7ebfc0319c99893b3969155def3d63ea4306ef0522faec108a16e2e57a7540d43b1af0bfa9e7aa5348da27e0101d768f6c3457bca983b320162956ec
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_56Vbjcz, viewkey_56Vbjcz,
//network_type::STAGENET);
//// the ring members data from the above tx
////
//// this hex is obtained using onion explorer runnign with --enbale-as-hex flag
//// it is hex, serializied representation of of map of key_images
//// with corresponding ring members output_data_t info structure
//// we do this so that we just mack all the calls, instead of
//// accessing real blockchain for this data.
//string ring_member_data_hex {"011673657269616c697a6174696f6e3a3a61726368697665000000000102000000010800023063029583029fd703bf080103e0080103550d01033c0e0100000001070001a06161336635313965313630336463653035666163356566353764653236386339373465343639326638363666336330326636323933663037323061663966333733636538303030303030303030303030303065383030303030303030303030303462636234626232393930646537653663373364633163383866376262306262383663383734306261366231613862613834633837346363636434376166353701a03433353535393961363635306133636538376262653031323334363138393132313139623232646362663739346535643637316337393238666438343161616461313038303130303030303030303030363530383031303030303030303030303637303438333034333765363563306232613737653065376131373466633135613262643837646539393739613934633864306262316430303238383134383601a03836613733376230393864346330396233333130353261343565393665613234383236346131646563626130326238653237326538653831306236653731653661623563303130303030303030303030366635633031303030303030303030303535656464323031363832303730303866653833363838646161306233383561636233613339356537373638626439346239326538366438373331616233653601a06335373039643439653766303030656565633836323562323636326132666432303230633661616361373532663339303735623863343136386336333264376563623864303130303030303030303030386638643031303030303030303030303330626264303930663532323535643961353064653632396330663430323264663230373536383739306434383933303464366230646537323439396364386101a03861386338313762633664343635386133653134626534343365363539383439326134333463316533306431366532366265666161386365386633353861356330303030303030303030303030303030616638643031303030303030303030303232303138313962326335303939646633643661343432643038633633373762653037303032316562313663393134306434323266393237363366346261316201a06238393234323937393861633936383765613465623330353432366336373562363764306665646363346335343664386562363638643132336232353932646635643932303130303030303030303030323139323031303030303030303030303864303037396530663636366664373661393331333130306662363533393031383536346230363538363632646230633134636639643038636634373433373901a0386636643862666663623866333131323833663564646261303237353935363738313933636533313331653337336336333266613834323035613631333762353434393330313030303030303030303030383933303130303030303030303030366438303231386366306537363765623935306464653835373030393131363238346661616539616462663130303435383635353733633364653436613130610108000354020103870201030d060103320a0103dd0c0103470d0103550d010001070001a03832313462373765353366313466353461313931376365643235643138356333366232356537613033346265356161366164656530313262623637363566373036303837303130303030303030303030323438373031303030303030303030303030373435303066626331333364356564383934333965383263383463643838303235613664303130333035663566383634376537313464336235666166306101a06366643664643166646566633034323633636234356539353136393265353466363532366264646564353165626237313465383665653165393537353634633839333837303130303030303030303030353738373031303030303030303030306533363365633437353664643239623961363561373130646134323631653332616232323262386439396437303561656335626236663966633330366639336101a06335613331326437623835653665306330363438396563386531633535626439646236646632303135373063613363653435346137363430346137306539636531393862303130303030303030303030646438613031303030303030303030306439626565363835303063376331373961656335323330383162643164336137626535316530323433336630666564346539666265303734393332326639653001a06137626661396639393433396132656563633465666664383538666566643133623765356233313731643965346465666139663034363435386564326337326133633866303130303030303030303030303038663031303030303030303030303762303634363730626564666666386337623330346563396631313037633735616536623931656336653565323137393762393733326465303539383036663001a065393564626164623762313334636262656564663465316234393733386136366433303137616463346664373933336439616139623431356238656634363530303030303030303030303030303030306139393130313030303030303030303063656263613836343366613039363536323639393635643831363238383165356333653866636537383032613963343
//MockGettingOutputs::ring_members_mock_map_t mock_ring_members_data;
//ASSERT_TRUE(xmreg::output_data_from_hex(ring_member_data_hex,
//mock_ring_members_data));
//MockGettingOutputs get_outputs(mock_ring_members_data);
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Invoke(&get_outputs,
//&MockGettingOutputs
//::get_output_keys));
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//xmreg::TxSearch::known_outputs_t known_outputs;
//ASSERT_TRUE(xmreg::check_and_adjust_path(known_outputs_csv_2_56bCoE));
//ASSERT_TRUE(xmreg::populate_known_outputs_from_csv(
//known_outputs_csv_2_56bCoE, known_outputs));
//oi.identify_outputs();
//EXPECT_EQ(oi.identified_outputs.size(), 1);
//EXPECT_EQ(oi.get_mixin_no(), 7);
//EXPECT_EQ(oi.total_received, 3296300490000ull);
//EXPECT_TRUE(oi.is_rct);
//oi.identify_inputs(known_outputs,
//cbs_mock.get());
//// numer of inputs is basically number
//// of all possible maches of our mixins.
//// this number is basically the number of
//// "output match?" strings - 1 in the explorer
//EXPECT_EQ(oi.identified_inputs.size(), 2);
//uint64_t found_input_amounts {0};
//for (auto& in_info: oi.identified_inputs)
//found_input_amounts += in_info.amount;
//EXPECT_EQ(found_input_amounts, 103312985270000ull);
//// check when get_output_returns returns false
//EXPECT_CALL(*cbs_mock, get_output_keys(_,_,_))
//.WillRepeatedly(Return(false));
//xmreg::OutputInputIdentification oi2 {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//oi2.identify_inputs(known_outputs,
//cbs_mock.get());
//EXPECT_EQ(oi2.identified_inputs.size(), 0);
//}
//TEST_F(OUTPUTIDENT_TEST, IncomingPreRingctCoinbaseTransaction)
//{
//// private testnet tx_hash af9652cb7682d0b73d4ec588d3d17b5ebfe4773dbb69228fa716242a223fdec0
//string tx_hex {"01f20201ffb60206a4fa8cd60302225670b42320e616c5c7b801a09b4414456a608808b3f712378d90c4a0bd38cd80f882ad1602137972ff6725442bae4f92d6640e2a8036b1c5652afdbe5439789f3c584ef40b80c0fc82aa0202befb33d6df13977c325dc548022a401c37c024dbd88e244bc6825418f8994df78090cad2c60e02e1b0c0394f0652e13f471b422eeb092acb245d5fc679759ca66667ce179f478c80e08d84ddcb010292ed8812901ad9fac78390e008141ebad73a30af51178915de6e1586239a121980c0caf384a302028134f3543a21a2a78dbd2629e47601accd4f703e0b402f07213cffae2d592ab2210169aa02bef903707e96e7591cf9117879ce456b27d44cd0b70ef6d90636f040bd"};
//// the tx has six outputs for 10 xmr, so we check
//// if we can identify it.
//TX_FROM_HEX(tx_hex);
//ADDR_VIEWKEY_FROM_STRING(addr_9wq79, viewkey_9wq79, net_type);
//xmreg::OutputInputIdentification oi {&address, &viewkey, &tx,
//tx_hash, is_tx_coinbase};
//oi.identify_outputs();
//EXPECT_EQ(oi.identified_outputs.size(), 6);
//EXPECT_EQ(oi.identified_inputs.size(), 0);
//EXPECT_EQ(oi.total_received, 17586985873700ull);
//EXPECT_TRUE(oi.tx_is_coinbase);
//EXPECT_EQ(pod_to_hex(oi.identified_outputs[0].pub_key),
//"225670b42320e616c5c7b801a09b4414456a608808b3f712378d90c4a0bd38cd");
//EXPECT_EQ(pod_to_hex(oi.identified_outputs.back().pub_key),
//"8134f3543a21a2a78dbd2629e47601accd4f703e0b402f07213cffae2d592ab2");
//}
//class TXSEARCH_TEST : public ::testing::TestWithParam<network_type>
//{
//public:
//static void
//SetUpTestCase()
//{
//string config_path {"../config/config.json"};
//config_json = xmreg::BlockchainSetup::read_config(config_path);
//}
//protected:
//virtual void
//SetUp()
//{
//net_type = GetParam();
//bc_setup = xmreg::BlockchainSetup {
//net_type, do_not_relay, config_json};
//mcore = std::make_unique<MockMicroCore>();
//mcore_ptr = mcore.get();
//rpc = std::make_unique<MockRPCCalls>("dummy deamon url");
//rpc_ptr = rpc.get();
//tp = std::make_unique<TP::ThreadPool>();
//tp_ptr = tp.get();
//bcs = std::make_unique<xmreg::CurrentBlockchainStatus>(
//bc_setup, std::move(mcore), std::move(rpc),
//std::move(tp));
//}
//network_type net_type {network_type::STAGENET};
//bool do_not_relay {false};
//xmreg::BlockchainSetup bc_setup;
//std::unique_ptr<MockMicroCore> mcore;
//std::unique_ptr<MockRPCCalls> rpc;
//std::unique_ptr<xmreg::CurrentBlockchainStatus> bcs;
//std::unique_ptr<TP::ThreadPool> tp;
//MockMicroCore* mcore_ptr;
//MockRPCCalls* rpc_ptr;
//TP::ThreadPool* tp_ptr;
//static json config_json;
//};
//json TXSEARCH_TEST::config_json;
}