diff --git a/tests/unit/daemon/rrset-factory.cpp b/tests/unit/daemon/rrset-factory.cpp
index 39476ec..5e71a47 100644
--- a/tests/unit/daemon/rrset-factory.cpp
+++ b/tests/unit/daemon/rrset-factory.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
@@ -23,7 +23,7 @@
 #include "mgmt/management-tool.hpp"
 
 #include <boost/lexical_cast.hpp>
-#include <ndn-cxx/security/validator.hpp>
+#include <ndn-cxx/security/verification-helpers.hpp>
 
 namespace ndn {
 namespace ndns {
@@ -46,9 +46,12 @@
     zone1.setTtl(time::seconds(4600));
     BOOST_CHECK_NO_THROW(m_session.insert(zone1));
 
-    this->addIdentity(TEST_IDENTITY_NAME);
-    m_certName = m_keyChain.getDefaultCertificateNameForIdentity(TEST_IDENTITY_NAME);
-    ndn::io::save(*(m_keyChain.getCertificate(m_certName)), TEST_CERT.string());
+    Name identityName = Name(TEST_IDENTITY_NAME).append("NDNS");
+
+    m_identity = this->addIdentity(identityName);
+    m_cert = m_identity.getDefaultKey().getDefaultCertificate();
+    m_certName = m_cert.getName();
+    saveIdentityCertificate(m_identity, TEST_CERT.string());
 
     NDNS_LOG_INFO("save test root cert " << m_certName << " to: " << TEST_CERT.string());
     BOOST_CHECK_GT(m_certName.size(), 0);
@@ -70,6 +73,8 @@
   ndns::DbMgr m_session;
   Name m_zoneName;
   Name m_certName;
+  Identity m_identity;
+  Certificate m_cert;
 };
 
 BOOST_FIXTURE_TEST_SUITE(RrsetFactoryTest,  RrsetFactoryFixture)
@@ -82,7 +87,7 @@
 
   // cert throws check: !matchCertificate
   RrsetFactory rf2(TEST_DATABASE2, m_zoneName, m_keyChain, "wrongCert");
-  BOOST_CHECK_THROW(rf2.checkZoneKey(), ndns::RrsetFactory::Error);
+  BOOST_CHECK_THROW(rf2.checkZoneKey(), std::runtime_error);
 
   RrsetFactory rf3(TEST_DATABASE2, m_zoneName, m_keyChain, m_certName);
   BOOST_CHECK_NO_THROW(rf3.checkZoneKey());
@@ -100,14 +105,14 @@
   RrsetFactory rf(TEST_DATABASE2, m_zoneName, m_keyChain, m_certName);
 
   // rf without checkZoneKey: throw.
-  ndn::Link::DelegationSet delegations;
+  ndn::DelegationList delegations;
   BOOST_CHECK_THROW(rf.generateNsRrset(label, type, version, ttl, delegations),
                     ndns::RrsetFactory::Error);
   rf.checkZoneKey();
 
   for (int i = 1; i <= 4; i++) {
     Name name("/delegation/" + std::to_string(i));
-    delegations.insert(std::pair<uint32_t, Name>(i, name));
+    delegations.insert(i, name);
   }
 
   Rrset rrset = rf.generateNsRrset(label, type, version, ttl, delegations);
@@ -126,10 +131,10 @@
 
   BOOST_CHECK_EQUAL(link.getName(), linkName);
   BOOST_CHECK_EQUAL(link.getContentType(), NDNS_LINK);
-  BOOST_CHECK(link.getDelegations() == delegations);
+  BOOST_CHECK(link.getDelegationList() == delegations);
 
-  shared_ptr<IdentityCertificate> cert = m_keyChain.getCertificate(m_certName);
-  BOOST_CHECK_EQUAL(Validator::verifySignature(link, cert->getPublicKeyInfo()), true);
+  // BOOST_CHECK_EQUAL(Validator::verifySignature(link, m_cert.getPublicKeyInfo()), true);
+  security::verifySignature(link, m_cert);
 }
 
 BOOST_AUTO_TEST_CASE(GenerateTxtRrset)
@@ -177,8 +182,9 @@
 
   BOOST_CHECK(txts == RrsetFactory::wireDecodeTxt(data.getContent()));
 
-  shared_ptr<IdentityCertificate> cert = m_keyChain.getCertificate(m_certName);
-  BOOST_CHECK(Validator::verifySignature(data, cert->getPublicKeyInfo()));
+  // shared_ptr<IdentityCertificate> cert = m_keyChain.getCertificate(m_certName);
+  // BOOST_CHECK(Validator::verifySignature(data, cert->getPublicKeyInfo()));
+  security::verifySignature(data, m_cert);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
