diff --git a/tests/unit/sqlite-handle.cpp b/tests/unit/sqlite-handle.cpp
index 9dbe801..17a4832 100644
--- a/tests/unit/sqlite-handle.cpp
+++ b/tests/unit/sqlite-handle.cpp
@@ -17,7 +17,7 @@
  * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "storage/sqlite-handle.hpp"
+#include "storage/sqlite-storage.hpp"
 
 #include "../sqlite-fixture.hpp"
 #include "../dataset-fixtures.hpp"
@@ -27,45 +27,47 @@
 namespace repo {
 namespace tests {
 
-BOOST_AUTO_TEST_SUITE(SqliteHandle)
+BOOST_AUTO_TEST_SUITE(SqliteStorage)
 
 template<class Dataset>
 class Fixture : public SqliteFixture, public Dataset
 {
 };
 
-BOOST_FIXTURE_TEST_CASE_TEMPLATE(InsertReadDelete, T, DatasetFixtures, Fixture<T>)
+BOOST_FIXTURE_TEST_CASE_TEMPLATE(InsertReadDelete, T, DatasetFixtures_Sqlite, Fixture<T>)
 {
   BOOST_TEST_MESSAGE(T::getName());
 
   // Insert
-  for (typename T::DataContainer::iterator i = this->data.begin();
-       i != this->data.end(); ++i) {
-    BOOST_CHECK_EQUAL(this->handle->insertData(**i), true);
+  for (typename T::IdContainer::iterator i = this->ids.begin();
+       i != this->ids.end(); ++i) {
+    BOOST_CHECK_EQUAL(this->handle->insert(*i->second), i->first);
   }
 
   BOOST_CHECK_EQUAL(this->handle->size(), this->data.size());
 
   // Read (all items should exist)
-  for (typename T::InterestContainer::iterator i = this->interests.begin();
-       i != this->interests.end(); ++i) {
-    ndn::Data retrievedData;
-    BOOST_REQUIRE_EQUAL(this->handle->readData(i->first, retrievedData), true);
-    BOOST_CHECK_EQUAL(retrievedData, *i->second);
+  for (typename T::IdContainer::iterator i = this->ids.begin();
+       i != this->ids.end(); ++i) {
+    shared_ptr<Data> retrievedData = this->handle->read(i->first);
+    BOOST_CHECK_EQUAL(*retrievedData, *i->second);
   }
 
   // Delete
-  for (typename T::DataContainer::iterator i = this->data.begin();
-       i != this->data.end(); ++i) {
-    BOOST_CHECK_EQUAL(this->handle->deleteData((*i)->getName()), true);
+  for (typename T::IdContainer::iterator i = this->ids.begin();
+       i != this->ids.end(); ++i) {
+      //std::cout<<"remove name = "<<i->second->getName()<<std::endl;
+    BOOST_CHECK_EQUAL(this->handle->erase(i->first), true);
   }
 
+  /*
   // Read (none of the items should exist)
   for (typename T::InterestContainer::iterator i = this->interests.begin();
        i != this->interests.end(); ++i) {
     ndn::Data retrievedData;
     BOOST_REQUIRE_EQUAL(this->handle->readData(i->first, retrievedData), false);
-  }
+  }*/
+
 }
 
 BOOST_AUTO_TEST_SUITE_END()
