diff --git a/tests/dhtproxytester.cpp b/tests/dhtproxytester.cpp index f8c06a2bdbfab65703f6d6ecef15aa43ed96c7c7..4be467949cb0538ec9b12b113baa546f08c9de22 100644 --- a/tests/dhtproxytester.cpp +++ b/tests/dhtproxytester.cpp @@ -60,9 +60,19 @@ void DhtProxyTester::tearDown() { nodePeer.join(); nodeClient.join(); - nodeProxy->shutdown(); + + bool done = false; + std::condition_variable cv; + std::mutex cv_m; + nodeProxy->shutdown([&]{ + std::lock_guard<std::mutex> lk(cv_m); + done = true; + cv.notify_all(); + }); + std::unique_lock<std::mutex> lk(cv_m); + CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&]{ return done; })); serverProxy.reset(); - nodeProxy->join(); + nodeProxy.reset(); } void @@ -77,12 +87,12 @@ DhtProxyTester::testGetPut() { dht::Value val {"Hey! It's been a long time. How have you been?"}; auto val_data = val.data; { - std::unique_lock<std::mutex> lk(cv_m); nodePeer.put(key, std::move(val), [&](bool) { std::lock_guard<std::mutex> lk(cv_m); done = true; cv.notify_all(); }); + std::unique_lock<std::mutex> lk(cv_m); CPPUNIT_ASSERT(cv.wait_for(lk, 10s, [&]{ return done; })); } diff --git a/tests/dhtrunnertester.cpp b/tests/dhtrunnertester.cpp index 87c43838abfd4b9d06785efd9bb76db942eeab0c..c84ee7fddcac8de18a140ef81bc6bfcae857a7e8 100644 --- a/tests/dhtrunnertester.cpp +++ b/tests/dhtrunnertester.cpp @@ -22,19 +22,32 @@ #include <chrono> #include <mutex> #include <condition_variable> +using namespace std::chrono_literals; namespace test { CPPUNIT_TEST_SUITE_REGISTRATION(DhtRunnerTester); void DhtRunnerTester::setUp() { - node1.run(42222, {}, true); - node2.run(42232, {}, true); + node1.run(42222); + node2.run(42232); node2.bootstrap(node1.getBound()); } void DhtRunnerTester::tearDown() { + unsigned done {0}; + std::condition_variable cv; + std::mutex cv_m; + auto shutdown = [&]{ + std::lock_guard<std::mutex> lk(cv_m); + done++; + cv.notify_all(); + }; + node1.shutdown(shutdown); + node2.shutdown(shutdown); + std::unique_lock<std::mutex> lk(cv_m); + CPPUNIT_ASSERT(cv.wait_for(lk, 5s, [&]{ return done == 2; })); node1.join(); node2.join(); } @@ -90,27 +103,22 @@ DhtRunnerTester::testListen() { for (unsigned i=0; i<N; i++) { node2.put(a, dht::Value("v1"), [&](bool ok) { - { - std::lock_guard<std::mutex> lock(mutex); - putCount++; - if (ok) putOkCount++; - } + std::lock_guard<std::mutex> lock(mutex); + putCount++; + if (ok) putOkCount++; cv.notify_all(); }); node2.put(b, dht::Value("v2"), [&](bool ok) { - { - std::lock_guard<std::mutex> lock(mutex); - putCount++; - if (ok) putOkCount++; - } + std::lock_guard<std::mutex> lock(mutex); + putCount++; + if (ok) putOkCount++; cv.notify_all(); }); } { std::unique_lock<std::mutex> lk(mutex); - cv.wait_for(lk, std::chrono::seconds(30), [&]{ return putCount == N * 2u; }); - CPPUNIT_ASSERT_EQUAL(N * 2u, putCount); + CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return putCount == N * 2u; })); CPPUNIT_ASSERT_EQUAL(N * 2u, putOkCount); }