fix all test errors

Change-Id: I9f4eaef441f0e4a48cefe33d21d07e206b387457
diff --git a/src/challenge-modules/challenge-credential.cpp b/src/challenge-modules/challenge-credential.cpp
index cf429b5..50a15c0 100644
--- a/src/challenge-modules/challenge-credential.cpp
+++ b/src/challenge-modules/challenge-credential.cpp
@@ -82,18 +82,19 @@
   if (m_trustAnchors.empty()) {
     parseConfigFile();
   }
-  shared_ptr<security::v2::Certificate> credential;
+  security::v2::Certificate credential;
   const uint8_t* signature;
   size_t signatureLen;
   const auto& elements = params.elements();
   for (size_t i = 0; i < elements.size(); i++) {
     if (elements[i].type() == tlv_parameter_key) {
       if (readString(elements[i]) == PARAMETER_KEY_CREDENTIAL_CERT) {
-        std::istringstream ss(readString(elements[i + 1]));
-        credential = io::load<security::v2::Certificate>(ss);
-        if (credential == nullptr) {
-          _LOG_ERROR("Cannot load challenge parameter: credential");
-          return returnWithError(request, ErrorCode::INVALID_PARAMETER, "Cannot challenge credential: credential.");
+        try {
+          credential.wireDecode(elements[i + 1].blockFromValue());
+        }
+        catch (const std::exception& e) {
+          _LOG_ERROR("Cannot load challenge parameter: credential " << e.what());
+          return returnWithError(request, ErrorCode::INVALID_PARAMETER, "Cannot challenge credential: credential." + std::string(e.what()));
         }
       }
       else if (readString(elements[i]) == PARAMETER_KEY_PROOF_OF_PRIVATE_KEY) {
@@ -104,13 +105,13 @@
   }
 
   // verify the credential and the self-signed cert
-  Name signingKeyName = credential->getSignature().getKeyLocator().getName();
+  Name signingKeyName = credential.getSignature().getKeyLocator().getName();
   security::transform::PublicKey key;
-  const auto& pubKeyBuffer = credential->getPublicKey();
+  const auto& pubKeyBuffer = credential.getPublicKey();
   key.loadPkcs8(pubKeyBuffer.data(), pubKeyBuffer.size());
   for (auto anchor : m_trustAnchors) {
     if (anchor.getKeyName() == signingKeyName) {
-      if (security::verifySignature(*credential, anchor) &&
+      if (security::verifySignature(credential, anchor) &&
           security::verifySignature((uint8_t*)request.m_requestId.c_str(), request.m_requestId.size(), signature, signatureLen, key)) {
         return returnWithSuccess(request);
       }
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index b1e4d22..66a929b 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -194,17 +194,15 @@
     contentBlock.parse();
 
     // Test CA sent redirections
-    BOOST_CHECK_EQUAL(true, contentBlock.get(tlv_probe_redirect).hasValue());
-    Block probeRedirect = contentBlock.get(tlv_probe_redirect);
-    probeRedirect.parse();
-    // Test the case where we have multiple probeRedirects
-    BOOST_CHECK_EQUAL(probeRedirect.elements().size(), 2);
-    for (const auto& item : probeRedirect.elements()) {
-        Name caName;
-        caName.wireDecode(item.get(tlv::Name));
-        // TODO: Checkout the format of the name
-        BOOST_CHECK_EQUAL(caName, "/ndn/example");
+    std::vector<Name> redirectionItems;
+    for (auto item : contentBlock.elements()) {
+      if (item.type() == tlv_probe_redirect) {
+        redirectionItems.push_back(Name(item.blockFromValue()));
+      }
     }
+    BOOST_CHECK_EQUAL(redirectionItems.size(), 2);
+    BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirectionItems[0].getPrefix(-1)), "/ndn/site1");
+    BOOST_CHECK_EQUAL(security::v2::extractIdentityFromCertName(redirectionItems[1].getPrefix(-1)), "/ndn/site1");
   });
   face.receive(interest);
   advanceClocks(time::milliseconds(20), 60);
diff --git a/tests/unit-tests/challenge-credential.t.cpp b/tests/unit-tests/challenge-credential.t.cpp
index 0854155..65d3a3d 100644
--- a/tests/unit-tests/challenge-credential.t.cpp
+++ b/tests/unit-tests/challenge-credential.t.cpp
@@ -67,13 +67,14 @@
   SignatureInfo signatureInfo;
   signatureInfo.setValidityPeriod(security::ValidityPeriod(system_clock::now(), system_clock::now() + time::minutes(1)));
   m_keyChain.sign(credential, signingByCertificate(trustAnchor).setSignatureInfo(signatureInfo));
+  m_keyChain.addCertificate(keyB, credential);
 
   // using private key to sign cert request
-  std::vector<std::tuple<std::string, std::string>> params;
+  auto params = challenge.getRequestedParameterList(state.m_status, "");
   ChallengeCredential::fulfillParameters(params, m_keyChain, credential.getName(), "123");
-  Block paramsTlv = challenge.genChallengeRequestTLV(Status::BEFORE_CHALLENGE, "", std::move(params));
+  Block paramsTlv = challenge.genChallengeRequestTLV(state.m_status, "", std::move(params));
   challenge.handleChallengeRequest(paramsTlv, state);
-  BOOST_CHECK(state.m_status == Status::PENDING);
+  BOOST_CHECK_EQUAL(statusToString(state.m_status), statusToString(Status::PENDING));
 }
 
 BOOST_AUTO_TEST_SUITE_END()