lokinet/test/peerstats/test_peer_types.cpp

91 lines
2.1 KiB
C++

#include <numeric>
#include <llarp/peerstats/types.hpp>
#include <test_util.hpp>
#include <catch2/catch.hpp>
TEST_CASE("Test PeerStats operator+=", "[PeerStats]")
{
llarp::RouterID id = {};
// TODO: test all members
llarp::PeerStats stats(id);
stats.numConnectionAttempts = 1;
stats.peakBandwidthBytesPerSec = 12;
llarp::PeerStats delta(id);
delta.numConnectionAttempts = 2;
delta.peakBandwidthBytesPerSec = 4;
stats += delta;
CHECK(stats.numConnectionAttempts == 3);
CHECK(stats.peakBandwidthBytesPerSec == 12); // should take max(), not add
}
TEST_CASE("Test PeerStats BEncode", "[PeerStats]")
{
llarp::RouterID id = llarp::test::makeBuf<llarp::RouterID>(0x01);
llarp::PeerStats stats(id);
stats.numConnectionAttempts = 1;
stats.numConnectionSuccesses = 2;
stats.numConnectionRejections = 3;
stats.numConnectionTimeouts = 4;
stats.numPathBuilds = 5;
stats.numPacketsAttempted = 6;
stats.numPacketsSent = 7;
stats.numPacketsDropped = 8;
stats.numPacketsResent = 9;
stats.numDistinctRCsReceived = 10;
stats.numLateRCs = 11;
stats.peakBandwidthBytesPerSec = 12.1; // should truncate to 12
stats.longestRCReceiveInterval = 13ms;
stats.leastRCRemainingLifetime = 14ms;
stats.lastRCUpdated = 15ms;
constexpr size_t bufSize = 4096;
std::array<byte_t, bufSize> raw{};
llarp_buffer_t buf(raw);
CHECK_NOTHROW(stats.BEncode(&buf));
std::string asString = (const char*)raw.data();
constexpr std::string_view expected =
"d"
"13:lastRCUpdated"
"i15e"
"24:leastRCRemainingLifetime"
"i14e"
"24:longestRCReceiveInterval"
"i13e"
"21:numConnectionAttempts"
"i1e"
"23:numConnectionRejections"
"i3e"
"22:numConnectionSuccesses"
"i2e"
"21:numConnectionTimeouts"
"i4e"
"22:numDistinctRCsReceived"
"i10e"
"10:numLateRCs"
"i11e"
"19:numPacketsAttempted"
"i6e"
"17:numPacketsDropped"
"i8e"
"16:numPacketsResent"
"i9e"
"14:numPacketsSent"
"i7e"
"13:numPathBuilds"
"i5e"
"24:peakBandwidthBytesPerSec"
"i12e"
"e";
CHECK(asString == expected);
}