consumer: give correct info to the application on hello

tests: add boost check on hello data

refs: #4703, #4693

Change-Id: I583584eb5a4b72fb1f7797bd8960109857c54162
diff --git a/src/consumer.cpp b/src/consumer.cpp
index 301828b..f27f355 100644
--- a/src/consumer.cpp
+++ b/src/consumer.cpp
@@ -95,25 +95,21 @@
   std::vector<MissingDataInfo> updates;
   std::vector<ndn::Name> availableSubscriptions;
 
+  NDN_LOG_DEBUG("Hello Data:  " << state);
+
   for (const auto& content : state.getContent()) {
     ndn::Name prefix = content.getPrefix(-1);
     uint64_t seq = content.get(content.size()-1).toNumber();
-    if (m_prefixes.find(prefix) == m_prefixes.end()) {
-      // In case this the first prefix ever received via hello data,
-      // add it to the available subscriptions
-      availableSubscriptions.push_back(prefix);
-    }
-    else if (seq > m_prefixes[prefix]) {
-      // Else this is not the first time we have seen this prefix,
-      // we must let application know that there is missing data
-      // (scenario: application nack triggers another hello interest)
+    // If consumer is subscribed then prefix must already be present in
+    // m_prefixes (see addSubscription). So [] operator is safe to use.
+    if (isSubscribed(prefix) && seq > m_prefixes[prefix]) {
+      // In case we are behind on this prefix and consumer is subscribed to it
       updates.push_back(MissingDataInfo{prefix, m_prefixes[prefix] + 1, seq});
       m_prefixes[prefix] = seq;
     }
+    availableSubscriptions.push_back(prefix);
   }
 
-  NDN_LOG_DEBUG("Hello Data:  " << state);
-
   m_onReceiveHelloData(availableSubscriptions);
 
   if (!updates.empty()) {
diff --git a/tests/test-partial-sync.cpp b/tests/test-partial-sync.cpp
index 99fe0c1..8061194 100644
--- a/tests/test-partial-sync.cpp
+++ b/tests/test-partial-sync.cpp
@@ -57,7 +57,7 @@
                       [&, id] (const vector<Name>& availableSubs)
                       {
                         numHelloDataRcvd++;
-                        checkSubList(availableSubs);
+                        BOOST_CHECK(checkSubList(availableSubs));
 
                         checkIBFUpdated(id);
 
@@ -94,10 +94,8 @@
   checkSubList(const vector<Name>& availableSubs)
   {
     for (const auto& prefix : producer->m_prefixes ) {
-      for (const auto& sub : availableSubs) {
-        if (prefix.first != sub) {
-          return false;
-        }
+      if (std::find(availableSubs.begin(), availableSubs.end(), prefix.first) == availableSubs.end()) {
+        return false;
       }
     }
     return true;