From 6cd79b3a48d9d60aa216849d2639ddf1c2551067 Mon Sep 17 00:00:00 2001 From: SChernykh <15806605+SChernykh@users.noreply.github.com> Date: Fri, 20 Jun 2025 19:49:30 +0200 Subject: [PATCH] CI: added more tests to improve code coverage --- src/merkle.cpp | 8 ++++---- tests/src/merkle_tests.cpp | 24 ++++++++++++++++++++++++ tests/src/pool_block_tests.cpp | 13 +++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/merkle.cpp b/src/merkle.cpp index 8aaf941..11f800a 100644 --- a/src/merkle.cpp +++ b/src/merkle.cpp @@ -181,14 +181,14 @@ bool get_merkle_proof(const std::vector>& tree, const hash& h, root_hash get_root_from_proof(hash h, const std::vector& proof, size_t index, size_t count) { - if (count == 1) { - return root_hash(h); - } - if (index >= count) { return root_hash(); } + if (count == 1) { + return root_hash(h); + } + hash tmp[2]; if (count == 2) { diff --git a/tests/src/merkle_tests.cpp b/tests/src/merkle_tests.cpp index 906b750..87efbde 100644 --- a/tests/src/merkle_tests.cpp +++ b/tests/src/merkle_tests.cpp @@ -93,6 +93,15 @@ TEST(merkle, tree) auto check_full_tree = [&hashes, &root]() { std::vector> tree; + + { + hash h; + std::vector proof; + uint32_t path; + + ASSERT_FALSE(get_merkle_proof(tree, h, proof, path)); + } + merkle_hash_full_tree(hashes, tree); ASSERT_GE(tree.size(), 1); @@ -127,12 +136,15 @@ TEST(merkle, tree) } } + const hash empty_hash; + for (size_t i = 0, n = hashes.size(); i < n; ++i) { const hash& h = hashes[i]; std::vector proof; uint32_t path; ASSERT_TRUE(get_merkle_proof(tree, h, proof, path)); + ASSERT_FALSE(get_merkle_proof(tree, empty_hash, proof, path)); uint32_t path_monero; ASSERT_TRUE(tree_path(n, i, &path_monero)); @@ -140,6 +152,18 @@ TEST(merkle, tree) ASSERT_TRUE(verify_merkle_proof(h, proof, i, n, root)); ASSERT_TRUE(verify_merkle_proof(h, proof, path, root)); + + ASSERT_FALSE(verify_merkle_proof(h, proof, n, n, root)); + ASSERT_FALSE(verify_merkle_proof(empty_hash, proof, i, n, root)); + ASSERT_FALSE(verify_merkle_proof(empty_hash, proof, path, root)); + + while (!proof.empty()) { + proof.pop_back(); + + ASSERT_FALSE(verify_merkle_proof(h, proof, i, n, root)); + ASSERT_FALSE(verify_merkle_proof(h, proof, path, root)); + } + ASSERT_EQ(get_position_from_path(n, path), i); } }; diff --git a/tests/src/pool_block_tests.cpp b/tests/src/pool_block_tests.cpp index 760988f..42b17f5 100644 --- a/tests/src/pool_block_tests.cpp +++ b/tests/src/pool_block_tests.cpp @@ -53,6 +53,19 @@ TEST(pool_block, deserialize) ASSERT_EQ(b.deserialize(buf.data(), buf.size(), sidechain, nullptr, false), 0); + { + const PoolBlock::full_id id = b.get_full_id(); + + ASSERT_EQ(memcmp(id.data(), b.m_sidechainId.h, HASH_SIZE), 0); + ASSERT_EQ(memcmp(id.data() + HASH_SIZE, &b.m_nonce, NONCE_SIZE), 0); + ASSERT_EQ(memcmp(id.data() + HASH_SIZE + NONCE_SIZE, &b.m_extraNonce, EXTRA_NONCE_SIZE), 0); + } + + ASSERT_EQ(b.get_payout(Wallet("4B4aCvEcZr6GcusVJfEds2LXixCeJ2dQBaDUCguWmzi5L7PW5tVXfAnE4cn1mQdiNzH6zWcEPMQTiYTsNcX44ryxCJWZKZH")), 17411468548U); + ASSERT_EQ(b.get_payout(Wallet("43VbH7CQCJqhH1d327TBenCs9hFN3zvcgX5YZdGyJfEE5rabasAtKhyPsKmbYSU9AmMReACZrz9j5U2Ba6WXWoQpVi38AJn")), 1404738424U); + ASSERT_EQ(b.get_payout(Wallet("46r3PD45TYH9jVf8sEejW9JdK1EgNe6BeYLdGyJTU1MRctoevAHXpzSjBMJhdkLirGXwiWdZejSRZ8MZP72artSD17LprKY")), 1419699645U); + ASSERT_EQ(b.get_payout(Wallet("44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg")), 0U); + size_t header_size, miner_tx_size; int outputs_offset, outputs_blob_size; const std::vector mainchain_data = b.serialize_mainchain_data(&header_size, &miner_tx_size, &outputs_offset, &outputs_blob_size);