aboutsummaryrefslogtreecommitdiff
path: root/tests/unit_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit_tests')
-rw-r--r--tests/unit_tests/dns_resolver.cpp12
-rw-r--r--tests/unit_tests/epee_serialization.cpp68
-rw-r--r--tests/unit_tests/node_server.cpp85
3 files changed, 156 insertions, 9 deletions
diff --git a/tests/unit_tests/dns_resolver.cpp b/tests/unit_tests/dns_resolver.cpp
index d56cbe45b..bc3691e59 100644
--- a/tests/unit_tests/dns_resolver.cpp
+++ b/tests/unit_tests/dns_resolver.cpp
@@ -41,15 +41,11 @@ TEST(DNSResolver, IPv4Success)
auto ips = resolver.get_ipv4("example.com", avail, valid);
- ASSERT_EQ(1, ips.size());
-
- //ASSERT_STREQ("93.184.216.119", ips[0].c_str());
+ ASSERT_LE(1, ips.size());
ips = tools::DNSResolver::instance().get_ipv4("example.com", avail, valid);
- ASSERT_EQ(1, ips.size());
-
- //ASSERT_STREQ("93.184.216.119", ips[0].c_str());
+ ASSERT_LE(1, ips.size());
}
TEST(DNSResolver, IPv4Failure)
@@ -76,9 +72,7 @@ TEST(DNSResolver, DNSSECSuccess)
auto ips = resolver.get_ipv4("example.com", avail, valid);
- ASSERT_EQ(1, ips.size());
-
- //ASSERT_STREQ("93.184.216.119", ips[0].c_str());
+ ASSERT_LE(1, ips.size());
ASSERT_TRUE(avail);
ASSERT_TRUE(valid);
diff --git a/tests/unit_tests/epee_serialization.cpp b/tests/unit_tests/epee_serialization.cpp
index f46630615..5e5b6e40f 100644
--- a/tests/unit_tests/epee_serialization.cpp
+++ b/tests/unit_tests/epee_serialization.cpp
@@ -29,8 +29,11 @@
#include <cstdint>
#include <gtest/gtest.h>
+#include <vector>
+#include "serialization/keyvalue_serialization.h"
#include "storages/portable_storage.h"
+#include "storages/portable_storage_template_helper.h"
#include "span.h"
TEST(epee_binary, two_keys)
@@ -54,3 +57,68 @@ TEST(epee_binary, duplicate_key)
epee::serialization::portable_storage storage{};
EXPECT_FALSE(storage.load_from_binary(data));
}
+
+namespace
+{
+
+template<typename t_param>
+struct ParentObjWithOptChild
+{
+ t_param params;
+
+ ParentObjWithOptChild(): params{} {}
+
+ BEGIN_KV_SERIALIZE_MAP()
+ KV_SERIALIZE(params)
+ END_KV_SERIALIZE_MAP()
+};
+
+struct ObjWithOptChild
+{
+ bool test_value;
+
+ BEGIN_KV_SERIALIZE_MAP()
+ KV_SERIALIZE_OPT(test_value, true);
+ END_KV_SERIALIZE_MAP()
+};
+}
+
+TEST(epee_binary, serialize_deserialize)
+{
+ ParentObjWithOptChild<ObjWithOptChild> o;
+ std::string o_json;
+ o.params.test_value = true;
+
+ EXPECT_TRUE(epee::serialization::store_t_to_json(o, o_json));
+ EXPECT_TRUE(o.params.test_value);
+
+ EXPECT_TRUE(epee::serialization::load_t_from_json(o, o_json));
+ EXPECT_TRUE(o.params.test_value);
+
+ ParentObjWithOptChild<ObjWithOptChild> o2;
+ std::string o2_json;
+ o.params.test_value = false;
+
+ EXPECT_TRUE(epee::serialization::store_t_to_json(o2, o2_json));
+ EXPECT_FALSE(o2.params.test_value);
+
+ EXPECT_TRUE(epee::serialization::load_t_from_json(o2, o2_json));
+ EXPECT_FALSE(o2.params.test_value);
+
+ // compiler sets default value of test_value to false
+ ParentObjWithOptChild<ObjWithOptChild> o3;
+ std::string o3_json;
+
+ EXPECT_TRUE(epee::serialization::store_t_to_json(o3, o3_json));
+ EXPECT_FALSE(o3.params.test_value);
+
+ EXPECT_TRUE(epee::serialization::load_t_from_json(o3, o3_json));
+ EXPECT_FALSE(o3.params.test_value);
+
+ // test optional field default initialization.
+ ParentObjWithOptChild<ObjWithOptChild> o4;
+ std::string o4_json = "{\"params\": {}}";
+
+ EXPECT_TRUE(epee::serialization::load_t_from_json(o4, o4_json));
+ EXPECT_TRUE(o4.params.test_value);
+}
diff --git a/tests/unit_tests/node_server.cpp b/tests/unit_tests/node_server.cpp
index 0a1d80073..09b1d5461 100644
--- a/tests/unit_tests/node_server.cpp
+++ b/tests/unit_tests/node_server.cpp
@@ -35,6 +35,7 @@
#include "cryptonote_core/i_core_events.h"
#include "cryptonote_protocol/cryptonote_protocol_handler.h"
#include "cryptonote_protocol/cryptonote_protocol_handler.inl"
+#include "unit_tests_utils.h"
#include <condition_variable>
#define MAKE_IPV4_ADDRESS(a,b,c,d) epee::net_utils::ipv4_network_address{MAKE_IP(a,b,c,d),0}
@@ -114,6 +115,18 @@ static bool is_blocked(Server &server, const epee::net_utils::network_address &a
return true;
}
}
+
+ if (address.get_type_id() != epee::net_utils::address_type::ipv4)
+ return false;
+
+ const epee::net_utils::ipv4_network_address ipv4_address = address.as<epee::net_utils::ipv4_network_address>();
+
+ // check if in a blocked ipv4 subnet
+ const std::map<epee::net_utils::ipv4_network_subnet, time_t> subnets = server.get_blocked_subnets();
+ for (const auto &subnet : subnets)
+ if (subnet.first.matches(ipv4_address))
+ return true;
+
return false;
}
@@ -278,6 +291,78 @@ TEST(ban, ignores_port)
ASSERT_FALSE(is_blocked(server,MAKE_IPV4_ADDRESS_PORT(1,2,3,4,6)));
}
+TEST(ban, file_banlist)
+{
+ test_core pr_core;
+ cryptonote::t_cryptonote_protocol_handler<test_core> cprotocol(pr_core, NULL);
+ Server server(cprotocol);
+ cprotocol.set_p2p_endpoint(&server);
+
+ auto create_node_dir = [](){
+ boost::system::error_code ec;
+ auto path = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path("daemon-%%%%%%%%%%%%%%%%", ec);
+ if (ec)
+ return boost::filesystem::path{};
+ auto success = boost::filesystem::create_directory(path, ec);
+ if (!ec && success)
+ return path;
+ return boost::filesystem::path{};
+ };
+ const auto node_dir = create_node_dir();
+ ASSERT_TRUE(!node_dir.empty());
+ auto auto_remove_node_dir = epee::misc_utils::create_scope_leave_handler([&node_dir](){
+ boost::filesystem::remove_all(node_dir);
+ });
+
+ boost::program_options::variables_map vm;
+ boost::program_options::store(
+ boost::program_options::command_line_parser({
+ "--data-dir",
+ node_dir.string(),
+ "--ban-list",
+ (unit_test::data_dir / "node" / "banlist_1.txt").string()
+ }).options([]{
+ boost::program_options::options_description options_description{};
+ cryptonote::core::init_options(options_description);
+ Server::init_options(options_description);
+ return options_description;
+ }()).run(),
+ vm
+ );
+
+ ASSERT_TRUE(server.init(vm));
+
+ // Test cases (look in the banlist_1.txt file)
+
+ // magicfolk
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(255,255,255,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(128,128,128,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(150,75,0,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,98,0,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,98,0,255,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,98,1,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,98,1,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,98,255,255,9999)) );
+ EXPECT_FALSE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(99,99,0,0,9999)) );
+
+ // personal enemies
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(1,2,3,4,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(6,7,8,9,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(1,0,0,7,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(1,0,0,7,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(100,98,1,13,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(100,98,1,0,9999)) );
+ EXPECT_TRUE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(100,98,1,255,9999)) );
+ EXPECT_FALSE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(100,98,2,0,9999)) );
+ EXPECT_FALSE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(100,98,0,255,9999)) );
+
+ // angel
+ EXPECT_FALSE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(007,007,007,007,9999)) );
+
+ // random IP
+ EXPECT_FALSE( is_blocked(server, MAKE_IPV4_ADDRESS_PORT(145,036,205,235,9999)) );
+}
+
TEST(node_server, bind_same_p2p_port)
{
struct test_data_t