From d3b5ff8d8c692eac11db693580913d7fefc9c099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:55:12 +0200 Subject: [PATCH] Move online_reps tests --- nano/core_test/CMakeLists.txt | 1 + nano/core_test/node.cpp | 65 ------------------------------ nano/core_test/online_reps.cpp | 72 ++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 65 deletions(-) create mode 100644 nano/core_test/online_reps.cpp diff --git a/nano/core_test/CMakeLists.txt b/nano/core_test/CMakeLists.txt index 6f7c402ae..c6276c49e 100644 --- a/nano/core_test/CMakeLists.txt +++ b/nano/core_test/CMakeLists.txt @@ -40,6 +40,7 @@ add_executable( numbers.cpp object_stream.cpp observer_set.cpp + online_reps.cpp optimistic_scheduler.cpp processing_queue.cpp processor_service.cpp diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index edeaac94e..7cbef1802 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1566,71 +1566,6 @@ TEST (node, balance_observer) } } -TEST (node, online_reps) -{ - nano::test::system system (1); - auto & node1 (*system.nodes[0]); - // 1 sample of minimum weight - ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); - auto vote (std::make_shared ()); - ASSERT_EQ (0, node1.online_reps.online ()); - node1.online_reps.observe (nano::dev::genesis_key.pub); - ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); - // 1 minimum, 1 maximum - ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); - node1.online_reps.sample (); - ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.trended ()); - node1.online_reps.clear (); - // 2 minimum, 1 maximum - node1.online_reps.sample (); - ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); -} - -TEST (node, online_reps_rep_crawler) -{ - nano::test::system system; - nano::node_flags flags; - flags.disable_rep_crawler = true; - auto & node1 = *system.add_node (flags); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ nano::dev::genesis->hash () }); - ASSERT_EQ (0, node1.online_reps.online ()); - // Without rep crawler - node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (0, node1.online_reps.online ()); - // After inserting to rep crawler - auto channel = std::make_shared (node1); - node1.rep_crawler.force_query (nano::dev::genesis->hash (), channel); - node1.vote_processor.vote_blocking (vote, channel); - ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); -} - -TEST (node, online_reps_election) -{ - nano::test::system system; - nano::node_flags flags; - flags.disable_rep_crawler = true; - auto & node1 = *system.add_node (flags); - // Start election - nano::keypair key; - nano::state_block_builder builder; - auto send1 = builder.make_block () - .account (nano::dev::genesis_key.pub) - .previous (nano::dev::genesis->hash ()) - .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::constants.genesis_amount - nano::Knano_ratio) - .link (key.pub) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) - .build (); - node1.process_active (send1); - ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); - // Process vote for ongoing election - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ send1->hash () }); - ASSERT_EQ (0, node1.online_reps.online ()); - node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Knano_ratio, node1.online_reps.online ()); -} - TEST (node, block_confirm) { auto type = nano::transport::transport_type::tcp; diff --git a/nano/core_test/online_reps.cpp b/nano/core_test/online_reps.cpp new file mode 100644 index 000000000..3fde676fb --- /dev/null +++ b/nano/core_test/online_reps.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include + +#include + +TEST (online_reps, basic) +{ + nano::test::system system (1); + auto & node1 (*system.nodes[0]); + // 1 sample of minimum weight + ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); + auto vote (std::make_shared ()); + ASSERT_EQ (0, node1.online_reps.online ()); + node1.online_reps.observe (nano::dev::genesis_key.pub); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); + // 1 minimum, 1 maximum + ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); + node1.online_reps.sample (); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.trended ()); + node1.online_reps.clear (); + // 2 minimum, 1 maximum + node1.online_reps.sample (); + ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); +} + +TEST (online_reps, rep_crawler) +{ + nano::test::system system; + nano::node_flags flags; + flags.disable_rep_crawler = true; + auto & node1 = *system.add_node (flags); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ nano::dev::genesis->hash () }); + ASSERT_EQ (0, node1.online_reps.online ()); + // Without rep crawler + node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); + ASSERT_EQ (0, node1.online_reps.online ()); + // After inserting to rep crawler + auto channel = std::make_shared (node1); + node1.rep_crawler.force_query (nano::dev::genesis->hash (), channel); + node1.vote_processor.vote_blocking (vote, channel); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); +} + +TEST (online_reps, election) +{ + nano::test::system system; + nano::node_flags flags; + flags.disable_rep_crawler = true; + auto & node1 = *system.add_node (flags); + // Start election + nano::keypair key; + nano::state_block_builder builder; + auto send1 = builder.make_block () + .account (nano::dev::genesis_key.pub) + .previous (nano::dev::genesis->hash ()) + .representative (nano::dev::genesis_key.pub) + .balance (nano::dev::constants.genesis_amount - nano::Knano_ratio) + .link (key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) + .build (); + node1.process_active (send1); + ASSERT_TIMELY_EQ (5s, 1, node1.active.size ()); + // Process vote for ongoing election + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ send1->hash () }); + ASSERT_EQ (0, node1.online_reps.online ()); + node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Knano_ratio, node1.online_reps.online ()); +} \ No newline at end of file