summaryrefslogtreecommitdiffstats
path: root/src/test/immutable_object_cache/test_object_store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/immutable_object_cache/test_object_store.cc')
-rw-r--r--src/test/immutable_object_cache/test_object_store.cc103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/test/immutable_object_cache/test_object_store.cc b/src/test/immutable_object_cache/test_object_store.cc
new file mode 100644
index 000000000..e100ed444
--- /dev/null
+++ b/src/test/immutable_object_cache/test_object_store.cc
@@ -0,0 +1,103 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include <iostream>
+#include <unistd.h>
+
+#if __has_include(<filesystem>)
+#include <filesystem>
+namespace fs = std::filesystem;
+#else
+#include <experimental/filesystem>
+namespace fs = std::experimental::filesystem;
+#endif
+
+#include "gtest/gtest.h"
+#include "include/Context.h"
+#include "include/rados/librados.hpp"
+#include "include/rbd/librbd.hpp"
+#include "librbd/ImageCtx.h"
+#include "test/librados/test.h"
+#include "global/global_init.h"
+#include "global/global_context.h"
+#include "test/librados/test_cxx.h"
+
+#include "tools/immutable_object_cache/ObjectCacheStore.h"
+
+using namespace ceph::immutable_obj_cache;
+
+std::string test_cache_path("/tmp/test_ceph_immutable_shared_cache");
+
+class TestObjectStore : public ::testing::Test {
+public:
+ ObjectCacheStore* m_object_cache_store;
+ librados::Rados* m_test_rados;
+ CephContext* m_ceph_context;
+ librados::IoCtx m_local_io_ctx;
+ std::string m_temp_pool_name;
+ std::string m_temp_volume_name;
+
+ TestObjectStore(): m_object_cache_store(nullptr), m_test_rados(nullptr), m_ceph_context(nullptr){}
+
+ ~TestObjectStore(){}
+
+ static void SetUpTestCase() {}
+ static void TearDownTestCase() {}
+
+ void SetUp() override {
+ m_test_rados = new librados::Rados();
+ ASSERT_EQ("", connect_cluster_pp(*m_test_rados));
+ ASSERT_EQ(0, m_test_rados->conf_set("rbd_cache", "false"));
+ ASSERT_EQ(0, m_test_rados->conf_set("immutable_object_cache_max_size", "1024"));
+ ASSERT_EQ(0, m_test_rados->conf_set("immutable_object_cache_path", test_cache_path.c_str()));
+
+ }
+
+ void create_object_cache_store(uint64_t entry_num) {
+ m_temp_pool_name = get_temp_pool_name("test_pool_");
+ ASSERT_EQ(0, m_test_rados->pool_create(m_temp_pool_name.c_str()));
+ ASSERT_EQ(0, m_test_rados->ioctx_create(m_temp_pool_name.c_str(), m_local_io_ctx));
+ m_temp_volume_name = "test_volume";
+ m_ceph_context = reinterpret_cast<CephContext*>(m_test_rados->cct());
+ m_object_cache_store = new ObjectCacheStore(m_ceph_context);
+ }
+
+ void init_object_cache_store(std::string pool_name, std::string vol_name,
+ uint64_t vol_size, bool reset) {
+ ASSERT_EQ(0, m_object_cache_store->init(reset));
+ ASSERT_EQ(0, m_object_cache_store->init_cache());
+ }
+
+ void shutdown_object_cache_store() {
+ ASSERT_EQ(0, m_object_cache_store->shutdown());
+ }
+
+ void lookup_object_cache_store(std::string pool_name, std::string vol_name,
+ std::string obj_name, int& ret) {
+ std::string cache_path;
+ ret = m_object_cache_store->lookup_object(pool_name, 1, 2, 3,
+ obj_name, true, cache_path);
+ }
+
+ void TearDown() override {
+ if(m_test_rados)
+ delete m_test_rados;
+ if(m_object_cache_store)
+ delete m_object_cache_store;
+ }
+};
+
+TEST_F(TestObjectStore, test_1) {
+ create_object_cache_store(1000);
+
+ std::string cache_path(test_cache_path);
+
+ fs::remove_all(test_cache_path);
+
+ init_object_cache_store(m_temp_pool_name, m_temp_volume_name, 1000, true);
+
+
+ // TODO add lookup interface testing
+
+ shutdown_object_cache_store();
+}