Changing logic in GroupManger.getGroupKey() to avoid regenerate group key pairs every time.

Change-Id: I4c6eb5246bce04289d7ba097a66d0f11745ce44c
Refs: #3812
diff --git a/tests/unit-tests/group-manager.t.cpp b/tests/unit-tests/group-manager.t.cpp
index 30bfd6c..dc64eda 100644
--- a/tests/unit-tests/group-manager.t.cpp
+++ b/tests/unit-tests/group-manager.t.cpp
@@ -358,6 +358,58 @@
   BOOST_CHECK_EQUAL(manager.getGroupKey(tp3).size(), 0);
 }
 
+BOOST_AUTO_TEST_CASE(GetGroupKeyWithoutRegeneration)
+{
+  // create the group manager database
+  std::string dbDir = tmpPath.c_str();
+  dbDir += "/manager-group-key-test.db";
+
+  // create group manager
+  GroupManager manager(Name("Alice"), Name("data_type"), dbDir, 1024, 1);
+  setManager(manager);
+
+  // get data list from group manager
+  TimeStamp tp1(from_iso_string("20150825T093000"));
+  std::list<Data> result1 = manager.getGroupKey(tp1);
+
+  BOOST_CHECK_EQUAL(result1.size(), 4);
+
+  // first data contain the group encrypt key(public key)
+  std::list<Data>::iterator dataIterator1 = result1.begin();
+  BOOST_CHECK_EQUAL(dataIterator1->getName().toUri(),
+                    "/Alice/READ/data_type/E-KEY/20150825T090000/20150825T100000");
+  EncryptKey<algo::Rsa> groupEKey1(Buffer(dataIterator1->getContent().value(),
+                                         dataIterator1->getContent().value_size()));
+
+  // second data
+  dataIterator1++;
+  BOOST_CHECK_EQUAL(dataIterator1->getName().toUri(),
+                    "/Alice/READ/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberA/ksk-123");
+
+  // add new members to the database
+  Block dataBlock = cert.wireEncode();
+  Data memberD(dataBlock);
+  memberD.setName(Name("/ndn/memberD/KEY/ksk-123/ID-CERT/123"));
+  manager.addMember("schedule1", memberD);
+
+  std::list<Data> result2 = manager.getGroupKey(tp1, false);
+  BOOST_CHECK_EQUAL(result2.size(), 5);
+
+  // check the new EKey is the same with the previous one
+  std::list<Data>::iterator dataIterator2 = result2.begin();
+  BOOST_CHECK_EQUAL(dataIterator2->getName().toUri(),
+                    "/Alice/READ/data_type/E-KEY/20150825T090000/20150825T100000");
+  EncryptKey<algo::Rsa> groupEKey2(Buffer(dataIterator2->getContent().value(),
+                                         dataIterator2->getContent().value_size()));
+  BOOST_CHECK_EQUAL_COLLECTIONS(groupEKey1.getKeyBits().begin(), groupEKey1.getKeyBits().end(),
+                                groupEKey2.getKeyBits().begin(), groupEKey2.getKeyBits().end());
+
+  // second data
+  dataIterator2++;
+  BOOST_CHECK_EQUAL(dataIterator2->getName().toUri(),
+                    "/Alice/READ/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberA/ksk-123");
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace test