aboutsummaryrefslogtreecommitdiff
path: root/tests/unit_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit_tests')
-rw-r--r--tests/unit_tests/CMakeLists.txt3
-rw-r--r--tests/unit_tests/apply_permutation.cpp74
-rw-r--r--tests/unit_tests/ban.cpp4
-rw-r--r--tests/unit_tests/checkpoints.cpp2
-rw-r--r--tests/unit_tests/epee_utils.cpp231
-rw-r--r--tests/unit_tests/hardfork.cpp2
-rw-r--r--tests/unit_tests/hashchain.cpp129
-rw-r--r--tests/unit_tests/output_selection.cpp2
-rw-r--r--tests/unit_tests/test_peerlist.cpp2
-rw-r--r--tests/unit_tests/test_tx_utils.cpp2
10 files changed, 444 insertions, 7 deletions
diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt
index a1bf74572..1dac92bed 100644
--- a/tests/unit_tests/CMakeLists.txt
+++ b/tests/unit_tests/CMakeLists.txt
@@ -27,6 +27,7 @@
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set(unit_tests_sources
+ apply_permutation.cpp
address_from_url.cpp
ban.cpp
base58.cpp
@@ -45,6 +46,7 @@ set(unit_tests_sources
epee_utils.cpp
fee.cpp
get_xtype_from_string.cpp
+ hashchain.cpp
http.cpp
main.cpp
mnemonics.cpp
@@ -78,6 +80,7 @@ target_link_libraries(unit_tests
rpc
wallet
p2p
+ version
epee
${Boost_CHRONO_LIBRARY}
${Boost_THREAD_LIBRARY}
diff --git a/tests/unit_tests/apply_permutation.cpp b/tests/unit_tests/apply_permutation.cpp
new file mode 100644
index 000000000..a008b74ee
--- /dev/null
+++ b/tests/unit_tests/apply_permutation.cpp
@@ -0,0 +1,74 @@
+// Copyright (c) 2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "gtest/gtest.h"
+#include "common/apply_permutation.h"
+
+TEST(apply_permutation, empty)
+{
+ std::vector<int> v = {};
+ tools::apply_permutation({}, v);
+ ASSERT_EQ(v, std::vector<int>({}));
+}
+
+TEST(apply_permutation, reorder)
+{
+ // 0 1 2 3 4 5 6
+ std::vector<int> v = {8, 4, 6, 1, 7, 2, 4};
+ tools::apply_permutation({3, 5, 6, 1, 2, 4, 0}, v);
+ ASSERT_EQ(v, std::vector<int>({1, 2, 4, 4, 6, 7, 8}));
+}
+
+TEST(apply_permutation, bad_size)
+{
+ std::vector<int> v_large = {8, 4, 6, 1, 7, 2, 4, 9};
+ std::vector<int> v_small = {8, 4, 6, 1, 7, 2};
+ try
+ {
+ tools::apply_permutation({3, 5, 6, 1, 2, 4, 0}, v_large);
+ ASSERT_FALSE(true);
+ }
+ catch (const std::exception &e) {}
+ try
+ {
+ tools::apply_permutation({3, 5, 6, 1, 2, 4, 0}, v_small);
+ ASSERT_FALSE(true);
+ }
+ catch (const std::exception &e) {}
+}
+
+TEST(apply_permutation, bad_permutation)
+{
+ std::vector<int> v = {8, 4, 6, 1, 7, 2, 4};
+ try
+ {
+ tools::apply_permutation({3, 5, 6, 1, 2, 4, 1}, v);
+ ASSERT_FALSE(true);
+ }
+ catch (const std::exception &e) {}
+}
diff --git a/tests/unit_tests/ban.cpp b/tests/unit_tests/ban.cpp
index 82ff058b1..d15716a42 100644
--- a/tests/unit_tests/ban.cpp
+++ b/tests/unit_tests/ban.cpp
@@ -33,7 +33,7 @@
#include "p2p/net_node.h"
#include "cryptonote_protocol/cryptonote_protocol_handler.h"
-#define MAKE_IPV4_ADDRESS(a,b,c,d) new epee::net_utils::ipv4_network_address(MAKE_IP(a,b,c,d),0)
+#define MAKE_IPV4_ADDRESS(a,b,c,d) epee::net_utils::ipv4_network_address{MAKE_IP(a,b,c,d),0}
namespace cryptonote {
class blockchain_storage;
@@ -51,7 +51,7 @@ public:
bool get_short_chain_history(std::list<crypto::hash>& ids) const { return true; }
bool get_stat_info(cryptonote::core_stat_info& st_inf) const {return true;}
bool have_block(const crypto::hash& id) const {return true;}
- bool get_blockchain_top(uint64_t& height, crypto::hash& top_id)const{height=0;top_id=cryptonote::null_hash;return true;}
+ void get_blockchain_top(uint64_t& height, crypto::hash& top_id)const{height=0;top_id=crypto::null_hash;}
bool handle_incoming_tx(const cryptonote::blobdata& tx_blob, cryptonote::tx_verification_context& tvc, bool keeped_by_block, bool relayed, bool do_not_relay) { return true; }
bool handle_incoming_txs(const std::list<cryptonote::blobdata>& tx_blob, std::vector<cryptonote::tx_verification_context>& tvc, bool keeped_by_block, bool relayed, bool do_not_relay) { return true; }
bool handle_incoming_block(const cryptonote::blobdata& block_blob, cryptonote::block_verification_context& bvc, bool update_miner_blocktemplate = true) { return true; }
diff --git a/tests/unit_tests/checkpoints.cpp b/tests/unit_tests/checkpoints.cpp
index d3c4d3b2b..f6015db2f 100644
--- a/tests/unit_tests/checkpoints.cpp
+++ b/tests/unit_tests/checkpoints.cpp
@@ -30,7 +30,7 @@
#include "gtest/gtest.h"
-#include "cryptonote_basic/checkpoints.cpp"
+#include "checkpoints/checkpoints.cpp"
using namespace cryptonote;
diff --git a/tests/unit_tests/epee_utils.cpp b/tests/unit_tests/epee_utils.cpp
index e8ddbe3f5..f6cb0c163 100644
--- a/tests/unit_tests/epee_utils.cpp
+++ b/tests/unit_tests/epee_utils.cpp
@@ -27,6 +27,7 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <array>
+#include <boost/endian/conversion.hpp>
#include <boost/range/algorithm/equal.hpp>
#include <boost/range/algorithm_ext/iota.hpp>
#include <cstdint>
@@ -42,7 +43,11 @@
# include <arpa/inet.h>
#endif
+#include "boost/archive/portable_binary_iarchive.hpp"
+#include "boost/archive/portable_binary_oarchive.hpp"
#include "hex.h"
+#include "net/net_utils_base.h"
+#include "p2p/net_peerlist_boost_serialization.h"
#include "span.h"
#include "string_tools.h"
@@ -100,6 +105,40 @@ namespace
boost::range::iota(out, 0);
return out;
}
+
+ #define CHECK_EQUAL(lhs, rhs) \
+ EXPECT_TRUE( lhs == rhs ); \
+ EXPECT_TRUE( rhs == lhs ); \
+ EXPECT_FALSE( lhs != rhs ); \
+ EXPECT_FALSE( rhs != lhs ); \
+ EXPECT_FALSE( lhs < rhs ); \
+ EXPECT_FALSE( rhs < lhs ); \
+ EXPECT_TRUE( lhs <= rhs ); \
+ EXPECT_TRUE( rhs <= lhs ); \
+ EXPECT_FALSE( lhs > rhs ); \
+ EXPECT_FALSE( rhs > lhs ); \
+ EXPECT_TRUE( lhs >= rhs ); \
+ EXPECT_TRUE( rhs >= lhs )
+
+ #define CHECK_LESS(lhs, rhs) \
+ EXPECT_FALSE( lhs == rhs ); \
+ EXPECT_FALSE( rhs == lhs ); \
+ EXPECT_TRUE( lhs != rhs ); \
+ EXPECT_TRUE( rhs != lhs ); \
+ EXPECT_TRUE( lhs < rhs ); \
+ EXPECT_FALSE( rhs < lhs ); \
+ EXPECT_TRUE( lhs <= rhs ); \
+ EXPECT_FALSE( rhs <= lhs ); \
+ EXPECT_FALSE( lhs > rhs ); \
+ EXPECT_TRUE( rhs > lhs ); \
+ EXPECT_FALSE( lhs >= rhs ); \
+ EXPECT_TRUE( rhs >= lhs )
+
+ #ifdef BOOST_LITTLE_ENDIAN
+ #define CHECK_LESS_ENDIAN(lhs, rhs) CHECK_LESS( rhs , lhs )
+ #else
+ #define CHECK_LESS_ENDIAN(lhs, rhs) CHECK_LESS( lhs , rhs )
+ #endif
}
TEST(Span, Traits)
@@ -419,3 +458,195 @@ TEST(StringTools, GetIpInt32)
EXPECT_EQ(htonl(0xff0aff00), ip);
}
+TEST(NetUtils, IPv4NetworkAddress)
+{
+ const auto ip1 = boost::endian::native_to_big(0x330012FFu);
+ const auto ip_loopback = boost::endian::native_to_big(0x7F000001u);
+ const auto ip_local = boost::endian::native_to_big(0x0A000000u);
+
+ epee::net_utils::ipv4_network_address address1{ip1, 65535};
+ CHECK_EQUAL(address1, address1);
+ EXPECT_STREQ("51.0.18.255:65535", address1.str().c_str());
+ EXPECT_STREQ("51.0.18.255", address1.host_str().c_str());
+ EXPECT_FALSE(address1.is_loopback());
+ EXPECT_FALSE(address1.is_local());
+ EXPECT_EQ(epee::net_utils::ipv4_network_address::ID, address1.get_type_id());
+ EXPECT_EQ(ip1, address1.ip());
+ EXPECT_EQ(65535, address1.port());
+ EXPECT_TRUE(epee::net_utils::ipv4_network_address{std::move(address1)} == address1);
+ EXPECT_TRUE(epee::net_utils::ipv4_network_address{address1} == address1);
+
+ const epee::net_utils::ipv4_network_address loopback{ip_loopback, 0};
+ CHECK_EQUAL(loopback, loopback);
+ CHECK_LESS_ENDIAN(address1, loopback);
+ EXPECT_STREQ("127.0.0.1:0", loopback.str().c_str());
+ EXPECT_STREQ("127.0.0.1", loopback.host_str().c_str());
+ EXPECT_TRUE(loopback.is_loopback());
+ EXPECT_FALSE(loopback.is_local());
+ EXPECT_EQ(epee::net_utils::ipv4_network_address::ID, address1.get_type_id());
+ EXPECT_EQ(ip_loopback, loopback.ip());
+ EXPECT_EQ(0, loopback.port());
+
+ const epee::net_utils::ipv4_network_address local{ip_local, 8080};
+ CHECK_EQUAL(local, local);
+ CHECK_LESS(local, address1);
+ CHECK_LESS(local, loopback);
+ EXPECT_FALSE(local.is_loopback());
+ EXPECT_TRUE(local.is_local());
+
+ epee::net_utils::ipv4_network_address address2{ip1, 55};
+ CHECK_EQUAL(address2, address2);
+ CHECK_LESS_ENDIAN(address2, loopback);
+ CHECK_LESS(local, address2);
+ EXPECT_STREQ("51.0.18.255:55", address2.str().c_str());
+ EXPECT_STREQ("51.0.18.255", address2.host_str().c_str());
+
+
+ address2 = std::move(address1);
+ CHECK_EQUAL(address2, address1);
+
+ address2 = local;
+ CHECK_EQUAL(address2, local);
+ CHECK_LESS(address2, address1);
+
+ {
+ std::stringstream stream;
+ {
+ boost::archive::portable_binary_oarchive ostream{stream};
+ ostream << address1;
+ }
+ {
+ boost::archive::portable_binary_iarchive istream{stream};
+ istream >> address2;
+ }
+ }
+ CHECK_EQUAL(address1, address2);
+ EXPECT_EQ(ip1, address2.ip());
+ EXPECT_EQ(65535, address2.port());
+}
+
+TEST(NetUtils, NetworkAddress)
+{
+ const auto ip1 = boost::endian::native_to_big(0x330012FFu);
+ const auto ip_loopback = boost::endian::native_to_big(0x7F000001u);
+ const auto ip_local = boost::endian::native_to_big(0x0A000000u);
+
+ struct custom_address {
+ constexpr static bool equal(const custom_address&) noexcept { return false; }
+ constexpr static bool less(const custom_address&) noexcept { return false; }
+ constexpr static bool is_same_host(const custom_address&) noexcept { return false; }
+ constexpr static bool is_loopback() noexcept { return false; }
+ constexpr static bool is_local() noexcept { return false; }
+ static std::string str() { return {}; }
+ static std::string host_str() { return {}; }
+ constexpr static uint8_t get_type_id() noexcept { return uint8_t(-1); }
+ };
+
+ const epee::net_utils::network_address empty;
+ CHECK_EQUAL(empty, empty);
+ EXPECT_TRUE(empty.is_same_host(empty));
+ EXPECT_STREQ("<none>", empty.str().c_str());
+ EXPECT_STREQ("<none>", empty.host_str().c_str());
+ EXPECT_FALSE(empty.is_loopback());
+ EXPECT_FALSE(empty.is_local());
+ EXPECT_EQ(0, empty.get_type_id());
+ EXPECT_THROW(empty.as<custom_address>(), std::bad_cast);
+
+ epee::net_utils::network_address address1{
+ epee::net_utils::ipv4_network_address{ip1, 65535}
+ };
+ CHECK_EQUAL(address1, address1);
+ CHECK_EQUAL(epee::net_utils::network_address{address1}, address1);
+ CHECK_LESS(empty, address1);
+ EXPECT_TRUE(address1.is_same_host(address1));
+ EXPECT_FALSE(empty.is_same_host(address1));
+ EXPECT_FALSE(address1.is_same_host(empty));
+ EXPECT_STREQ("51.0.18.255:65535", address1.str().c_str());
+ EXPECT_STREQ("51.0.18.255", address1.host_str().c_str());
+ EXPECT_FALSE(address1.is_loopback());
+ EXPECT_FALSE(address1.is_local());
+ EXPECT_EQ(epee::net_utils::ipv4_network_address::ID, address1.get_type_id());
+ EXPECT_NO_THROW(address1.as<epee::net_utils::ipv4_network_address>());
+ EXPECT_THROW(address1.as<custom_address>(), std::bad_cast);
+
+ const epee::net_utils::network_address loopback{
+ epee::net_utils::ipv4_network_address{ip_loopback, 0}
+ };
+ CHECK_EQUAL(loopback, loopback);
+ CHECK_LESS(empty, loopback);
+ CHECK_LESS_ENDIAN(address1, loopback);
+ EXPECT_TRUE(loopback.is_same_host(loopback));
+ EXPECT_FALSE(loopback.is_same_host(address1));
+ EXPECT_FALSE(address1.is_same_host(loopback));
+ EXPECT_STREQ("127.0.0.1:0", loopback.str().c_str());
+ EXPECT_STREQ("127.0.0.1", loopback.host_str().c_str());
+ EXPECT_TRUE(loopback.is_loopback());
+ EXPECT_FALSE(loopback.is_local());
+ EXPECT_EQ(epee::net_utils::ipv4_network_address::ID, address1.get_type_id());
+
+ const epee::net_utils::network_address local{
+ epee::net_utils::ipv4_network_address{ip_local, 8080}
+ };
+ CHECK_EQUAL(local, local);
+ CHECK_LESS(local, loopback);
+ CHECK_LESS(local, address1);
+ EXPECT_FALSE(local.is_loopback());
+ EXPECT_TRUE(local.is_local());
+
+ epee::net_utils::network_address address2{
+ epee::net_utils::ipv4_network_address{ip1, 55}
+ };
+ CHECK_EQUAL(address2, address2);
+ CHECK_LESS(address2, address1);
+ CHECK_LESS(local, address2);
+ CHECK_LESS_ENDIAN(address2, loopback);
+ EXPECT_TRUE(address1.is_same_host(address2));
+ EXPECT_TRUE(address2.is_same_host(address1));
+ EXPECT_STREQ("51.0.18.255:55", address2.str().c_str());
+ EXPECT_STREQ("51.0.18.255", address2.host_str().c_str());
+
+ address2 = std::move(address1);
+ CHECK_EQUAL(address1, address1);
+ CHECK_EQUAL(empty, address1);
+ CHECK_LESS(address1, address2);
+ EXPECT_FALSE(address1.is_same_host(address2));
+ EXPECT_FALSE(address2.is_same_host(address1));
+ EXPECT_STREQ("51.0.18.255:65535", address2.str().c_str());
+ EXPECT_STREQ("51.0.18.255", address2.host_str().c_str());
+ EXPECT_FALSE(address1.is_loopback());
+ EXPECT_FALSE(address1.is_local());
+ EXPECT_THROW(address1.as<epee::net_utils::ipv4_network_address>(), std::bad_cast);
+ EXPECT_NO_THROW(address2.as<epee::net_utils::ipv4_network_address>());
+
+ address2 = local;
+ CHECK_EQUAL(address2, local);
+ CHECK_LESS(address1, address2);
+ EXPECT_TRUE(address2.is_same_host(local));
+ EXPECT_TRUE(local.is_same_host(address2));
+ EXPECT_FALSE(address2.is_same_host(address1));
+ EXPECT_FALSE(address1.is_same_host(address2));
+
+ {
+ std::stringstream stream;
+ {
+ boost::archive::portable_binary_oarchive ostream{stream};
+ ostream << address2;
+ }
+ {
+ boost::archive::portable_binary_iarchive istream{stream};
+ istream >> address1;
+ }
+ }
+ CHECK_EQUAL(address1, address2);
+ EXPECT_TRUE(address1.is_same_host(address2));
+ EXPECT_TRUE(address2.is_same_host(address1));
+ EXPECT_NO_THROW(address1.as<epee::net_utils::ipv4_network_address>());
+
+ address1 = custom_address{};
+ CHECK_EQUAL(address1, address1);
+ CHECK_LESS(address2, address1);
+ EXPECT_FALSE(address1.is_same_host(loopback));
+ EXPECT_FALSE(loopback.is_same_host(address1));
+ EXPECT_THROW(address1.as<epee::net_utils::ipv4_network_address>(), std::bad_cast);
+ EXPECT_NO_THROW(address1.as<custom_address>());
+}
diff --git a/tests/unit_tests/hardfork.cpp b/tests/unit_tests/hardfork.cpp
index c30feb461..2b0904224 100644
--- a/tests/unit_tests/hardfork.cpp
+++ b/tests/unit_tests/hardfork.cpp
@@ -53,7 +53,7 @@ public:
virtual std::string get_db_name() const { return std::string(); }
virtual bool lock() { return true; }
virtual void unlock() { }
- virtual bool batch_start(uint64_t batch_num_blocks=0) { return true; }
+ virtual bool batch_start(uint64_t batch_num_blocks=0, uint64_t batch_bytes=0) { return true; }
virtual void batch_stop() {}
virtual void set_batch_transactions(bool) {}
virtual void block_txn_start(bool readonly=false) {}
diff --git a/tests/unit_tests/hashchain.cpp b/tests/unit_tests/hashchain.cpp
new file mode 100644
index 000000000..0fa0f784a
--- /dev/null
+++ b/tests/unit_tests/hashchain.cpp
@@ -0,0 +1,129 @@
+// Copyright (c) 2014-2017, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its contributors may be
+// used to endorse or promote products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// FIXME: move this into a full wallet2 unit test suite, if possible
+
+#include "gtest/gtest.h"
+
+#include "wallet/wallet2.h"
+
+static crypto::hash make_hash(uint64_t n)
+{
+ union
+ {
+ crypto::hash hash;
+ uint64_t n;
+ } hash;
+ hash.hash = crypto::null_hash;
+ hash.n = n;
+ return hash.hash;
+}
+
+TEST(hashchain, empty)
+{
+ tools::hashchain hashchain;
+ ASSERT_EQ(hashchain.size(), 0);
+ ASSERT_EQ(hashchain.offset(), 0);
+}
+
+TEST(hashchain, genesis)
+{
+ tools::hashchain hashchain;
+ hashchain.push_back(make_hash(1));
+ ASSERT_EQ(hashchain.size(), 1);
+ ASSERT_EQ(hashchain.genesis(), make_hash(1));
+ hashchain.push_back(make_hash(2));
+ ASSERT_EQ(hashchain.size(), 2);
+ ASSERT_EQ(hashchain.genesis(), make_hash(1));
+}
+
+TEST(hashchain, push_back)
+{
+ tools::hashchain hashchain;
+ hashchain.push_back(make_hash(1));
+ hashchain.push_back(make_hash(2));
+ hashchain.push_back(make_hash(3));
+ ASSERT_EQ(hashchain[0], make_hash(1));
+ ASSERT_EQ(hashchain[1], make_hash(2));
+ ASSERT_EQ(hashchain[2], make_hash(3));
+}
+
+TEST(hashchain, clear_empty)
+{
+ tools::hashchain hashchain;
+ ASSERT_TRUE(hashchain.empty());
+ hashchain.push_back(make_hash(1));
+ ASSERT_FALSE(hashchain.empty());
+ hashchain.push_back(make_hash(2));
+ ASSERT_FALSE(hashchain.empty());
+ hashchain.clear();
+ ASSERT_TRUE(hashchain.empty());
+}
+
+TEST(hashchain, crop)
+{
+ tools::hashchain hashchain;
+ hashchain.push_back(make_hash(1));
+ hashchain.push_back(make_hash(2));
+ hashchain.push_back(make_hash(3));
+ ASSERT_EQ(hashchain.size(), 3);
+ ASSERT_EQ(hashchain[0], make_hash(1));
+ ASSERT_EQ(hashchain[1], make_hash(2));
+ ASSERT_EQ(hashchain[2], make_hash(3));
+ hashchain.crop(3);
+ ASSERT_EQ(hashchain.size(), 3);
+ hashchain.crop(2);
+ ASSERT_EQ(hashchain.size(), 2);
+ ASSERT_EQ(hashchain[0], make_hash(1));
+ ASSERT_EQ(hashchain[1], make_hash(2));
+ ASSERT_EQ(hashchain.genesis(), make_hash(1));
+ hashchain.crop(0);
+ ASSERT_TRUE(hashchain.empty());
+ ASSERT_EQ(hashchain.size(), 0);
+ hashchain.push_back(make_hash(5));
+ ASSERT_EQ(hashchain.genesis(), make_hash(5));
+ ASSERT_EQ(hashchain.size(), 1);
+}
+
+TEST(hashchain, trim)
+{
+ tools::hashchain hashchain;
+ hashchain.push_back(make_hash(1));
+ hashchain.push_back(make_hash(2));
+ hashchain.push_back(make_hash(3));
+ ASSERT_EQ(hashchain.offset(), 0);
+ hashchain.trim(2);
+ ASSERT_EQ(hashchain.offset(), 2);
+ ASSERT_EQ(hashchain.size(), 3);
+ ASSERT_EQ(hashchain[2], make_hash(3));
+ hashchain.trim(3);
+ ASSERT_EQ(hashchain.offset(), 3);
+ ASSERT_EQ(hashchain.size(), 3);
+ ASSERT_FALSE(hashchain.empty());
+ ASSERT_EQ(hashchain.genesis(), make_hash(1));
+}
diff --git a/tests/unit_tests/output_selection.cpp b/tests/unit_tests/output_selection.cpp
index ed436dffd..6ff73b107 100644
--- a/tests/unit_tests/output_selection.cpp
+++ b/tests/unit_tests/output_selection.cpp
@@ -42,7 +42,7 @@ static tools::wallet2::transfer_container make_transfers_container(size_t N)
tools::wallet2::transfer_details &td = transfers.back();
td.m_block_height = 1000;
td.m_spent = false;
- td.m_txid = cryptonote::null_hash;
+ td.m_txid = crypto::null_hash;
td.m_txid.data[0] = n & 0xff;
td.m_txid.data[1] = (n >> 8) & 0xff;
td.m_txid.data[2] = (n >> 16) & 0xff;
diff --git a/tests/unit_tests/test_peerlist.cpp b/tests/unit_tests/test_peerlist.cpp
index 4a546b50d..849020d25 100644
--- a/tests/unit_tests/test_peerlist.cpp
+++ b/tests/unit_tests/test_peerlist.cpp
@@ -38,7 +38,7 @@ TEST(peer_list, peer_list_general)
{
nodetool::peerlist_manager plm;
plm.init(false);
-#define MAKE_IPV4_ADDRESS(a,b,c,d,e) new epee::net_utils::ipv4_network_address(MAKE_IP(a,b,c,d),e)
+#define MAKE_IPV4_ADDRESS(a,b,c,d,e) epee::net_utils::ipv4_network_address{MAKE_IP(a,b,c,d),e}
#define ADD_GRAY_NODE(addr_, id_, last_seen_) { nodetool::peerlist_entry ple; ple.last_seen=last_seen_;ple.adr = addr_; ple.id = id_;plm.append_with_peer_gray(ple);}
#define ADD_WHITE_NODE(addr_, id_, last_seen_) { nodetool::peerlist_entry ple;ple.last_seen=last_seen_; ple.adr = addr_; ple.id = id_;plm.append_with_peer_white(ple);}
diff --git a/tests/unit_tests/test_tx_utils.cpp b/tests/unit_tests/test_tx_utils.cpp
index 0ff91c247..4ce62e2f5 100644
--- a/tests/unit_tests/test_tx_utils.cpp
+++ b/tests/unit_tests/test_tx_utils.cpp
@@ -141,7 +141,7 @@ TEST(parse_and_validate_tx_extra, is_valid_tx_extra_parsed)
cryptonote::blobdata b = "dsdsdfsdfsf";
ASSERT_TRUE(cryptonote::construct_miner_tx(0, 0, 10000000000000, 1000, TEST_FEE, acc.get_keys().m_account_address, tx, b, 1));
crypto::public_key tx_pub_key = cryptonote::get_tx_pub_key_from_extra(tx);
- ASSERT_NE(tx_pub_key, cryptonote::null_pkey);
+ ASSERT_NE(tx_pub_key, crypto::null_pkey);
}
TEST(parse_and_validate_tx_extra, fails_on_big_extra_nonce)
{