Line data Source code
1 : // Copyright (c) 2022 The PIVX Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or https://www.opensource.org/licenses/mit-license.php. 4 : 5 : #include "netbase.h" 6 : #include "test/test_pivx.h" 7 : #include "tiertwo/netfulfilledman.h" 8 : #include "utiltime.h" 9 : 10 : #include <boost/test/unit_test.hpp> 11 : 12 : BOOST_FIXTURE_TEST_SUITE(netfulfilledman_tests, RegTestingSetup) 13 : 14 2 : BOOST_AUTO_TEST_CASE(netfulfilledman_simple_add_and_expire) 15 : { 16 1 : int64_t now = GetTime(); 17 1 : SetMockTime(now); 18 : 19 1 : CNetFulfilledRequestManager fulfilledMan(DEFAULT_ITEMS_FILTER_SIZE); 20 2 : CService service = LookupNumeric("1.1.1.1", 9999); 21 2 : std::string request = "request"; 22 1 : BOOST_ASSERT(!fulfilledMan.HasFulfilledRequest(service, request)); 23 : 24 : // Add request 25 1 : fulfilledMan.AddFulfilledRequest(service, request); 26 : // Verify that the request is there 27 1 : BOOST_ASSERT(fulfilledMan.HasFulfilledRequest(service, request)); 28 : 29 : // Advance mock time to surpass FulfilledRequestExpireTime 30 1 : SetMockTime(GetMockTime() + 60 * 60 + 1); 31 : 32 : // Verify that the request exists and expired now 33 2 : BOOST_CHECK(fulfilledMan.Size() == 1); 34 2 : BOOST_CHECK(!fulfilledMan.HasFulfilledRequest(service, request)); 35 : 36 : // Verify request removal 37 1 : fulfilledMan.CheckAndRemove(); 38 2 : BOOST_CHECK(fulfilledMan.Size() == 0); 39 : 40 : // Items filter, insertion and lookup. 41 1 : uint256 item(g_insecure_rand_ctx.rand256()); 42 1 : fulfilledMan.AddItemRequest(service, item); 43 2 : BOOST_CHECK(fulfilledMan.HasItemRequest(service, item)); 44 : 45 2 : CService service2 = LookupNumeric("1.1.1.2", 9999); 46 2 : BOOST_CHECK(!fulfilledMan.HasItemRequest(service2, item)); 47 : 48 : // Advance mock time to surpass the expiration time 49 1 : SetMockTime(GetMockTime() + DEFAULT_ITEMS_FILTER_CLEANUP + 1); 50 1 : fulfilledMan.CheckAndRemove(); 51 2 : BOOST_CHECK(!fulfilledMan.HasItemRequest(service, item)); 52 : 53 : // Now test filling up the filter 54 1 : fulfilledMan.AddItemRequest(service, item); 55 301 : for (int i = 0; i < 300; i++) { 56 300 : uint256 element(g_insecure_rand_ctx.rand256()); 57 300 : fulfilledMan.AddItemRequest(service, element); 58 600 : BOOST_CHECK(fulfilledMan.HasItemRequest(service, element)); 59 : } 60 : 61 1 : fulfilledMan.CheckAndRemove(); 62 2 : BOOST_CHECK(!fulfilledMan.HasItemRequest(service, item)); 63 1 : } 64 : 65 : BOOST_AUTO_TEST_SUITE_END()