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/mysql_tests.cpp

369 lines
64 KiB

6 years ago
//
// Created by mwo on 15/06/18.
//
#include "../src/MicroCore.h"
#include "../src/YourMoneroRequests.h"
//#include "chaingen.h"
//#include "chaingen_tests_list.h"
6 years ago
#include "gtest/gtest.h"
namespace
6 years ago
{
using json = nlohmann::json;
using namespace std;
using namespace mysqlpp;
using namespace cryptonote;
using namespace epee::string_tools;
#define TX_FROM_HEX(hex_string) \
transaction tx; \
crypto::hash tx_hash; \
crypto::hash tx_prefix_hash; \
ASSERT_TRUE(xmreg::hex_to_tx(hex_string, tx, tx_hash, tx_prefix_hash)); \
string tx_hash_str = pod_to_hex(tx_hash); \
string tx_prefix_hash_str = pod_to_hex(tx_prefix_hash);
#define TX_AND_ACC_FROM_HEX(HEX_TX, HEX_ACC_ADDR) \
TX_FROM_HEX(HEX_TX) \
xmreg::XmrAccount acc; \
ASSERT_TRUE(xmr_accounts->select(HEX_ACC_ADDR, acc));
/**
* Fixture that connects to openmonero_test database
* and repopulates it with known data for each test.
*/
class MYSQL_TEST : public ::testing::Test
{
protected:
static void SetUpTestCase()
{
// read in confing json file and get test db info
std::string config_json_path{"../config/config.json"};
// check if config-file provided exist
if (!boost::filesystem::exists(config_json_path))
{
std::cerr << "Config file " << config_json_path
<< " does not exist\n";
return;
}
json config_json;
try
{
// try reading and parsing json config file provided
std::ifstream i(config_json_path);
i >> config_json;
db_config = config_json["database_test"];
}
catch (const std::exception &e)
{
std::cerr << "Error reading confing file "
<< config_json_path << ": "
<< e.what() << '\n';
throw e;
}
xmreg::MySqlConnector::url = db_config["url"];
xmreg::MySqlConnector::port = db_config["port"];
xmreg::MySqlConnector::username = db_config["user"];
xmreg::MySqlConnector::password = db_config["password"];
xmreg::MySqlConnector::dbname = db_config["dbname"];
try
{
auto conn = std::make_shared<xmreg::MySqlConnector>(
new mysqlpp::MultiStatementsOption(true));
// MySqlAccounts will try connecting to the mysql database
xmr_accounts = std::make_shared<xmreg::MySqlAccounts>(conn);
}
catch (std::exception const &e)
{
std::cerr << e.what() << '\n';
throw e;
}
db_data = xmreg::read("../sql/openmonero_test.sql");
}
virtual void SetUp()
{
mysqlpp::Query query = xmr_accounts
->get_connection()->get_connection().query(db_data);
query.parse();
try
{
bool is_success = query.exec();
while(query.more_results())
query.store_next();
}
catch (std::exception &e)
{
std::cerr << e.what() << '\n';
throw e;
}
}
static std::string db_data;
static json db_config;
static std::shared_ptr<xmreg::MySqlAccounts> xmr_accounts;
};
std::string MYSQL_TEST::db_data;
json MYSQL_TEST::db_config;
std::shared_ptr<xmreg::MySqlAccounts> MYSQL_TEST::xmr_accounts;
TEST_F(MYSQL_TEST, Connection)
{
EXPECT_TRUE(xmr_accounts != nullptr);
EXPECT_TRUE(xmr_accounts->get_connection()->get_connection().connected());
EXPECT_TRUE(xmr_accounts->get_connection()->ping());
}
TEST_F(MYSQL_TEST, GetAccount)
{
// existing address
string xmr_addr{"57Hx8QpLUSMjhgoCNkvJ2Ch91mVyxcffESCprnRPrtbphMCv8iGUEfCUJxrpUWUeWrS9vPWnFrnMmTwnFpSKJrSKNuaXc5q"};
xmreg::XmrAccount acc;
bool is_success = xmr_accounts->select(xmr_addr, acc);
EXPECT_TRUE(is_success);
EXPECT_EQ(acc.id, 129);
EXPECT_EQ(acc.scanned_block_height, 101610);
EXPECT_EQ(acc.viewkey_hash, "1acf92d12101afe2ce7392169a38d2d547bd042373148eaaab323a3b5185a9ba");
}
TEST_F(MYSQL_TEST, InsertAndGetAccount)
{
uint64_t mock_current_blockchain_height = 452145;
uint64_t mock_current_blockchain_timestamp = 1529302789;
DateTime blk_timestamp_mysql_format
= mysqlpp::DateTime(static_cast<time_t>(mock_current_blockchain_timestamp));
// address to insert
string xmr_addr {"44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A"};
string view_key {"f359631075708155cc3d92a32b75a7d02a5dcf27756707b47a2b31b21c389501"};
string view_key_hash {"cdd3ae89cbdae1d14b178c7e7c6ba380630556cb9892bd24eb61a9a517e478cd"};
uint64_t expected_primary_id = xmr_accounts->get_next_primary_id(xmreg::XmrAccount());
int64_t acc_id = xmr_accounts->insert(xmr_addr, view_key_hash,
blk_timestamp_mysql_format,
mock_current_blockchain_height);
EXPECT_EQ(acc_id, expected_primary_id);
xmreg::XmrAccount acc;
bool is_success = xmr_accounts->select(xmr_addr, acc);
EXPECT_EQ(acc.id, expected_primary_id);
EXPECT_EQ(acc.scanned_block_height, mock_current_blockchain_height);
EXPECT_EQ(acc.scanned_block_timestamp, mock_current_blockchain_timestamp);
EXPECT_EQ(acc.viewkey_hash, view_key_hash);
// now try inserting same account. it should fail
acc_id = xmr_accounts->insert(xmr_addr, view_key_hash,
blk_timestamp_mysql_format,
mock_current_blockchain_height);
EXPECT_EQ(acc_id, 0);
}
// stagenet tx: 4b40cfb2fdce2cd57a834a380901d55d70aba29dad13ac6c4dc82a895f439ecf
const string tx_4b40_hex {"0200010200089832f68b01b2a601a21ec01da83ffe0139a71678019703665175d1e067d20c738a8634aeaad6a7bc493a4b5a641b4962fa020002fb1d79f31791c9553c6dc1c066cde2361385021a5c33e7101d69a557cc3c34a1000292b1073ac7c2fdd851955e7fb76cbc7de4e812db745b5e795445594ea1c7d2a721010a9e82db48149442ac50cff52a39fda95f90b9683098b02e413a52b4d1f05f1c0180f3a3f93aaac0d8887ce542c01e49afbaf1f5ac8e1e4c8882011dd83fa33d1c9efa5f210d39e17c153a6a5825da329dcb31cd1acae98961d55038fb22e78fb93b95e6820a6904ff5b7bbfcf0cd1f6b9e9dd56f41062c7f5f43d9e1b3d69724eeca4bc3404a41ff0669f7f8ae725da8bbc2f8d0411605d2c3e959e3099414ffce1654418020d6ee74bb25042045e955b966e060a9f65b9cfccfbdcb4ee3101019a51f3a41372414c90383c9b84fb4ac690047ea67d70c917192abeb1fdf6c618aeafc732ae9a3e6c6f7fb274240ca04d24035a1d55b3fd1060dc3f4e64f9816868f36d2a0aeb76b64169bc9525d7d70b077c8b998b1204c6108e2917af893b0de24f4adb043eee433b096db8ef730de6e339a84f966b80b239821f350e2a8b10817fc19508da4f82bcb90fcf84cd47929ab1ba90bde5d252767736a4b23d26063cc6b2120dc636b2d4e3e7b3f6d7448882e01c10cf7bdd2117710dc49a59b49cf99212800093da22a6ab5bf693a80d4a662f35259f088a91a26ac261980c537238daa7a40477871f7481973edbcc86fa4885a4061d5c889d0986b4c0cb394165d4039081069f61cff822c7a227474d1609dbf05909f738803834b9e1b5ee68dcb825fcd906d880684e5fa684c8cb02495530fcaeeb35a405345f352ef3c8cf276c096d4303ee14cc0a48533afd1bcdf32dcfb25db4c45a19b10926dff72ace2c2a1d0759090acff99ad06e3f81c4d759a9f74d47fff9cb61d3784aa0eb57a250eec8d14800b85026f5b112740e2e8c257541bdfa4ea1f166b9d930e9705fa1d3f3c2be1e0fb242394d9230c7c457fc8422a6f919a06df5c52d954fa1bfdb57a0a2778d35020ef07490fc3c4f6e99ceaef97fcb3da049898944f3291b96a4f9ce491654340414565db2e0c6bd13eab933194b32336c09c478689cc4a7160b63ecb59937b2028e1649744c6ea69db01aed72fb8b39519cb28d764f158789cc539e01fd5f8f098597c8977e6d2b22c37b289c95dca13bece9e28f741ae2384ead8f0d6df7c30f311210523cb0b7e8c1173aee311362282f3c7d06ae2153969d073bec14ff3605d193bfe829e110df39b894fc4a8eb462d357098688748d579c85f9dc9e9cd20229c9865bc54ae8338433247c28875249e37d4d9b9ccbad611ce5948f1c7ea00fccdc41a9fbe942539a44111f160c9b1dc2653ecae0e4c30bada58d9164fa4c021b60fc0e2068510ef8ec56f7c8e036f2eb31ae0871c9a6aff7b8ad6a86054a06daf06393871f41859f51165f09d22fedd8a2326099a803491dbff5027f72540ed6981f505d1162d86c1ec716758bfbf4e1bfdbbe628b9340942a328209c86b0ec71981c90b407b146cbf065cfd8b0a1c2528aaf007c505a83779dacf8cb7500577a1f8f4a2c9a833d08b254c0c5edbbe87c9eaf266627d23bf518373dceba4099c13c6c468b99c16d56ea5eec12620867fdeb01be66bb0248a7ab7dd6434aa042392c4482e8694292bfc638f1a344d35c9cbfe121a25d2302db4db9688285905fcef9a892593840fe2ddebf0e059e341b2e7f107ee6a19fe386e3f9ea0da2801c5e9fe1b9c4b21155f6f2194ef36f2383097f9cf7ee0994873cfd92d098a33006547ef67bbeb2c1386fcbeec6f0b974532f2ac6e474b26683a37ed3919ec3108b578d3a552c32a362c0bea8bfe35c481f014721af9503a0663d95f5aa91b8802c32f60dbaa65978ad114a2fd45901a07fb4dded61d19e30c8c11e4efbdc1180a02d08d05a646bd8a4d160203da8d490ae0a0b4e631280401d635eb78e0416408c208436dcd653c11a75f365e2d012e0e69f0d4fe2fb2997726dad29468109001ed7c65464ba734e4b35f2ac85a4437fcafe0cdb6128e634970ba420e2e3296080636520e9fbf453e07cdd215117a2eeffed5a0ea0003761f5eb4c35aebf87b063f59d0571e149dc9d0c143a59415a7fe950d34b5024087145969abdc7f7140079bc25119825dda1bf080150bd40142d9635fd87e5dc691899d2686ccf6c9d106c7cdbf783fbbc83fc0feebe8abee3b458e7417a385215f1f89a2a89bef3b870c7a30a6cf4920ddd6eb50439c95c1f38fec867a41e628415ed142b7014991fd0818e8cf725b7075498e773790ccc882db0eb22453f0c9931debfb8d3adb09370f30e62b5fe94ffa7e55ff053488ad48f6e244ed6f043fae8f2225a024800c690ce15dd8017457d23c834b276d079d4a141f22db8fed4ea8f1e378fb741a2da30c09abc817ef0ad589428f966b8bdf92fb32fefa67f425ef1c58a2d4c881e8cc0156519256b87736ed84691b585687971c01a23da37ab76726602a01e771d9820add53f62168d51c7ec12ede030b61155f12e7c8d5573985a9e0884bcc41e0b50aa066b3337f2ab8e3b1031a1c843700413ef03d3734536547fc636055f5d15b0f804b3d25f90e4aaf199ee666d90199d0781526bb2040144b5a638411c1067d0bc5e3ef1911c5223fb0f5d0ce6387702b6957f9466b1a8be6879b8c7190ec1e0662cda6005a363f5d3d4585e6d9d15349be797353179b0a713b925dddfbd05609430601339bf31226cce63c763d887364aa6f1d640892f2a074338b741b7c3303e62c6fc16f544ceeed251dbaed83
TEST_F(MYSQL_TEST, SelectSingleTx)
{
// TX_FROM_HEX(tx_4b40_hex);
// existing address
string owner_addr {"57Hx8QpLUSMjhgoCNkvJ2Ch91mVyxcffESCprnRPrtbphMCv8iGUEfCUJxrpUWUeWrS9vPWnFrnMmTwnFpSKJrSKNuaXc5q"};
TX_AND_ACC_FROM_HEX(tx_4b40_hex, owner_addr);
xmreg::XmrTransaction mysql_tx;
xmr_accounts->tx_exists(acc.id, tx_hash_str, mysql_tx);
EXPECT_EQ(mysql_tx.hash , tx_hash_str);
EXPECT_EQ(mysql_tx.prefix_hash, tx_prefix_hash_str);
EXPECT_EQ(mysql_tx.total_received, 0);
EXPECT_EQ(mysql_tx.total_sent, 100000000000000);
EXPECT_EQ(mysql_tx.blockchain_tx_id, 93830);
EXPECT_TRUE(static_cast<int>(mysql_tx.spendable) == 1);
EXPECT_TRUE(static_cast<int>(mysql_tx.coinbase) == 0);
EXPECT_TRUE(static_cast<int>(mysql_tx.is_rct) == 1);
EXPECT_TRUE(static_cast<int>(mysql_tx.rct_type) == 1);
EXPECT_EQ(mysql_tx.payment_id, string{});
EXPECT_EQ(mysql_tx.mixin, 8);
}
// existing address
string owner_addr_5Ajfk {"5AjfkEY7RFgNGDYvoRQkncfwHXT6Fh7oJBisqFUX5u96i3ZepxDPocQK29tmAwBDuvKRpskZnfA6N8Ra58qFzA4bSA3QZFp"};
// stagenet wallet: boxes smash cajun fences ouch hamburger heron pulp initiate hubcaps academy acumen weird pliers powder jive soil tissue skydive bygones nobody sifting novelty ounce sifting
// the list of txs containing our outputs and also when used in key images
// ./xmr2csv --stagenet -m -a 5AjfkEY7RFgNGDYvoRQkncfwHXT6Fh7oJBisqFUX5u96i3ZepxDPocQK29tmAwBDuvKRpskZnfA6N8Ra58qFzA4bSA3QZFp -v 3ee772709dcf834a881c432fc15625d84585e4462d7905c42460dd478a315008 -t 100000 -g 101610
// Txs associates with the stagenet address and viewkey are, based on the xmr2csv csv files
// Block_no Tx_hash
// 100938 efa653785fd536ec42283985666612eca961a0bf6a8d56c4c43b1027d173a32c
// 100939 00458128c40886b22d15cbf3c02fcbb1a0860cab654d81230dba216b50fe887d
// 100943 fc619eeccfa0626f4be78cb1002a232e0ae8c8be6826f800341977d23a5a8e1e
// 100943 9ba6fa1c6f0277651e38b9f076a2cf674d92d683beac42ad93db1f3cc429cffe
// 100948 da22b85e51644b7c5df30f65b33f4f00bb58278e8189f9073e0573eb6df1fc1f
// 100949 3fb5d474378431bfa1b01e61965dcd5a62e1753cb7b3064ba7adb98bcfd398cd
// 100964 ac715b386010bd95a506fde0ac0405aa8ad72080b1d7cef257b5b112d9ed84bb
// 100968 9bfe477f2df750dd31b2a3939b32a5017323586a11bad6cd81650cfd2d54113d
// 100985 380ff7683774c989c1fd7348b90cd37b76d68ee6f93bd5239ecc3bb3794030bf
// 100993 8901400e2cac9fa26a47a06d76c8c0ee499ff691df9d22bad2a0183943532040
// 101028 6e1368cd8c48636ee7a327c165fae95496a7098191398c950fe26031246287f1
// 101048 c3004a573547e5cd671c79a6f33f7907e2e6193d4abe47a3c5328f533b3d6cdc
// 101081 fc4b8d5956b30dc4a353b171b4d974697dfc32730778f138a8e7f16c11907691
// 101085 ad3f3d9ff1e2dd2145067950d68d24cbd53db6f9d771f0d275c33fd88e458cf0
// 101553 dcb792bba1da7a9872f9c36772ee8625282b1f144380288fbd8acb968f6de56a
// 101554 c8965d4f54de1e39033b07e88bb20cacaa725a0dc266444e2efde6f624b9245d
TEST_F(MYSQL_TEST, SelectAllTxsForAnAccount)
{
xmreg::XmrAccount acc;
ASSERT_TRUE(xmr_accounts->select(owner_addr_5Ajfk, acc));
vector<xmreg::XmrTransaction> txs;
xmr_accounts->select_txs(acc.id, txs);
EXPECT_EQ(txs.size(), 16);
EXPECT_EQ(txs[0].hash , string{"efa653785fd536ec42283985666612eca961a0bf6a8d56c4c43b1027d173a32c"});
EXPECT_EQ(txs.back().hash, string{"c8965d4f54de1e39033b07e88bb20cacaa725a0dc266444e2efde6f624b9245d"});
}
// stagenet fc4b8d5956b30dc4a353b171b4d974697dfc32730778f138a8e7f16c11907691
string tx_fc4_hex {"020001020007ae8c01df25afec02bd15ba0bb405b20117d3a9c98911f1a4a400d141164449ec5355618c0f5e0daf110dff3ada0c819d02000229f2fd7ca2af272b850887ad29157dca35ff2453c7ea3f972a084de55cdb7fa50002ef172599c1758c46ebf2c79c770c8a54dddcd548b7d2753d6338d25747ae29862101011f34ac725f4832faa17b2a5232cee54ce97bd75b91e6622f4652d92b68c0140180e4abe5e701bcb1b544a76c414d1422b33fce35b4b71459922e1243b2fd0e4483e440486106491c2ecbaad46eb10e88657e8512cd8bd92531144aef6d53ee0d44946c4c0800e7b4486bce9d83d7544f7b41c91de608065ae2161d0711684bda35bfdc673305e32806113437b948f5a2675ef2b855023e318edf836cca8021dbdf8360204b036fda13a11780d40c6bc4539883151dc455bde739a676214ada553981880f22d8db1008d6fa3fca2181c0d4773b3048074f25dc925aa2d7f930b9cc09e38510fba12d161394113f12ac6c0445413d0165a13aa4cd6c55cc3a722d64cafcae6209fda513bc778ce07a2b263938866a1a8d50f44b70a4a1ca8bea6119f109744402c739bae72c3e61a1eb91e762bb89c35d3c61ce699177c047811511c97d80340532893a242d12771207e5a110a417dd13ac8d313c9777050d236f5ca69e70120f0b44bec7777ce71e2b6f9d8bf7df3cfe41610f923179b5d9609ad8cdafb05c0052e66336de3877209b02a50a4858d3019cf35739f71196938d544e81eaa05206f863386c6622f61fee4b24f8584923e0d2a93a0876d26fcfce792150214e570037e5965fdf76c6c6d9ded1197a483999c10eb99693ed2f80fcce3ee99593cc0aba40964b8533ff60214022e66f62905ba226013193a95bdca25358bf911f610da27a07eac4d06909d8e367bdc69a8da0106d13aed43bebaba5df4b35c6d9750210309523e1036fe255df408a8ba30a9a8780076b86371fb4ee65cdb491fe620fa7e57cb715b116ea18f16e5e240b6105e12ea5ee0fac73aeae97e1eb43455704a32fe4ca237f6c84ba78edcb1048c4daeefedb8a6e464fc790ce1bcf5fd654074e5ff5b36b2172e0bdf57a0c72d5bbf1a1bedb1ceb30f6a62adcdf399101cf0f41a85968972c1eb82e65a72d5f23348809f92fa4cff546ef1aaea0ca163fe20bd33e655de3ea6808c96883d40c8625989736a48f83cf873188a14bb17a8d2b0776c942297e6679fd43cdac69adc24ab14ff8612c528fc3ecccbf465953b0dd0fd59389d9c48ef22e2a71a3939fd377b41f6ef681c5cb0236e12927d2734f9808636e85ad5b79464b4ef62483bb25989b41a2b806934cf1f4c9a49b524084880d70e6f28f8815c8bc2391014628d261c77d5dcde5fe5eb874e759a21deb7526082b34351d6c100c17d3b165b7f370fc2f38426ccf039c37e0990949b451e0c3034a2a14009589a0e84a0aaf6479a754b2eae4a95fa4ef5a50b20ac03ec97ac00982ebe4b8e946618189441e0e25bcbf04e058e2906a7d39bb780b5459053a6406a3ffdf9295f1dd95754489ab6b3f2545679ac83c23bda77d79a6936de33f5c0117618ecfb6187ee19e36447575203e52a953cc27aa61c8e3f847de8cee11e802622832d19e1c10442118a7fbbac64b06bb0e582571b68a7300bb23d6bf51bc05e928f61665f231df8e5f52aaff541b528228e5952071e6de61aaf27220bcee036cd82158e84bf97102e8781fecb09c8631c8075366a508fd8f66226c1fae030d1411f7f460411690c3d045dd2e27d1ff018ffa8fb5ff60b8b48db7023fdba7069a9bdef6abc8dbac81ca43faa7ed0005644dbd5eccfe62112614d6e88fcadd0fd9974b96116e6806104587ab2525f19942a717053e29ddb061ad5de7c84ab3012e80ed108a07bc8043813dc344a1e7f3d51fdca76d264c5bb88e6677f8f528065b89edc7a60e42cdab99a0df7b02213a17d0b486b31a07eac84a8f137d575e012b3ffe78178968e62fad7f4ba1f0c9a4764ad2966f68853011f3654d33256102a6c07c96f6f24e2cd8ff9cee472d1a6a55f45b4f3447247b2e131eb86cc79f085a5372ccf515171cb896c2896dbb4492705eef30b7b59a5c655044840ea7d20737968d6e6d9753d911e6eff2bff6df2013d9834ee9948cb5bdc8abe440152b0b3c03383bbb0c079eeb00d263b96d6ea26fc03925e2aea829a07d454982d7a2017699ec3d8a905e0bf444d9696b33a2172485f2657d278aafafac4eee51f9bb00e9378d1e9bbc2267eb8522cd0aef3eb085c91caa80fe2a8f446119c28dd6dd088910952e6735af40a10906e3ff61e7104c854f0f39be2d285475a342dd433b038a239729113d823adc339eec733876525fc7f0b4cc86fe136e919c5e10167703c4191a4b45f014a0e381f5c062c9b813da5936e7168b7f8a6b42fdb9567c8103ee9f3b273ed386e6a3eac4a39fa14527d9868e38a60f9523f2ede898ff9c1302963bfafe769ad670fe83703375e5f79dd8a921f23d3781ada2c8c3bb8ea97c028d5d359c3f04f2c67b1b4edb39a27c5a99f60be1cee63c01a67bd6e46e6970099b25b9b5d02a398cf081adb6bfecac60d6f25d242028d3916f3c67d72ce9510a5a61c32fc7f1ceecab43c8dbb1b4915b85aeafc7f4fcd9f87b3cc8a584e1f70cb18bed117c292671af9979f9081dc067b1209ff24c35e6c6393eb6c404365b0980b94ccef498362d27c6d8eec2d3b7ada754006ab34eecab5dd8a3cb1dfcb1003263d2a77ba3a97c57a276d24327a0880dbdd9cb0e85e390acd6e487ea979c0b220da3dea14e114750bfd94f92e8e61f8d47d40828f84d1a4affbe1b21c129025697c06938038f90a9ca6995008ff45e5a0
TEST_F(MYSQL_TEST, TryInsertingExistingTxToSameAccount)
{
// we should not be able to insert same tx twice for the same account
TX_AND_ACC_FROM_HEX(tx_4b40_hex, owner_addr_5Ajfk);
xmreg::XmrTransaction tx_data;
tx_data.hash = tx_hash_str;
tx_data.account_id = acc.id;
// rest of fields is not important
uint64_t tx_mysql_id = xmr_accounts->insert_tx(tx_data);
// if zero than the insert failed
EXPECT_EQ(tx_mysql_id, 0);
}
TEST_F(MYSQL_TEST, TryInsertingExistingTxToDifferentAccount)
{
// we should be able to insert same tx to different account
// even though it exisits already for other account
// for different account we can have same tx in the Transaction table
string addres_of_different_acc {"57hGLsqr6eLjUDoqWwP3Ko9nCJ4GFN5AyezdxNXwpa1PMt6M4AbsBgcHH21hVe2MJrLGSM9C7UTqcEmyBepdhvFE4eyW3Kd"};
TX_AND_ACC_FROM_HEX(tx_4b40_hex, addres_of_different_acc);
xmreg::XmrTransaction tx_data;
tx_data.hash = tx_hash_str;
tx_data.account_id = acc.id;
// rest of fields is not important
uint64_t expected_primary_id = xmr_accounts->get_next_primary_id(tx_data);
uint64_t tx_mysql_id = xmr_accounts->insert_tx(tx_data);
EXPECT_EQ(tx_mysql_id, expected_primary_id);
}
//TEST(TEST_CHAIN, GenerateTestChain)
//{
// uint64_t ts_start = 1338224400;
//
// std::vector<test_event_entry> events;
//
// GENERATE_ACCOUNT(miner);
// GENERATE_ACCOUNT(alice);
//
// MAKE_GENESIS_BLOCK(events, blk_0, miner, ts_start);
// MAKE_NEXT_BLOCK(events, blk_1, blk_0, miner);
// MAKE_NEXT_BLOCK(events, blk_1_side, blk_0, miner);
// MAKE_NEXT_BLOCK(events, blk_2, blk_1, miner);
//
// std::vector<cryptonote::block> chain;
// map_hash2tx_t mtx;
//
//
// REWIND_BLOCKS(events, blk_2r, blk_2, miner);
// MAKE_TX_LIST_START(events, txlist_0, miner, alice, MK_COINS(1), blk_2);
// MAKE_TX_LIST(events, txlist_0, miner, alice, MK_COINS(2), blk_2);
// MAKE_TX_LIST(events, txlist_0, miner, alice, MK_COINS(4), blk_2);
// MAKE_NEXT_BLOCK_TX_LIST(events, blk_3, blk_2r, miner, txlist_0);
// REWIND_BLOCKS(events, blk_3r, blk_3, miner);
// MAKE_TX(events, tx_1, miner, alice, MK_COINS(50), blk_3);
// MAKE_NEXT_BLOCK_TX1(events, blk_4, blk_3r, miner, tx_1);
// REWIND_BLOCKS(events, blk_4r, blk_4, miner);
// MAKE_TX(events, tx_2, miner, alice, MK_COINS(50), blk_4);
// MAKE_NEXT_BLOCK_TX1(events, blk_5, blk_4r, miner, tx_2);
// REWIND_BLOCKS(events, blk_5r, blk_5, miner);
// MAKE_TX(events, tx_3, miner, alice, MK_COINS(50), blk_5);
// MAKE_NEXT_BLOCK_TX1(events, blk_6, blk_5r, miner, tx_3);
// REWIND_BLOCKS(events, blk_6r, blk_6, miner);
// MAKE_TX(events, tx_4, alice, miner, MK_COINS(20), blk_6);
// MAKE_NEXT_BLOCK_TX1(events, blk_7, blk_6r, miner, tx_4);
//
// find_block_chain(events, chain, mtx, get_block_hash(blk_7));
//
//
// std::cout << "Alice BALANCE = " << get_balance(alice, chain, mtx) << std::endl;
//
// cout << get_account_address_as_str(network_type::MAINNET, false, alice.get_keys().m_account_address) << endl;
// cout << pod_to_hex(alice.get_keys().m_view_secret_key) << endl;
// cout << pod_to_hex(alice.get_keys().m_spend_secret_key) << endl;
//
// cout << '\n\n' << xmreg::tx_to_hex(tx_4) << '\n';
//
//}
}