From f4520ac9201cb062ed7f2e53d55625f23fa90402 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 24 Feb 2020 10:26:46 -0500 Subject: [PATCH] make decaying hashset use llarp::Time_t and move unit tests to use catch2 --- llarp/CMakeLists.txt | 4 ++ llarp/dht/context.cpp | 2 +- llarp/path/path.cpp | 4 +- llarp/path/path_context.cpp | 4 +- llarp/router/rc_gossiper.cpp | 3 +- llarp/service/intro.hpp | 4 +- llarp/util/decaying_hashset.hpp | 28 +++++----- test/CMakeLists.txt | 2 +- .../util/test_llarp_util_decaying_hashset.cpp | 54 +++++++++---------- 9 files changed, 49 insertions(+), 56 deletions(-) diff --git a/llarp/CMakeLists.txt b/llarp/CMakeLists.txt index 448a3875b..33aaeb66e 100644 --- a/llarp/CMakeLists.txt +++ b/llarp/CMakeLists.txt @@ -199,6 +199,10 @@ set(LIB_SRC service/tag_lookup_job.cpp service/tag.cpp ) +if(TRACY_ROOT) + set(LIB_SRC ${LIB_SRC} ${TRACY_ROOT}/TracyClient.cpp) +endif() + if(TESTNET) set(LIB_SRC ${LIB_SRC} testnet.c) endif() diff --git a/llarp/dht/context.cpp b/llarp/dht/context.cpp index eccf43bd8..44b85c655 100644 --- a/llarp/dht/context.cpp +++ b/llarp/dht/context.cpp @@ -371,7 +371,7 @@ namespace llarp // clear gossip list m_GossipList.clear(); // decay gossip filter - m_GossipReplayFilter.Decay(now); + m_GossipReplayFilter.Decay(); if(_services) { diff --git a/llarp/path/path.cpp b/llarp/path/path.cpp index f655b1d79..a08a91608 100644 --- a/llarp/path/path.cpp +++ b/llarp/path/path.cpp @@ -378,8 +378,8 @@ namespace llarp m_RXRate = 0; m_TXRate = 0; - m_UpstreamReplayFilter.Decay(now); - m_DownstreamReplayFilter.Decay(now); + m_UpstreamReplayFilter.Decay(Time_t(now)); + m_DownstreamReplayFilter.Decay(Time_t(now)); if(_status == ePathBuilding) { diff --git a/llarp/path/path_context.cpp b/llarp/path/path_context.cpp index 346f3cd94..5ca1c49f9 100644 --- a/llarp/path/path_context.cpp +++ b/llarp/path/path_context.cpp @@ -9,7 +9,7 @@ namespace llarp { namespace path { - static constexpr llarp_time_t DefaultPathBuildLimit = 500; + static constexpr auto DefaultPathBuildLimit = 500ms; PathContext::PathContext(AbstractRouter* router) : m_Router(router) @@ -297,7 +297,7 @@ namespace llarp PathContext::ExpirePaths(llarp_time_t now) { // decay limits - m_PathLimits.Decay(now); + m_PathLimits.Decay(Time_t(now)); { SyncTransitMap_t::Lock_t lock(m_TransitPaths.first); diff --git a/llarp/router/rc_gossiper.cpp b/llarp/router/rc_gossiper.cpp index abbf3560d..f347f56c2 100644 --- a/llarp/router/rc_gossiper.cpp +++ b/llarp/router/rc_gossiper.cpp @@ -41,8 +41,7 @@ namespace llarp void RCGossiper::Decay(Time_t now) { - LogDebug("decay filter at ", now.count()); - m_Filter.Decay(now.count()); + m_Filter.Decay(now); } bool diff --git a/llarp/service/intro.hpp b/llarp/service/intro.hpp index 7edbd174e..c2f0040d6 100644 --- a/llarp/service/intro.hpp +++ b/llarp/service/intro.hpp @@ -32,9 +32,7 @@ namespace llarp bool ExpiresSoon(llarp_time_t now, llarp_time_t dlt = 30000) const { - if(dlt) - return now >= (expiresAt - dlt); - return IsExpired(now); + return IsExpired(now + dlt); } std::ostream& diff --git a/llarp/util/decaying_hashset.hpp b/llarp/util/decaying_hashset.hpp index fb876095a..a215e4ee1 100644 --- a/llarp/util/decaying_hashset.hpp +++ b/llarp/util/decaying_hashset.hpp @@ -11,15 +11,10 @@ namespace llarp template < typename Val_t, typename Hash_t = typename Val_t::Hash > struct DecayingHashSet { - DecayingHashSet(Time_t cacheInterval) - : DecayingHashSet(cacheInterval.count()) - { - } - explicit DecayingHashSet(llarp_time_t cacheInterval = 5000) + DecayingHashSet(Time_t cacheInterval = 5s) : m_CacheInterval(cacheInterval) { } - /// determine if we have v contained in our decaying hashset bool Contains(const Val_t& v) const @@ -30,19 +25,20 @@ namespace llarp /// return true if inserted /// return false if not inserted bool - Insert(const Val_t& v, llarp_time_t now = 0) + Insert(const Val_t& v, Time_t now = 0s) { - if(now == 0) - now = llarp::time_now_ms(); + if(now == 0s) + now = llarp::time_now(); return m_Values.emplace(v, now).second; } /// decay hashset entries void - Decay(llarp_time_t now = 0) + Decay(Time_t now = 0s) { - if(now == 0) - now = llarp::time_now_ms(); + if(now == 0s) + now = llarp::time_now(); + auto itr = m_Values.begin(); while(itr != m_Values.end()) { @@ -53,21 +49,21 @@ namespace llarp } } - llarp_time_t + Time_t DecayInterval() const { return m_CacheInterval; } void - DecayInterval(llarp_time_t interval) + DecayInterval(Time_t interval) { m_CacheInterval = interval; } private: - llarp_time_t m_CacheInterval; - std::unordered_map< Val_t, llarp_time_t, Hash_t > m_Values; + Time_t m_CacheInterval; + std::unordered_map< Val_t, Time_t, Hash_t > m_Values; }; } // namespace util } // namespace llarp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 025f40b1b..9fc9cbb86 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -35,7 +35,6 @@ list(APPEND GTEST_SRC util/meta/test_llarp_util_traits.cpp util/test_llarp_util_aligned.cpp util/test_llarp_util_bencode.cpp - util/test_llarp_util_decaying_hashset.cpp util/test_llarp_util_encode.cpp util/test_llarp_util_log_level.cpp util/thread/test_llarp_util_queue_manager.cpp @@ -73,6 +72,7 @@ add_executable(${CATCH_EXE} util/test_llarp_util_bits.cpp util/test_llarp_util_printer.cpp util/test_llarp_util_str.cpp + util/test_llarp_util_decaying_hashset.cpp check_main.cpp) target_link_libraries(${CATCH_EXE} PUBLIC ${STATIC_LIB} Catch2::Catch2) diff --git a/test/util/test_llarp_util_decaying_hashset.cpp b/test/util/test_llarp_util_decaying_hashset.cpp index e5710077e..14b406095 100644 --- a/test/util/test_llarp_util_decaying_hashset.cpp +++ b/test/util/test_llarp_util_decaying_hashset.cpp @@ -1,43 +1,39 @@ #include #include -#include +#include -struct DecayingHashSetTest : public ::testing::Test +TEST_CASE("DecayingHashSet test decay static time", "[decaying-hashset]") { -}; - -TEST_F(DecayingHashSetTest, TestDecayDeterministc) -{ - static constexpr llarp_time_t timeout = 5; - static constexpr llarp_time_t now = 1; + static constexpr auto timeout = 5s; + static constexpr auto now = 1s; llarp::util::DecayingHashSet< llarp::RouterID > hashset(timeout); const llarp::RouterID zero; - ASSERT_TRUE(zero.IsZero()); - ASSERT_FALSE(hashset.Contains(zero)); - ASSERT_TRUE(hashset.Insert(zero, now)); - ASSERT_TRUE(hashset.Contains(zero)); - hashset.Decay(now + 1); - ASSERT_TRUE(hashset.Contains(zero)); + REQUIRE(zero.IsZero()); + REQUIRE(not hashset.Contains(zero)); + REQUIRE(hashset.Insert(zero, now)); + REQUIRE(hashset.Contains(zero)); + hashset.Decay(now + 1s); + REQUIRE(hashset.Contains(zero)); hashset.Decay(now + timeout); - ASSERT_FALSE(hashset.Contains(zero)); - hashset.Decay(now + timeout + 1); - ASSERT_FALSE(hashset.Contains(zero)); + REQUIRE(not hashset.Contains(zero)); + hashset.Decay(now + timeout + 1s); + REQUIRE(not hashset.Contains(zero)); } -TEST_F(DecayingHashSetTest, TestDecay) +TEST_CASE("DecayingHashSet tset decay dynamic time", "[decaying-hashset]") { - static constexpr llarp_time_t timeout = 5; - const llarp_time_t now = llarp::time_now_ms(); + static constexpr auto timeout = 5s; + const llarp::Time_t now = llarp::time_now(); llarp::util::DecayingHashSet< llarp::RouterID > hashset(timeout); const llarp::RouterID zero; - ASSERT_TRUE(zero.IsZero()); - ASSERT_FALSE(hashset.Contains(zero)); - ASSERT_TRUE(hashset.Insert(zero)); - ASSERT_TRUE(hashset.Contains(zero)); - hashset.Decay(now + 1); - ASSERT_TRUE(hashset.Contains(zero)); + REQUIRE(zero.IsZero()); + REQUIRE(not hashset.Contains(zero)); + REQUIRE(hashset.Insert(zero)); + REQUIRE(hashset.Contains(zero)); + hashset.Decay(now + 1s); + REQUIRE(hashset.Contains(zero)); hashset.Decay(now + timeout); - ASSERT_FALSE(hashset.Contains(zero)); - hashset.Decay(now + timeout + 1); - ASSERT_FALSE(hashset.Contains(zero)); + REQUIRE(not hashset.Contains(zero)); + hashset.Decay(now + timeout + 1s); + REQUIRE(not hashset.Contains(zero)); }