security: Change the ownership model of Pib and its related entities
Change-Id: I6816a0fd5c7af490f7e98db196e0214219f4b05c
Refs: #3349
diff --git a/tests/unit-tests/security/pib/key-container.t.cpp b/tests/unit-tests/security/pib/key-container.t.cpp
index 812fab4..5b7961e 100644
--- a/tests/unit-tests/security/pib/key-container.t.cpp
+++ b/tests/unit-tests/security/pib/key-container.t.cpp
@@ -35,25 +35,106 @@
BOOST_AUTO_TEST_SUITE(Security)
BOOST_AUTO_TEST_SUITE(Pib)
-BOOST_AUTO_TEST_SUITE(TestKeyContainer)
+BOOST_FIXTURE_TEST_SUITE(TestKeyContainer, PibDataFixture)
using pib::Pib;
-BOOST_FIXTURE_TEST_CASE(Basic, PibDataFixture)
+BOOST_AUTO_TEST_CASE(Basic)
{
auto pibImpl = make_shared<PibMemory>();
- Pib pib("pib-memory", "", pibImpl);
- Identity identity1 = pib.addIdentity(id1);
+ // start with an empty container
+ KeyContainer container(id1, pibImpl);
+ BOOST_CHECK_EQUAL(container.size(), 0);
+ BOOST_CHECK_EQUAL(container.getLoadedKeys().size(), 0);
- Key key11 = identity1.addKey(id1Key1.buf(), id1Key1.size(), id1Key1Name);
- Key key12 = identity1.addKey(id1Key2.buf(), id1Key2.size(), id1Key2Name);
+ // add the first key
+ Key key11 = container.add(id1Key1.buf(), id1Key1.size(), id1Key1Name);
+ BOOST_CHECK_EQUAL(key11.getName(), id1Key1Name);
+ BOOST_CHECK(key11.getPublicKey() == id1Key1);
+ BOOST_CHECK_EQUAL(container.size(), 1);
+ BOOST_CHECK_EQUAL(container.getLoadedKeys().size(), 1);
+ BOOST_CHECK(container.find(id1Key1Name) != container.end());
- KeyContainer container = identity1.getKeys();
+ // add the same key again
+ Key key12 = container.add(id1Key1.buf(), id1Key1.size(), id1Key1Name);
+ BOOST_CHECK_EQUAL(key12.getName(), id1Key1Name);
+ BOOST_CHECK(key12.getPublicKey() == id1Key1);
+ BOOST_CHECK_EQUAL(container.size(), 1);
+ BOOST_CHECK_EQUAL(container.getLoadedKeys().size(), 1);
+ BOOST_CHECK(container.find(id1Key1Name) != container.end());
+
+ // add the second key
+ Key key21 = container.add(id1Key2.buf(), id1Key2.size(), id1Key2Name);
+ BOOST_CHECK_EQUAL(key21.getName(), id1Key2Name);
+ BOOST_CHECK(key21.getPublicKey() == id1Key2);
BOOST_CHECK_EQUAL(container.size(), 2);
+ BOOST_CHECK_EQUAL(container.getLoadedKeys().size(), 2);
BOOST_CHECK(container.find(id1Key1Name) != container.end());
BOOST_CHECK(container.find(id1Key2Name) != container.end());
+ // get keys
+ BOOST_REQUIRE_NO_THROW(container.get(id1Key1Name));
+ BOOST_REQUIRE_NO_THROW(container.get(id1Key2Name));
+ Name id1Key3Name = v2::constructKeyName(id1, name::Component("non-existing-id"));
+ BOOST_CHECK_THROW(container.get(id1Key3Name), Pib::Error);
+
+ // check key
+ Key key1 = container.get(id1Key1Name);
+ Key key2 = container.get(id1Key2Name);
+ BOOST_CHECK_EQUAL(key1.getName(), id1Key1Name);
+ BOOST_CHECK(key1.getPublicKey() == id1Key1);
+ BOOST_CHECK_EQUAL(key2.getName(), id1Key2Name);
+ BOOST_CHECK(key2.getPublicKey() == id1Key2);
+
+ // create another container from the same PibImpl
+ // cache should be empty
+ KeyContainer container2(id1, pibImpl);
+ BOOST_CHECK_EQUAL(container2.size(), 2);
+ BOOST_CHECK_EQUAL(container2.getLoadedKeys().size(), 0);
+
+ // get key, cache should be filled
+ BOOST_REQUIRE_NO_THROW(container2.get(id1Key1Name));
+ BOOST_CHECK_EQUAL(container2.size(), 2);
+ BOOST_CHECK_EQUAL(container2.getLoadedKeys().size(), 1);
+
+ BOOST_REQUIRE_NO_THROW(container2.get(id1Key2Name));
+ BOOST_CHECK_EQUAL(container2.size(), 2);
+ BOOST_CHECK_EQUAL(container2.getLoadedKeys().size(), 2);
+
+ // remove a key
+ container2.remove(id1Key1Name);
+ BOOST_CHECK_EQUAL(container2.size(), 1);
+ BOOST_CHECK_EQUAL(container2.getLoadedKeys().size(), 1);
+ BOOST_CHECK(container2.find(id1Key1Name) == container2.end());
+ BOOST_CHECK(container2.find(id1Key2Name) != container2.end());
+
+ // remove another key
+ container2.remove(id1Key2Name);
+ BOOST_CHECK_EQUAL(container2.size(), 0);
+ BOOST_CHECK_EQUAL(container2.getLoadedKeys().size(), 0);
+ BOOST_CHECK(container2.find(id1Key2Name) == container2.end());
+}
+
+BOOST_AUTO_TEST_CASE(Errors)
+{
+ auto pibImpl = make_shared<PibMemory>();
+
+ KeyContainer container(id1, pibImpl);
+
+ BOOST_CHECK_THROW(container.add(id2Key1.buf(), id2Key1.size(), id2Key1Name), std::invalid_argument);
+ BOOST_CHECK_THROW(container.remove(id2Key1Name), std::invalid_argument);
+ BOOST_CHECK_THROW(container.get(id2Key1Name), std::invalid_argument);
+}
+
+BOOST_AUTO_TEST_CASE(Iterator)
+{
+ auto pibImpl = make_shared<PibMemory>();
+ KeyContainer container(id1, pibImpl);
+
+ container.add(id1Key1.buf(), id1Key1.size(), id1Key1Name);
+ container.add(id1Key2.buf(), id1Key2.size(), id1Key2Name);
+
std::set<Name> keyNames;
keyNames.insert(id1Key1Name);
keyNames.insert(id1Key2Name);
@@ -77,6 +158,10 @@
count++;
}
BOOST_CHECK_EQUAL(count, 2);
+
+ BOOST_CHECK(KeyContainer::const_iterator() == KeyContainer::const_iterator());
+ BOOST_CHECK(KeyContainer::const_iterator() == container.end());
+ BOOST_CHECK(container.end() == KeyContainer::const_iterator());
}
BOOST_AUTO_TEST_SUITE_END() // TestKeyContainer