diff --git a/test/unitTest/Makefile.am b/test/unitTest/Makefile.am
index 59851162c15c1b15aabdc8feda62a5d9ecb185b2..2a956563e0e244998d831dd7bb4e50f695d8c4d4 100644
--- a/test/unitTest/Makefile.am
+++ b/test/unitTest/Makefile.am
@@ -7,6 +7,12 @@ check_PROGRAMS =
 
 ####### Unit Test ########
 
+#
+# account_factory
+#
+check_PROGRAMS += ut_account_factory
+ut_account_factory_SOURCES = account_factory/testAccount_factory.cpp
+
 #
 # base64
 #
diff --git a/test/unitTest/account_factory/testAccount_factory.cpp b/test/unitTest/account_factory/testAccount_factory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b17d265e3d6c5f1d2e54b647f454da92069466ce
--- /dev/null
+++ b/test/unitTest/account_factory/testAccount_factory.cpp
@@ -0,0 +1,139 @@
+/*
+ *  Copyright (C) 2017 Savoir-Faire Linux Inc.
+ *  Author: Olivier Gregoire <olivier.gregoire@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "account_factory.h"
+#include "../../test_runner.h"
+#include "dring.h"
+
+namespace ring { namespace test {
+
+class Account_factoryTest : public CppUnit::TestFixture {
+public:
+    static std::string name() { return "account_factory"; }
+    void setUp();
+    void tearDown();
+
+private:
+    void testAddRemoveSIPAccount();
+    void testAddRemoveRINGAccount();
+    void testClear();
+
+    CPPUNIT_TEST_SUITE(Account_factoryTest);
+    CPPUNIT_TEST(testAddRemoveSIPAccount);
+    CPPUNIT_TEST(testAddRemoveRINGAccount);
+    CPPUNIT_TEST(testClear);
+    CPPUNIT_TEST_SUITE_END();
+
+    const std::string SIP_type="SIP";
+    const std::string SIP_ID="SIP_ID";
+
+    const std::string RING_type="RING";
+    const std::string RING_ID="RING_ID";
+    std::unique_ptr<AccountFactory> accountFactory;
+};
+
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Account_factoryTest, Account_factoryTest::name());
+
+void
+Account_factoryTest::setUp()
+{
+    // Init daemon
+    DRing::init(DRing::InitFlag(DRing::DRING_FLAG_DEBUG | DRing::DRING_FLAG_CONSOLE_LOG));
+    CPPUNIT_ASSERT(DRing::start("dring-sample.yml"));
+
+    accountFactory.reset(new AccountFactory);
+}
+
+void
+Account_factoryTest::tearDown()
+{
+    // Stop daemon
+    DRing::fini();
+}
+
+
+void
+Account_factoryTest::testAddRemoveSIPAccount()
+{
+    // verify if there is no account at the begining
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+
+    accountFactory->createAccount(SIP_type.c_str(), SIP_ID);
+
+    CPPUNIT_ASSERT(accountFactory->hasAccount(SIP_ID));
+    CPPUNIT_ASSERT(!accountFactory->hasAccount(RING_ID));
+    CPPUNIT_ASSERT(!accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==1);
+
+    accountFactory->removeAccount(SIP_ID);
+
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+}
+
+void
+Account_factoryTest::testAddRemoveRINGAccount()
+{
+    // verify if there is no account at the begining
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+
+    accountFactory->createAccount(RING_type.c_str(), RING_ID);
+
+    CPPUNIT_ASSERT(accountFactory->hasAccount(RING_ID));
+    CPPUNIT_ASSERT(!accountFactory->hasAccount(SIP_ID));
+    CPPUNIT_ASSERT(!accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==1);
+
+    accountFactory->removeAccount(RING_ID);
+
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+}
+
+void
+Account_factoryTest::testClear()
+{
+    // verify if there is no account at the begining
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+
+    const int nbrAccount = 5;
+
+    for(int i = 0; i < nbrAccount ; ++i) {
+        accountFactory->createAccount(RING_type.c_str(), RING_ID+std::to_string(i));
+    }
+
+    CPPUNIT_ASSERT(accountFactory->accountCount()==nbrAccount);
+    CPPUNIT_ASSERT(!accountFactory->empty());
+
+    accountFactory->clear();
+
+    CPPUNIT_ASSERT(accountFactory->empty());
+    CPPUNIT_ASSERT(accountFactory->accountCount()==0);
+}
+
+}} // namespace ring::test
+
+RING_TEST_RUNNER(ring::test::Account_factoryTest::name())