diff --git a/tests/unit-tests/aes.t.cpp b/tests/unit-tests/algo/aes.t.cpp
similarity index 100%
rename from tests/unit-tests/aes.t.cpp
rename to tests/unit-tests/algo/aes.t.cpp
diff --git a/tests/unit-tests/encryptor.t.cpp b/tests/unit-tests/algo/encryptor.t.cpp
similarity index 97%
rename from tests/unit-tests/encryptor.t.cpp
rename to tests/unit-tests/algo/encryptor.t.cpp
index 7c89d76..d6c0451 100644
--- a/tests/unit-tests/encryptor.t.cpp
+++ b/tests/unit-tests/algo/encryptor.t.cpp
@@ -19,7 +19,7 @@
 
 #include "random-number-generator.hpp"
 #include "encrypted-content.hpp"
-#include "encryptor.hpp"
+#include "algo/encryptor.hpp"
 #include "algo/rsa.hpp"
 #include "algo/aes.hpp"
 
@@ -137,7 +137,6 @@
 typedef boost::mpl::list<TestDataAesCbc,
                          TestDataAesEcb> EncryptorAesTestInputs;
 
-
 BOOST_AUTO_TEST_CASE_TEMPLATE(ContentSymmetricEncrypt, T, EncryptorAesTestInputs)
 {
   T input;
@@ -146,6 +145,8 @@
   encryptData(data, input.plainText.buf(), input.plainText.size(),
               input.keyName, input.key.buf(), input.key.size(), input.encryptParams);
 
+  BOOST_CHECK_EQUAL(data.getName(), Name("/FOR").append(input.keyName));
+
   BOOST_CHECK_EQUAL_COLLECTIONS(input.encryptedContent.begin(), input.encryptedContent.end(),
                                 data.getContent().wire(), data.getContent().wire() + data.getContent().size());
 
@@ -210,6 +211,8 @@
   encryptData(data, raw_content, sizeof(raw_content),
               keyName, eKey.buf(), eKey.size(), encryptParams);
 
+  BOOST_CHECK_EQUAL(data.getName(), Name("/FOR").append(keyName));
+
   Block dataContent = data.getContent();
   dataContent.parse();
   BOOST_CHECK_EQUAL(dataContent.elements_size(), 1);
@@ -284,6 +287,8 @@
   encryptData(data, large_content, sizeof(large_content),
               keyName, eKey.buf(), eKey.size(), encryptParams);
 
+  BOOST_CHECK_EQUAL(data.getName(), Name("/FOR").append(keyName));
+
   Block largeDataContent = data.getContent();
   largeDataContent.parse();
   BOOST_CHECK_EQUAL(largeDataContent.elements_size(), 2);
diff --git a/tests/unit-tests/rsa.t.cpp b/tests/unit-tests/algo/rsa.t.cpp
similarity index 100%
rename from tests/unit-tests/rsa.t.cpp
rename to tests/unit-tests/algo/rsa.t.cpp
diff --git a/tests/unit-tests/group-manager.t.cpp b/tests/unit-tests/group-manager.t.cpp
index 4564939..abf78e7 100644
--- a/tests/unit-tests/group-manager.t.cpp
+++ b/tests/unit-tests/group-manager.t.cpp
@@ -225,7 +225,7 @@
 
   Data data = manager.createEKeyData("20150825T090000", "20150825T110000", encryptKeyBuf);
   BOOST_CHECK_EQUAL(data.getName().toUri(),
-                    "/Alice/read/data_type/E-KEY/20150825T090000/20150825T110000");
+                    "/Alice/READ/data_type/E-KEY/20150825T090000/20150825T110000");
 
   Buffer contentBuf(data.getContent().value(), data.getContent().value_size());
   BOOST_CHECK_EQUAL_COLLECTIONS(encryptKeyBuf.begin(), encryptKeyBuf.end(),
@@ -285,14 +285,14 @@
   // first data contain the group encrypt key(public key)
   std::list<Data>::iterator dataIterator = result.begin();
   BOOST_CHECK_EQUAL(dataIterator->getName().toUri(),
-                    "/Alice/read/data_type/E-KEY/20150825T090000/20150825T100000");
+                    "/Alice/READ/data_type/E-KEY/20150825T090000/20150825T100000");
   EncryptKey<algo::Rsa> groupEKey(Buffer(dataIterator->getContent().value(),
                                          dataIterator->getContent().value_size()));
 
   // second data and decrypt
   dataIterator++;
   BOOST_CHECK_EQUAL(dataIterator->getName().toUri(),
-                    "/Alice/read/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberA/ksk-123");
+                    "/Alice/READ/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberA/ksk-123");
 
   //////////////////////////////////////////////////////////////////////// start decryption
   Block dataContent = dataIterator->getContent();
@@ -343,12 +343,12 @@
   // third data and decrypt
   dataIterator++;
   BOOST_CHECK_EQUAL(dataIterator->getName().toUri(),
-                    "/Alice/read/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberB/ksk-123");
+                    "/Alice/READ/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberB/ksk-123");
 
   // second data and decrypt
   dataIterator++;
   BOOST_CHECK_EQUAL(dataIterator->getName().toUri(),
-                    "/Alice/read/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberC/ksk-123");
+                    "/Alice/READ/data_type/D-KEY/20150825T090000/20150825T100000/FOR/ndn/memberC/ksk-123");
 
   // invalid time stamp to get group key
   TimeStamp tp2(from_iso_string("20150826T083000"));
