From 3236a6af07b25b9d82b7bc9aa077aa75ad10cb6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= Date: Fri, 10 Dec 2021 09:53:21 -0500 Subject: [PATCH] account_archive: add test for import/export on DHT Change-Id: I547dfeaf1734873ac9f8db82a181769de11a2bb6 --- .../account_archive/account_archive.cpp | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/test/unitTest/account_archive/account_archive.cpp b/test/unitTest/account_archive/account_archive.cpp index fecb5f276..b74e1ea79 100644 --- a/test/unitTest/account_archive/account_archive.cpp +++ b/test/unitTest/account_archive/account_archive.cpp @@ -64,18 +64,23 @@ public: std::string aliceId; std::string bobId; + std::string bob2Id; private: void testExportImportNoPassword(); void testExportImportNoPasswordDoubleGunzip(); void testExportImportPassword(); void testExportImportPasswordDoubleGunzip(); + void testExportDht(); + void testExportDhtWrongPassword(); CPPUNIT_TEST_SUITE(AccountArchiveTest); CPPUNIT_TEST(testExportImportNoPassword); CPPUNIT_TEST(testExportImportNoPasswordDoubleGunzip); CPPUNIT_TEST(testExportImportPassword); CPPUNIT_TEST(testExportImportPasswordDoubleGunzip); + CPPUNIT_TEST(testExportDht); + CPPUNIT_TEST(testExportDhtWrongPassword); CPPUNIT_TEST_SUITE_END(); }; @@ -92,7 +97,10 @@ AccountArchiveTest::setUp() void AccountArchiveTest::tearDown() { - wait_for_removal_of({aliceId, bobId}); + if (!bob2Id.empty()) + wait_for_removal_of({aliceId, bob2Id, bobId}); + else + wait_for_removal_of({aliceId, bobId}); } void @@ -173,6 +181,55 @@ AccountArchiveTest::testExportImportPasswordDoubleGunzip() wait_for_removal_of(accountId); } +void +AccountArchiveTest::testExportDht() +{ + std::mutex mtx; + std::unique_lock lk {mtx}; + std::condition_variable cv; + std::map> confHandlers; + std::string pin; + confHandlers.insert(DRing::exportable_callback( + [&](const std::string& accountId, int status, const std::string& p) { + if (accountId == bobId && status == 0) + pin = p; + cv.notify_one(); + })); + DRing::registerSignalHandlers(confHandlers); + CPPUNIT_ASSERT(DRing::exportOnRing(bobId, "test")); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&] { return !pin.empty(); })); + + auto bobAccount = Manager::instance().getAccount(bobId); + + std::map details = DRing::getAccountTemplate("RING"); + details[ConfProperties::ARCHIVE_PIN] = pin; + details[ConfProperties::ARCHIVE_PASSWORD] = "test"; + + bob2Id = jami::Manager::instance().addAccount(details); + wait_for_announcement_of(bob2Id); + auto bob2Account = Manager::instance().getAccount(bob2Id); + CPPUNIT_ASSERT(bob2Account->getUsername() == bobAccount->getUsername()); +} + +void +AccountArchiveTest::testExportDhtWrongPassword() +{ + std::mutex mtx; + std::unique_lock lk {mtx}; + std::condition_variable cv; + std::map> confHandlers; + int status; + confHandlers.insert(DRing::exportable_callback( + [&](const std::string& accountId, int s, const std::string&) { + if (accountId == bobId) + status = s; + cv.notify_one(); + })); + DRing::registerSignalHandlers(confHandlers); + CPPUNIT_ASSERT(DRing::exportOnRing(bobId, "wrong")); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&] { return status == 1; })); +} + } // namespace test } // namespace jami