From 471d443e4a0752b879f5ae907224c1a731e035f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Thu, 27 May 2021 14:37:39 -0400 Subject: [PATCH] tests: add multithread test --- tests/dhtrunnertester.cpp | 37 +++++++++++++++++++++++++++++++++++++ tests/dhtrunnertester.h | 5 +++++ 2 files changed, 42 insertions(+) diff --git a/tests/dhtrunnertester.cpp b/tests/dhtrunnertester.cpp index 606aa7cd..b3dcbe00 100644 --- a/tests/dhtrunnertester.cpp +++ b/tests/dhtrunnertester.cpp @@ -19,6 +19,8 @@ #include "dhtrunnertester.h" +#include <opendht/thread_pool.h> + #include <chrono> #include <mutex> #include <condition_variable> @@ -298,4 +300,39 @@ DhtRunnerTester::testListenLotOfBytes() { node3.cancelListen(foo, ftokenfoo.get()); } + +void +DhtRunnerTester::testMultithread() { + std::mutex mutex; + std::condition_variable cv; + unsigned putCount(0); + unsigned putOkCount(0); + + constexpr unsigned N = 2048; + + for (unsigned i=0; i<N; i++) { + dht::ThreadPool::computation().run([&]{ + node2.put(dht::InfoHash::get("123" + std::to_string(i)), "hehe", [&](bool ok) { + std::lock_guard<std::mutex> lock(mutex); + putCount++; + if (ok) putOkCount++; + cv.notify_all(); + }); + node2.get(dht::InfoHash::get("123" + std::to_string(N-i-1)), [](const std::shared_ptr<dht::Value>&){ + return true; + }, [&](bool ok) { + std::lock_guard<std::mutex> lock(mutex); + putCount++; + if (ok) putOkCount++; + cv.notify_all(); + }); + }); + } + std::unique_lock<std::mutex> lk(mutex); + CPPUNIT_ASSERT(cv.wait_for(lk, 30s, [&]{ return putCount == 2*N; })); + CPPUNIT_ASSERT_EQUAL(2*N, putOkCount); + +} + + } // namespace test diff --git a/tests/dhtrunnertester.h b/tests/dhtrunnertester.h index 765f1cb6..adee2b28 100644 --- a/tests/dhtrunnertester.h +++ b/tests/dhtrunnertester.h @@ -67,6 +67,11 @@ class DhtRunnerTester : public CppUnit::TestFixture { * Test listen method with lot of datas */ void testListenLotOfBytes(); + /** + * Test multithread + */ + void testMultithread(); + }; } // namespace test -- GitLab