// Copyright (c) 2014-2026 Savoir-faire Linux Inc. // SPDX-License-Identifier: MIT #pragma once #include #include namespace test { class NetworkEngineTester : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(NetworkEngineTester); #ifdef _MSC_VER CPPUNIT_TEST(testDisabledOnMsvc); #else CPPUNIT_TEST(testCompletesPartialSessionWithDataBeforeHeader); CPPUNIT_TEST(testBuffersLargeValueBeforeHeader); CPPUNIT_TEST(testIgnoresEmptyPartialData); CPPUNIT_TEST(testRejectsUnsolicitedPartialReply); CPPUNIT_TEST(testDropsMalformedCompletedPartialMessage); CPPUNIT_TEST(testCompletesPartialSessionFromSameSource); CPPUNIT_TEST(testSeparatesPartialSessionsBySource); CPPUNIT_TEST(testPlaintextListenRequiresToken); CPPUNIT_TEST(testListenConfirmationUpdatesSearchNodeToken); CPPUNIT_TEST(testListenReopensSocketAfterNodeExpiration); CPPUNIT_TEST(testUnauthorizedListenFlushClearsListenState); CPPUNIT_TEST(testGetRequestReuse); CPPUNIT_TEST(testFilteredProjectionDoesNotWaitForUnrelatedPeer); CPPUNIT_TEST(testFindNodeRequestReuse); CPPUNIT_TEST(testNodeTransportState); CPPUNIT_TEST(testTransportDisabledKeepsLegacyWire); CPPUNIT_TEST(testTransportEncryptsAfterKeyExchange); CPPUNIT_TEST(testTransportLegacyPeerStaysPlaintext); CPPUNIT_TEST(testTransportRejectsMismatchedNodeId); CPPUNIT_TEST(testTransportIgnoresForgedNodeListKey); CPPUNIT_TEST(testTransportPlaintextDoesNotMoveKeyedNode); CPPUNIT_TEST(testTransportPrivateNetwork); CPPUNIT_TEST(testTransportPrivateClientKeepsAuthorization); CPPUNIT_TEST(testTransportPrivateNetworkRejectsOutsiders); CPPUNIT_TEST(testTransportEpochRotation); CPPUNIT_TEST(testTransportPeerRestart); CPPUNIT_TEST(testTransportHelloIsUnauthenticated); CPPUNIT_TEST(testTransportSessionAuthorizesWrites); CPPUNIT_TEST(testTransportInitialWriteIsUnauthorized); CPPUNIT_TEST(testTransportUnvalidatedGetIsUnauthorized); CPPUNIT_TEST(testTransportEphemeralBoundToAddress); CPPUNIT_TEST(testTransportRestartedPeerReconnects); CPPUNIT_TEST(testTransportSpoofedInitialKeepsSession); CPPUNIT_TEST(testTransportSpoofedHelloKeepsSession); CPPUNIT_TEST(testTransportSpoofedInitialsDoNotFillSessionCache); CPPUNIT_TEST(testTransportSessionCacheEvictsLeastRecentlyUsed); CPPUNIT_TEST(testTransportRejectedSessionsKeepCache); CPPUNIT_TEST(testTransportInitialSenderConfirmsAfterSessionEnvelope); CPPUNIT_TEST(testTransportEncryptedFragmentsIgnorePlaintextParts); CPPUNIT_TEST(testTransportEncryptedFragmentsIgnorePlaintextHeader); CPPUNIT_TEST(testTransportEncryptedFragmentsRequireSenderKey); CPPUNIT_TEST(testValueFragmentsFitMinimumMtu); CPPUNIT_TEST(testTransportRetryRecoversSessionBeforePayload); CPPUNIT_TEST(testTransportRetryNeverResendsPayloadInInitial); CPPUNIT_TEST(testTransportRecoveryWithholdsAllRequests); CPPUNIT_TEST(testTransportColdRequestsShareProbe); CPPUNIT_TEST(testTransportDelayedReplyDoesNotResend); CPPUNIT_TEST(testTransportAuthenticatedReplyCanMoveNode); CPPUNIT_TEST(testTransportRecoveryRefreshesDeadline); CPPUNIT_TEST(testTransportSearchRoutesBeforeFetching); CPPUNIT_TEST(testTransportSearchProbeSlots); CPPUNIT_TEST(testTransportSearchHalfUnreachable); CPPUNIT_TEST(testTransportProbeFailureNotifiesWaiters); CPPUNIT_TEST(testTransportProbeErrorExpiresWaiters); CPPUNIT_TEST(testTransportFindReleasesWaiters); CPPUNIT_TEST(testTransportColdLegacyGet); CPPUNIT_TEST(testTransportPlaintextCannotPoisonSessionCache); CPPUNIT_TEST(testTransportPlaintextCannotUpdateKeyedNode); CPPUNIT_TEST(testTransportPlaintextCannotCompleteEncryptedRequest); CPPUNIT_TEST(testTransportInitialReplayKeepsPeerState); CPPUNIT_TEST(testTransportInitialAddressChangeNeedsSession); CPPUNIT_TEST(testTransportEncryptionFailureDoesNotSendPlaintext); CPPUNIT_TEST(testRateLimitSeparatesSessionRequests); CPPUNIT_TEST(testRateLimitCryptoAdmission); CPPUNIT_TEST(testRateLimitCachedSessionCredentials); CPPUNIT_TEST(testRateLimitCryptoPerPrefix); CPPUNIT_TEST(testRateLimitReservesExpectedReplies); #endif CPPUNIT_TEST_SUITE_END(); public: void setUp(); void tearDown(); #ifdef _MSC_VER void testDisabledOnMsvc(); #else void testCompletesPartialSessionWithDataBeforeHeader(); void testBuffersLargeValueBeforeHeader(); void testIgnoresEmptyPartialData(); void testRejectsUnsolicitedPartialReply(); void testDropsMalformedCompletedPartialMessage(); void testCompletesPartialSessionFromSameSource(); void testSeparatesPartialSessionsBySource(); void testPlaintextListenRequiresToken(); void testListenConfirmationUpdatesSearchNodeToken(); void testListenReopensSocketAfterNodeExpiration(); void testUnauthorizedListenFlushClearsListenState(); void testGetRequestReuse(); void testFilteredProjectionDoesNotWaitForUnrelatedPeer(); void testFindNodeRequestReuse(); void testNodeTransportState(); void testTransportDisabledKeepsLegacyWire(); void testTransportEncryptsAfterKeyExchange(); void testTransportLegacyPeerStaysPlaintext(); void testTransportRejectsMismatchedNodeId(); void testTransportIgnoresForgedNodeListKey(); void testTransportPlaintextDoesNotMoveKeyedNode(); void testTransportPrivateNetwork(); void testTransportPrivateClientKeepsAuthorization(); void testTransportPrivateNetworkRejectsOutsiders(); void testTransportEpochRotation(); void testTransportPeerRestart(); void testTransportHelloIsUnauthenticated(); void testTransportSessionAuthorizesWrites(); void testTransportInitialWriteIsUnauthorized(); void testTransportUnvalidatedGetIsUnauthorized(); void testTransportEphemeralBoundToAddress(); void testTransportRestartedPeerReconnects(); void testTransportSpoofedInitialKeepsSession(); void testTransportSpoofedHelloKeepsSession(); void testTransportSpoofedInitialsDoNotFillSessionCache(); void testTransportSessionCacheEvictsLeastRecentlyUsed(); void testTransportRejectedSessionsKeepCache(); void testTransportInitialSenderConfirmsAfterSessionEnvelope(); void testTransportEncryptedFragmentsIgnorePlaintextParts(); void testTransportEncryptedFragmentsIgnorePlaintextHeader(); void testTransportEncryptedFragmentsRequireSenderKey(); void testValueFragmentsFitMinimumMtu(); void testTransportRetryRecoversSessionBeforePayload(); void testTransportRetryNeverResendsPayloadInInitial(); void testTransportRecoveryWithholdsAllRequests(); void testTransportColdRequestsShareProbe(); void testTransportDelayedReplyDoesNotResend(); void testTransportAuthenticatedReplyCanMoveNode(); void testTransportRecoveryRefreshesDeadline(); void testTransportSearchRoutesBeforeFetching(); void testTransportSearchProbeSlots(); void testTransportSearchHalfUnreachable(); void testTransportProbeFailureNotifiesWaiters(); void testTransportProbeErrorExpiresWaiters(); void testTransportFindReleasesWaiters(); void testTransportColdLegacyGet(); void testTransportPlaintextCannotPoisonSessionCache(); void testTransportPlaintextCannotUpdateKeyedNode(); void testTransportPlaintextCannotCompleteEncryptedRequest(); void testTransportInitialReplayKeepsPeerState(); void testTransportInitialAddressChangeNeedsSession(); void testTransportEncryptionFailureDoesNotSendPlaintext(); void testRateLimitSeparatesSessionRequests(); void testRateLimitCryptoAdmission(); void testRateLimitCachedSessionCredentials(); void testRateLimitCryptoPerPrefix(); void testRateLimitReservesExpectedReplies(); #endif }; } // namespace test