Changeset View
Changeset View
Standalone View
Standalone View
chronik/test/bridgeprimitives_tests.cpp
Show First 20 Lines • Show All 163 Lines • ▼ Show 20 Lines | BOOST_FIXTURE_TEST_CASE(test_bridge_genesis, TestChain100Setup) { | ||||
chronik_bridge::BlockTx &bridgedGenesisTx = bridgedGenesisBlock.txs[0]; | chronik_bridge::BlockTx &bridgedGenesisTx = bridgedGenesisBlock.txs[0]; | ||||
CMutableTransaction genesisTxFromDisk; | CMutableTransaction genesisTxFromDisk; | ||||
BOOST_CHECK(node::ReadTxFromDisk( | BOOST_CHECK(node::ReadTxFromDisk( | ||||
genesisTxFromDisk, | genesisTxFromDisk, | ||||
FlatFilePos(bridgedGenesisBlock.file_num, bridgedGenesisTx.data_pos))); | FlatFilePos(bridgedGenesisBlock.file_num, bridgedGenesisTx.data_pos))); | ||||
BOOST_CHECK(genesisTxFromDisk.GetHash() == genesisBlock.vtx[0]->GetHash()); | BOOST_CHECK(genesisTxFromDisk.GetHash() == genesisBlock.vtx[0]->GetHash()); | ||||
CheckTxsEqual(chronik_bridge::load_tx(bridgedGenesisBlock.file_num, | CheckTxsEqual(bridge.load_tx(bridgedGenesisBlock.file_num, | ||||
bridgedGenesisTx.data_pos, | bridgedGenesisTx.data_pos, | ||||
bridgedGenesisTx.undo_pos), | bridgedGenesisTx.undo_pos), | ||||
bridgedGenesisTx.tx); | bridgedGenesisTx.tx); | ||||
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); | CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); | ||||
ss << genesisBlock.vtx[0]; | ss << genesisBlock.vtx[0]; | ||||
BOOST_CHECK_EQUAL(HexStr(ss), HexStr(chronik_bridge::load_raw_tx( | BOOST_CHECK_EQUAL(HexStr(ss), | ||||
bridgedGenesisBlock.file_num, | HexStr(bridge.load_raw_tx(bridgedGenesisBlock.file_num, | ||||
bridgedGenesisTx.data_pos))); | bridgedGenesisTx.data_pos))); | ||||
} | } | ||||
BOOST_FIXTURE_TEST_CASE(test_bridge_detailled, TestChain100Setup) { | BOOST_FIXTURE_TEST_CASE(test_bridge_detailled, TestChain100Setup) { | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
const CChainParams ¶ms = GetConfig().GetChainParams(); | const CChainParams ¶ms = GetConfig().GetChainParams(); | ||||
const chronik_bridge::ChronikBridge bridge(params.GetConsensus(), m_node); | const chronik_bridge::ChronikBridge bridge(params.GetConsensus(), m_node); | ||||
ChainstateManager &chainman = *Assert(m_node.chainman); | ChainstateManager &chainman = *Assert(m_node.chainman); | ||||
▲ Show 20 Lines • Show All 129 Lines • ▼ Show 20 Lines | chronik_bridge::Block expectedBridgedTestBlock = { | ||||
{.tx = expectedTestTx2, .data_pos = 39912, .undo_pos = 8257}, | {.tx = expectedTestTx2, .data_pos = 39912, .undo_pos = 8257}, | ||||
}}; | }}; | ||||
CheckBlocksEqual(bridgedTestBlock, expectedBridgedTestBlock); | CheckBlocksEqual(bridgedTestBlock, expectedBridgedTestBlock); | ||||
CheckMatchesDisk(testBlock, bridgedTestBlock); | CheckMatchesDisk(testBlock, bridgedTestBlock); | ||||
for (const chronik_bridge::BlockTx &bridgedTx : bridgedTestBlock.txs) { | for (const chronik_bridge::BlockTx &bridgedTx : bridgedTestBlock.txs) { | ||||
CheckTxsEqual(chronik_bridge::load_tx(bridgedTestBlock.file_num, | CheckTxsEqual(bridge.load_tx(bridgedTestBlock.file_num, | ||||
bridgedTx.data_pos, | bridgedTx.data_pos, bridgedTx.undo_pos), | ||||
bridgedTx.undo_pos), | |||||
bridgedTx.tx); | bridgedTx.tx); | ||||
} | } | ||||
for (size_t i = 0; i < testBlock.vtx.size(); ++i) { | for (size_t i = 0; i < testBlock.vtx.size(); ++i) { | ||||
CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); | CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); | ||||
ss << testBlock.vtx[i]; | ss << testBlock.vtx[i]; | ||||
BOOST_CHECK_EQUAL(HexStr(ss), HexStr(chronik_bridge::load_raw_tx( | BOOST_CHECK_EQUAL(HexStr(ss), HexStr(bridge.load_raw_tx( | ||||
bridgedTestBlock.file_num, | bridgedTestBlock.file_num, | ||||
bridgedTestBlock.txs[i].data_pos))); | bridgedTestBlock.txs[i].data_pos))); | ||||
} | } | ||||
} | } | ||||
BOOST_FIXTURE_TEST_CASE(test_bridge_bad, TestChain100Setup) { | BOOST_FIXTURE_TEST_CASE(test_bridge_bad, TestChain100Setup) { | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | for (size_t idx = 0; idx < testNumTxsCases.size(); ++idx) { | ||||
bridge.load_block_undo(*chainman.ActiveTip()); | bridge.load_block_undo(*chainman.ActiveTip()); | ||||
// test matches disk | // test matches disk | ||||
chronik_bridge::Block bridgedBlock = chronik_bridge::bridge_block( | chronik_bridge::Block bridgedBlock = chronik_bridge::bridge_block( | ||||
testBlock, *testBlockUndo, *chainman.ActiveTip()); | testBlock, *testBlockUndo, *chainman.ActiveTip()); | ||||
CheckMatchesDisk(testBlock, bridgedBlock); | CheckMatchesDisk(testBlock, bridgedBlock); | ||||
for (const chronik_bridge::BlockTx &bridgedTx : bridgedBlock.txs) { | for (const chronik_bridge::BlockTx &bridgedTx : bridgedBlock.txs) { | ||||
CheckTxsEqual(chronik_bridge::load_tx(bridgedBlock.file_num, | CheckTxsEqual(bridge.load_tx(bridgedBlock.file_num, | ||||
bridgedTx.data_pos, | bridgedTx.data_pos, | ||||
bridgedTx.undo_pos), | bridgedTx.undo_pos), | ||||
bridgedTx.tx); | bridgedTx.tx); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
BOOST_FIXTURE_TEST_CASE(test_load_tx_bad, TestChain100Setup) { | BOOST_FIXTURE_TEST_CASE(test_load_tx_bad, TestChain100Setup) { | ||||
const CChainParams ¶ms = GetConfig().GetChainParams(); | |||||
const chronik_bridge::ChronikBridge bridge(params.GetConsensus(), m_node); | |||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
chronik_bridge::load_tx(0x7fffffff, 0, 0), std::runtime_error, | bridge.load_tx(0x7fffffff, 0, 0), std::runtime_error, | ||||
[](const std::runtime_error &ex) { | [](const std::runtime_error &ex) { | ||||
BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); | BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); | ||||
return true; | return true; | ||||
}); | }); | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION( | ||||
chronik_bridge::load_tx(0, 0x7fffffff, 0), std::runtime_error, | bridge.load_tx(0, 0x7fffffff, 0), std::runtime_error, | ||||
[](const std::runtime_error &ex) { | [](const std::runtime_error &ex) { | ||||
BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); | BOOST_CHECK_EQUAL(ex.what(), "Reading tx data from disk failed"); | ||||
return true; | return true; | ||||
}); | }); | ||||
uint32_t genesisCbDataPos = 89; | uint32_t genesisCbDataPos = 89; | ||||
BOOST_CHECK_EXCEPTION( | BOOST_CHECK_EXCEPTION(bridge.load_tx(0, genesisCbDataPos, 0x7fffffff), | ||||
chronik_bridge::load_tx(0, genesisCbDataPos, 0x7fffffff), | |||||
std::runtime_error, [](const std::runtime_error &ex) { | std::runtime_error, [](const std::runtime_error &ex) { | ||||
BOOST_CHECK_EQUAL(ex.what(), | BOOST_CHECK_EQUAL( | ||||
ex.what(), | |||||
"Reading tx undo data from disk failed"); | "Reading tx undo data from disk failed"); | ||||
return true; | return true; | ||||
}); | }); | ||||
// sanity check | // sanity check | ||||
chronik_bridge::load_tx(0, genesisCbDataPos, 0); | bridge.load_tx(0, genesisCbDataPos, 0); | ||||
} | } | ||||
BOOST_AUTO_TEST_SUITE_END() | BOOST_AUTO_TEST_SUITE_END() |