diff --git a/tests/test_networkengine.cpp b/tests/test_networkengine.cpp index ff5be6a0..301a83cb 100644 --- a/tests/test_networkengine.cpp +++ b/tests/test_networkengine.cpp @@ -1634,6 +1634,33 @@ NetworkEngineTester::testTransportEphemeralBoundToAddress() CPPUNIT_ASSERT_EQUAL((size_t) 1, b.socket->sends.size()); } +void +NetworkEngineTester::testTransportRestartedPeerReconnects() +{ + TransportConfig configA; + configA.key = transport::KeyPair::generate(); + auto a = std::make_unique("127.0.0.2", configA, 1); + TransportTestNode b("127.0.0.3", {}, 2); + bool done = false; + a->ping(b.addr, done); + a->deliverTo(b); + b.deliverTo(*a); + for (int i = 0; i < 2; i++) { + a->ping(a->node(b), done); + a->deliverTo(b); + b.deliverTo(*a); + } + + // a restarts with the same key, and contacts b by address: b must forget a's ephemeral key + a = std::make_unique("127.0.0.2", configA, 3); + done = false; + a->ping(b.addr, done); + a->deliverTo(b); + CPPUNIT_ASSERT(isEnvelope(b.socket->sends.at(0), transport::EnvelopeType::Initial)); + b.deliverTo(*a); + CPPUNIT_ASSERT(done); +} + } // namespace test #endif \ No newline at end of file diff --git a/tests/test_networkengine.h b/tests/test_networkengine.h index 84d443ae..dd43df14 100644 --- a/tests/test_networkengine.h +++ b/tests/test_networkengine.h @@ -41,6 +41,7 @@ class NetworkEngineTester : public CppUnit::TestFixture CPPUNIT_TEST(testTransportSessionAuthorizesWrites); CPPUNIT_TEST(testTransportInitialWriteIsUnauthorized); CPPUNIT_TEST(testTransportEphemeralBoundToAddress); + CPPUNIT_TEST(testTransportRestartedPeerReconnects); #endif CPPUNIT_TEST_SUITE_END(); @@ -79,6 +80,7 @@ public: void testTransportSessionAuthorizesWrites(); void testTransportInitialWriteIsUnauthorized(); void testTransportEphemeralBoundToAddress(); + void testTransportRestartedPeerReconnects(); #endif };