diff --git a/tests/certstore.cpp b/tests/certstore.cpp
index 7d6b75f..43967c6 100644
--- a/tests/certstore.cpp
+++ b/tests/certstore.cpp
@@ -25,7 +25,7 @@
 #include "test_runner.h"
 #include "certstore.h"
 
-namespace jami {
+namespace dhtnet {
 namespace test {
 
 class CertStoreTest : public CppUnit::TestFixture
@@ -85,26 +85,26 @@
 
     // Test certificate status
     auto certAllowed = aliceAccount->accountManager()->getCertificatesByStatus(
-        jami::tls::TrustStore::PermissionStatus::ALLOWED);
+        dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     CPPUNIT_ASSERT(
         std::find_if(certAllowed.begin(), certAllowed.end(), [&](auto v) { return v == id; })
         == certAllowed.end());
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(id)
-                   == jami::tls::TrustStore::PermissionStatus::UNDEFINED);
-    aliceAccount->setCertificateStatus(ca.second, jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::UNDEFINED);
+    aliceAccount->setCertificateStatus(ca.second, dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     certAllowed = aliceAccount->accountManager()->getCertificatesByStatus(
-        jami::tls::TrustStore::PermissionStatus::ALLOWED);
+        dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     CPPUNIT_ASSERT(
         std::find_if(certAllowed.begin(), certAllowed.end(), [&](auto v) { return v == id; })
         != certAllowed.end());
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(id)
-                   == jami::tls::TrustStore::PermissionStatus::ALLOWED);
-    aliceAccount->setCertificateStatus(ca.second, jami::tls::TrustStore::PermissionStatus::UNDEFINED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
+    aliceAccount->setCertificateStatus(ca.second, dhtnet::tls::TrustStore::PermissionStatus::UNDEFINED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(id)
-                   == jami::tls::TrustStore::PermissionStatus::UNDEFINED);
-    aliceAccount->setCertificateStatus(ca.second, jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::UNDEFINED);
+    aliceAccount->setCertificateStatus(ca.second, dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(id)
-                   == jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
 
     // Test getPinnedCertificates
     pinned = aliceAccount->certStore().getPinnedCertificates();
@@ -126,44 +126,44 @@
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*device.second));
 
     // Ban device
-    aliceAccount->setCertificateStatus(device.second, jami::tls::TrustStore::PermissionStatus::BANNED);
+    aliceAccount->setCertificateStatus(device.second, dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(device.second->getId().toString())
-                   == jami::tls::TrustStore::PermissionStatus::BANNED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(id)
-                   == jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
 
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*ca.second));
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*account.second));
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*device.second));
 
     // Ban account
-    aliceAccount->setCertificateStatus(account.second, jami::tls::TrustStore::PermissionStatus::BANNED);
+    aliceAccount->setCertificateStatus(account.second, dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(account.second->getId().toString())
-                   == jami::tls::TrustStore::PermissionStatus::BANNED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*ca.second));
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*account.second));
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*device2.second));
 
     // Unban account
     aliceAccount->setCertificateStatus(account.second,
-                                    jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                                    dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(account.second->getId().toString())
-                   == jami::tls::TrustStore::PermissionStatus::ALLOWED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::ALLOWED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*ca.second));
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*account.second));
     CPPUNIT_ASSERT(aliceAccount->accountManager()->isAllowed(*device2.second));
 
     // Ban CA
-    aliceAccount->setCertificateStatus(ca.second, jami::tls::TrustStore::PermissionStatus::BANNED);
+    aliceAccount->setCertificateStatus(ca.second, dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(ca.second->getId().toString())
-                   == jami::tls::TrustStore::PermissionStatus::BANNED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*ca.second));
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*account.second));
     CPPUNIT_ASSERT(not aliceAccount->accountManager()->isAllowed(*device2.second));
 
-    aliceAccount->setCertificateStatus(ca.second, jami::tls::TrustStore::PermissionStatus::BANNED);
+    aliceAccount->setCertificateStatus(ca.second, dhtnet::tls::TrustStore::PermissionStatus::BANNED);
     CPPUNIT_ASSERT(aliceAccount->accountManager()->getCertificateStatus(ca.second->getId().toString())
-                   == jami::tls::TrustStore::PermissionStatus::BANNED);
+                   == dhtnet::tls::TrustStore::PermissionStatus::BANNED);
 
     // Test unpin
     aliceAccount->certStore().unpinCertificate(id);
@@ -172,11 +172,11 @@
                    == pinned.end());
 
     // Test statusToStr
-    CPPUNIT_ASSERT(strcmp(jami::tls::statusToStr(jami::tls::TrustStatus::TRUSTED),
-                          libjami::Certificate::TrustStatus::TRUSTED)
+    CPPUNIT_ASSERT(strcmp(dhtnet::tls::statusToStr(dhtnet::tls::TrustStatus::TRUSTED),
+                          libdhtnet::Certificate::TrustStatus::TRUSTED)
                    == 0);
-    CPPUNIT_ASSERT(strcmp(jami::tls::statusToStr(jami::tls::TrustStatus::UNTRUSTED),
-                          libjami::Certificate::TrustStatus::UNTRUSTED)
+    CPPUNIT_ASSERT(strcmp(dhtnet::tls::statusToStr(dhtnet::tls::TrustStatus::UNTRUSTED),
+                          libdhtnet::Certificate::TrustStatus::UNTRUSTED)
                    == 0);*/
 }
 
@@ -206,4 +206,4 @@
 } // namespace test
 } // namespace jami
 
-JAMI_TEST_RUNNER(jami::test::CertStoreTest::name());
+JAMI_TEST_RUNNER(dhtnet::test::CertStoreTest::name());
