encryptor: Properly handle KEK fetching notification

Change-Id: Id65b58d4a24cd79015fa5a6ab38994bb873af31f
Refs: #4669
diff --git a/src/encryptor.cpp b/src/encryptor.cpp
index 0472e1e..eb6c486 100644
--- a/src/encryptor.cpp
+++ b/src/encryptor.cpp
@@ -153,7 +153,9 @@
                              m_kekPendingInterest = nullptr;
                              // @todo verify if the key is legit
                              m_kek = kek;
-                             makeAndPublishCkData(onFailure);
+                             if (makeAndPublishCkData(onFailure)) {
+                               onReady();
+                             }
                              // otherwise, failure has been already declared
                            },
                            [=] (const Interest& i, const lp::Nack& nack) {
@@ -189,7 +191,7 @@
                            });
 }
 
-void
+bool
 Encryptor::makeAndPublishCkData(const ErrorCallback& onFailure)
 {
   try {
@@ -207,9 +209,11 @@
     m_ims.insert(*ckData);
 
     NDN_LOG_DEBUG("Publishing CK data: " << ckData->getName());
+    return true;
   }
   catch (const std::runtime_error& error) {
     onFailure(ErrorCode::EncryptionFailure, "Failed to encrypt generated CK with KEK " + m_kek->getName().toUri());
+    return false;
   }
 }
 
diff --git a/src/encryptor.hpp b/src/encryptor.hpp
index 34d69bb..2b82d31 100644
--- a/src/encryptor.hpp
+++ b/src/encryptor.hpp
@@ -124,10 +124,10 @@
                            const ErrorCallback& onFailure,
                            size_t nTriesLeft);
 
-  void
+  bool
   makeAndPublishCkData(const ErrorCallback& onFailure);
 
-private:
+PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   Name m_accessPrefix;
   Name m_ckPrefix;
   Name m_ckName;
diff --git a/tests/tests/encryptor.t.cpp b/tests/tests/encryptor.t.cpp
index 57e8b21..5b8aae8 100644
--- a/tests/tests/encryptor.t.cpp
+++ b/tests/tests/encryptor.t.cpp
@@ -98,6 +98,11 @@
 
 BOOST_AUTO_TEST_CASE(EncryptAndPublishedCk)
 {
+  encryptor.m_kek.reset();
+  BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, false);
+  encryptor.regenerateCk();
+  BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, true);
+
   std::string plaintext = "Data to encrypt";
   auto block = encryptor.encrypt(reinterpret_cast<const uint8_t*>(plaintext.data()), plaintext.size());
 
@@ -133,6 +138,8 @@
 
   auto extractedKek = ckName.getSubName(6);
   BOOST_CHECK_EQUAL(extractedKek, kek.getName());
+
+  BOOST_CHECK_EQUAL(encryptor.m_isKekRetrievalInProgress, false);
 }
 
 BOOST_FIXTURE_TEST_CASE(KekRetrievalFailure, EncryptorFixture<false>)
diff --git a/wscript b/wscript
index 6ee6d57..2010b7f 100644
--- a/wscript
+++ b/wscript
@@ -29,8 +29,11 @@
                    uselib_store='NDN_CXX', mandatory=True)
 
     USED_BOOST_LIBS = ['system', 'thread', 'log', 'log_setup']
+
     if conf.env['WITH_TESTS']:
         USED_BOOST_LIBS += ['unit_test_framework']
+        conf.define('NDN_NAC_HAVE_TESTS', 1)
+
     conf.check_boost(lib=USED_BOOST_LIBS, mandatory=True, mt=True)
 
     conf.check_compiler_flags()