diff --git a/tests/unit-tests/certificate-request.t.cpp b/tests/unit-tests/certificate-request.t.cpp
index 113748d..3282ee9 100644
--- a/tests/unit-tests/certificate-request.t.cpp
+++ b/tests/unit-tests/certificate-request.t.cpp
@@ -38,49 +38,43 @@
   CertificateRequest request1(Name("/ndn/site1"), "123", cert);
   BOOST_CHECK_EQUAL(request1.getCaName().toUri(), "/ndn/site1");
   BOOST_CHECK_EQUAL(request1.getRequestId(), "123");
-  BOOST_CHECK_EQUAL(request1.getStatus(), CertificateRequest::Pending);
-  BOOST_CHECK_EQUAL(request1.getChallengeType(), "");
-  BOOST_CHECK_EQUAL(request1.getChallengeStatus(), "");
-  BOOST_CHECK_EQUAL(request1.getChallengeDefinedField(), "");
-  BOOST_CHECK_EQUAL(request1.getChallengeInstruction(), "");
+  BOOST_CHECK_EQUAL(request1.getStatus(), "");
+  BOOST_CHECK_EQUAL(request1.getChallengeSecrets().empty(), true);
+  BOOST_CHECK_EQUAL(request1.getCert(), cert);
   BOOST_CHECK_EQUAL(request1.getCert(), cert);
 
-  CertificateRequest request2(Name("/ndn/site1"), "123", CertificateRequest::Verifying,
-                              "Email", "NEED_CODE", "123456", cert);
+  JsonSection json;
+  json.put("code", "1234");
+  std::stringstream ss;
+  boost::property_tree::write_json(ss, json);
+  std::string jsonValue = ss.str();
+
+  CertificateRequest request2(Name("/ndn/site1"), "123", "need-verify", "EMAIL", jsonValue, cert);
   BOOST_CHECK_EQUAL(request2.getCaName().toUri(), "/ndn/site1");
   BOOST_CHECK_EQUAL(request2.getRequestId(), "123");
-  BOOST_CHECK_EQUAL(request2.getStatus(), CertificateRequest::Verifying);
-  BOOST_CHECK_EQUAL(request2.getChallengeType(), "Email");
-  BOOST_CHECK_EQUAL(request2.getChallengeStatus(), "NEED_CODE");
-  BOOST_CHECK_EQUAL(request2.getChallengeDefinedField(), "123456");
-  BOOST_CHECK_EQUAL(request2.getChallengeInstruction(), "");
+  BOOST_CHECK_EQUAL(request2.getStatus(), "need-verify");
+  BOOST_CHECK_EQUAL(request2.getChallengeType(), "EMAIL");
+  BOOST_CHECK(request2.getChallengeSecrets() == json);
   BOOST_CHECK_EQUAL(request2.getCert(), cert);
 }
 
-BOOST_AUTO_TEST_CASE(GetStatusOutput)
-{
-  CertificateRequest::ApplicationStatus status = CertificateRequest::Success;
-  BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(status), "success");
-}
-
 BOOST_AUTO_TEST_CASE(GetterSetter)
 {
   auto identity = addIdentity(Name("/ndn/site1"));
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  CertificateRequest request(Name("/ndn/site1"), "123", cert);
-  request.setStatus(CertificateRequest::Verifying);
-  request.setChallengeType("Email");
-  request.setChallengeDefinedField("456");
-  request.setChallengeStatus("NEED_EMAIL");
-  request.setChallengeInstruction("Please provide your email address");
+  JsonSection json;
+  json.put("code", "1234");
 
-  BOOST_CHECK_EQUAL(request.getStatus(), CertificateRequest::Verifying);
-  BOOST_CHECK_EQUAL(request.getChallengeType(), "Email");
-  BOOST_CHECK_EQUAL(request.getChallengeDefinedField(), "456");
-  BOOST_CHECK_EQUAL(request.getChallengeStatus(), "NEED_EMAIL");
-  BOOST_CHECK_EQUAL(request.getChallengeInstruction(), "Please provide your email address");
+  CertificateRequest request(Name("/ndn/site1"), "123", cert);
+  request.setStatus("need-verify");
+  request.setChallengeType("EMAIL");
+  request.setChallengeSecrets(json);
+
+  BOOST_CHECK_EQUAL(request.getStatus(), "need-verify");
+  BOOST_CHECK_EQUAL(request.getChallengeType(), "EMAIL");
+  BOOST_CHECK(request.getChallengeSecrets() == json);
 }
 
 BOOST_AUTO_TEST_CASE(GetCertificateRequestOutput)
@@ -101,8 +95,6 @@
   /ndn/site1
 Request ID:
   123
-Request Status:
-  pending
 Certificate:
   Certificate name:
     /ndn/site1/KEY/ksk-1416425377094/0123/%FD%00%00%01I%C9%8B
diff --git a/tests/unit-tests/json-helper.t.cpp b/tests/unit-tests/json-helper.t.cpp
index d258e54..61a74e5 100644
--- a/tests/unit-tests/json-helper.t.cpp
+++ b/tests/unit-tests/json-helper.t.cpp
@@ -18,14 +18,14 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "identity-management-fixture.hpp"
+#include "boost-test.hpp"
 #include "json-helper.hpp"
 
 namespace ndn {
 namespace ndncert {
 namespace tests {
 
-BOOST_FIXTURE_TEST_SUITE(TestJsonHelper, IdentityManagementV2Fixture)
+BOOST_AUTO_TEST_SUITE(TestJsonHelper)
 
 BOOST_AUTO_TEST_CASE(GenerateProbeJson)
 {
@@ -37,45 +37,33 @@
 
 BOOST_AUTO_TEST_CASE(GenerateNewResponseJson)
 {
-  auto identity = addIdentity(Name("/ndn/site1"));
-  auto key = identity.getDefaultKey();
-  auto cert = key.getDefaultCertificate();
+  std::list<std::string> challenges;
+  challenges.push_back("PIN");
+  challenges.push_back("EMAIL");
+  auto result = genResponseNewJson("598234759", challenges);
 
-  CertificateRequest request(Name("/ndn/site1"), "598234759", cert);
-  std::list<std::tuple<std::string, std::string>> challenges;
-  challenges.push_back(std::make_tuple("PIN", "Please ask ca officer"));
-  challenges.push_back(std::make_tuple("EMAIL", "Please provide your email"));
-  auto result = genResponseNewJson(request, challenges);
-
-  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_STATUS), "pending");
   BOOST_CHECK_EQUAL(result.get<std::string>(JSON_REQUEST_ID), "598234759");
   auto child = result.get_child(JSON_CHALLENGES);
   auto it = child.begin();
   BOOST_CHECK_EQUAL(it->second.get<std::string>(JSON_CHALLENGE_TYPE), "PIN");
-  BOOST_CHECK_EQUAL(it->second.get<std::string>(JSON_CHALLENGE_INSTRUCTION),
-                    "Please ask ca officer");
   it++;
   BOOST_CHECK_EQUAL(it->second.get<std::string>(JSON_CHALLENGE_TYPE), "EMAIL");
-  BOOST_CHECK_EQUAL(it->second.get<std::string>(JSON_CHALLENGE_INSTRUCTION),
-                    "Please provide your email");
 }
 
-BOOST_AUTO_TEST_CASE(GeneratePollResponseJson)
+BOOST_AUTO_TEST_CASE(GenerateChallengeResponseJson)
 {
-  auto identity = addIdentity(Name("/ndn/site1"));
-  auto key = identity.getDefaultKey();
-  auto cert = key.getDefaultCertificate();
+  auto result = genResponseChallengeJson("598234759", "EMAIL", "need-code");
 
-  CertificateRequest request(Name("/ndn/site1"), "598234759", CertificateRequest::Verifying,
-                             "Email", "NEED_CODE", "111", cert);
-  request.setChallengeInstruction("Please provide verification code");
-  auto result = genResponsePollJson(request);
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_REQUEST_ID), "598234759");
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CHALLENGE_TYPE), "EMAIL");
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_STATUS), "need-code");
 
-  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_STATUS), "verifying");
-  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CHALLENGE_TYPE), "Email");
-  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CHALLENGE_STATUS), "NEED_CODE");
-  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CHALLENGE_INSTRUCTION),
-                    "Please provide verification code");
+  result = genResponseChallengeJson("598234759", "EMAIL", "need-code", Name("/ndn/test"));
+
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_REQUEST_ID), "598234759");
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CHALLENGE_TYPE), "EMAIL");
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_STATUS), "need-code");
+  BOOST_CHECK_EQUAL(result.get<std::string>(JSON_CERTIFICATE), "/ndn/test");
 }
 
 BOOST_AUTO_TEST_CASE(GenerateErrorJson)
