From 35f486e03549aa94193f2d95af7819852fccb2e2 Mon Sep 17 00:00:00 2001 From: Adrien Beraud Date: Sat, 17 Oct 2026 22:11:37 -0400 Subject: [PATCH] tests: cover node transport state formatting --- tests/test_networkengine.cpp | 42 ++++++++++++++++++++++++++++++++++++ tests/test_networkengine.h | 2 ++ 2 files changed, 44 insertions(+) diff --git a/tests/test_networkengine.cpp b/tests/test_networkengine.cpp index b5e80e14..bdd966c8 100644 --- a/tests/test_networkengine.cpp +++ b/tests/test_networkengine.cpp @@ -37,6 +37,7 @@ NetworkEngineTester::testDisabledOnMsvc() #include "opendht/node.h" #include "opendht/network_utils.h" +#include "opendht/transport.h" #include "opendht/utils.h" #include "opendht/value.h" @@ -68,6 +69,7 @@ NetworkEngineTester::testDisabledOnMsvc() #include "../src/node_cache.cpp" #include "../src/network_engine.cpp" +#include #include namespace test { @@ -290,6 +292,46 @@ void NetworkEngineTester::tearDown() {} +void +NetworkEngineTester::testNodeTransportState() +{ + std::mt19937_64 rd(0); + const auto id = InfoHash::getRandom(rd); + const auto address = makeIPv4("127.0.0.2", 5000); + Node node(id, address, rd); + const auto prefix = fmt::format("{} {:<21}", id, address.toString()); + auto check = [&](const std::string& state) { + CPPUNIT_ASSERT_EQUAL(prefix + " [transport: " + state + "]", node.toString()); + std::ostringstream out; + out << node; + CPPUNIT_ASSERT_EQUAL(node.toString(), out.str()); + }; + + check("plaintext"); + auto peer = std::make_shared(transport::KeyPair::generate().pub); + node.setTransport(peer); + check("key-known"); + + const auto ephemeral = transport::KeyPair::generate().pub; + peer->setEphemeral(ephemeral); + check("key-known"); + peer->setEphemeral(ephemeral, makeIPv4("127.0.0.3", 5000)); + check("key-known"); + peer->setEphemeral(ephemeral, address); + check("authenticated"); + + peer->authorizedUntil = std::chrono::system_clock::now() + std::chrono::hours(1); + check("authenticated, authorized"); + peer->authorizedUntil = std::chrono::system_clock::now() - std::chrono::hours(1); + check("authenticated, authorization-expired"); + + peer->authorizedUntil = {}; + peer->resetEphemeral(); + check("key-known"); + node.setTransport({}); + check("plaintext"); +} + void NetworkEngineTester::testCompletesPartialSessionWithDataBeforeHeader() { diff --git a/tests/test_networkengine.h b/tests/test_networkengine.h index 6deffd94..6e52fcd8 100644 --- a/tests/test_networkengine.h +++ b/tests/test_networkengine.h @@ -27,6 +27,7 @@ class NetworkEngineTester : public CppUnit::TestFixture CPPUNIT_TEST(testGetRequestReuse); CPPUNIT_TEST(testFilteredProjectionDoesNotWaitForUnrelatedPeer); CPPUNIT_TEST(testFindNodeRequestReuse); + CPPUNIT_TEST(testNodeTransportState); CPPUNIT_TEST(testTransportDisabledKeepsLegacyWire); CPPUNIT_TEST(testTransportEncryptsAfterKeyExchange); CPPUNIT_TEST(testTransportLegacyPeerStaysPlaintext); @@ -80,6 +81,7 @@ public: void testGetRequestReuse(); void testFilteredProjectionDoesNotWaitForUnrelatedPeer(); void testFindNodeRequestReuse(); + void testNodeTransportState(); void testTransportDisabledKeepsLegacyWire(); void testTransportEncryptsAfterKeyExchange(); void testTransportLegacyPeerStaysPlaintext();