diff options
author | Greg Farnum <greg@inktank.com> | 2013-06-18 13:41:18 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2013-06-20 14:10:35 -0700 |
commit | 36514731a524800d377075dc3e8032a023f88ce3 (patch) | |
tree | 69975f7e3d6fa8f45f7f2a0e5f6ce9a18c349457 | |
parent | 29df88af7550d9ae56d572cd591bd9ab21e8989a (diff) | |
download | ceph-36514731a524800d377075dc3e8032a023f88ce3.tar.gz |
cls_replica_log: add tests.
We do several good updates, a bad update, a good delete,
a bad delete, several good gets, and a bad get.
Signed-off-by: Greg Farnum <greg@inktank.com>
-rw-r--r-- | src/Makefile.am | 7 | ||||
-rw-r--r-- | src/test/cls_replica_log/test_cls_replica_log.cc | 153 |
2 files changed, 160 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 728cee31754..3155d764d97 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1028,6 +1028,13 @@ ceph_test_cls_statelog_SOURCES = test/cls_statelog/test_cls_statelog.cc \ ceph_test_cls_statelog_LDADD = libglobal.la librados.la libcls_statelog_client.a ${UNITTEST_STATIC_LDADD} ceph_test_cls_statelog_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS} bin_DEBUGPROGRAMS += ceph_test_cls_statelog +ceph_test_cls_replica_log_SOURCES = \ + test/cls_replica_log/test_cls_replica_log.cc \ + test/librados/test.cc +ceph_test_cls_replica_log_LDADD = libglobal.la librados.la \ + libcls_replica_log_client.a ${UNITTEST_STATIC_LDADD} +ceph_test_cls_replica_log_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS} +bin_DEBUGPROGRAMS += ceph_test_cls_replica_log ceph_test_cls_lock_SOURCES = test/cls_lock/test_cls_lock.cc test/librados/test.cc ceph_test_cls_lock_LDFLAGS = ${AM_LDFLAGS} diff --git a/src/test/cls_replica_log/test_cls_replica_log.cc b/src/test/cls_replica_log/test_cls_replica_log.cc new file mode 100644 index 00000000000..eabe0b3860d --- /dev/null +++ b/src/test/cls_replica_log/test_cls_replica_log.cc @@ -0,0 +1,153 @@ +/* + * Ceph - scalable distributed file system + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * Copyright 2013 Inktank + */ + +#include "gtest/gtest.h" +#include "test/librados/test.h" + +#include "cls/replica_log/cls_replica_log_client.h" +#include "cls/replica_log/cls_replica_log_types.h" + +#define SETUP_DATA \ + librados::Rados rados; \ + librados::IoCtx ioctx; \ + string pool_name = get_temp_pool_name(); \ + ASSERT_EQ("", create_one_pool_pp(pool_name, rados)); \ + ASSERT_EQ(0, rados.ioctx_create(pool_name.c_str(), ioctx)); \ + string oid = "obj"; \ + ASSERT_EQ(0, ioctx.create(oid, true)); + +#define ADD_MARKER \ + string entity = "tester_entity"; \ + string marker = "tester_marker1"; \ + utime_t time; \ + time.set_from_double(10); \ + list<pair<string, utime_t> > entries; \ + entries.push_back(make_pair("tester_obj1", time)); \ + time.set_from_double(20); \ + cls_replica_log_progress_marker progress; \ + cls_replica_log_prepare_marker(progress, entity, marker, time, &entries); \ + librados::ObjectWriteOperation opw; \ + cls_replica_log_update_bound(opw, progress); \ + ASSERT_EQ(0, ioctx.operate(oid, &opw)); + +TEST(cls_replica_log, test_set_get_marker) +{ + SETUP_DATA + + ADD_MARKER + + string reply_position_marker; + utime_t reply_time; + list<cls_replica_log_progress_marker> return_progress_list; + ASSERT_EQ(0, cls_replica_log_get_bounds(ioctx, oid, reply_position_marker, + reply_time, return_progress_list)); + + ASSERT_EQ(reply_position_marker, marker); + ASSERT_EQ((double)10, (double)reply_time); + string response_entity; + string response_marker; + utime_t response_time; + list<pair<string, utime_t> > response_item_list; + + cls_replica_log_extract_marker(return_progress_list.front(), + response_entity, response_marker, + response_time, response_item_list); + ASSERT_EQ(response_entity, entity); + ASSERT_EQ(response_marker, marker); + ASSERT_EQ(response_time, time); + ASSERT_EQ((unsigned)1, response_item_list.size()); + ASSERT_EQ("tester_obj1", response_item_list.front().first); +} + +TEST(cls_replica_log, test_bad_update) +{ + SETUP_DATA + + ADD_MARKER + + time.set_from_double(15); + cls_replica_log_progress_marker bad_marker; + cls_replica_log_prepare_marker(bad_marker, entity, marker, time, &entries); + librados::ObjectWriteOperation badw; + cls_replica_log_update_bound(badw, bad_marker); + ASSERT_EQ(-EINVAL, ioctx.operate(oid, &badw)); +} + +TEST(cls_replica_log, test_bad_delete) +{ + SETUP_DATA + + ADD_MARKER + + librados::ObjectWriteOperation badd; + cls_replica_log_delete_bound(badd, entity); + ASSERT_EQ(-ENOTEMPTY, ioctx.operate(oid, &badd)); +} + +TEST(cls_replica_log, test_good_delete) +{ + SETUP_DATA + + ADD_MARKER + + librados::ObjectWriteOperation opc; + progress.items.clear(); + cls_replica_log_update_bound(opc, progress); + ASSERT_EQ(0, ioctx.operate(oid, &opc)); + librados::ObjectWriteOperation opd; + cls_replica_log_delete_bound(opd, entity); + ASSERT_EQ(0, ioctx.operate(oid, &opd)); + + string reply_position_marker; + utime_t reply_time; + list<cls_replica_log_progress_marker> return_progress_list; + ASSERT_EQ(0, cls_replica_log_get_bounds(ioctx, oid, reply_position_marker, + reply_time, return_progress_list)); + ASSERT_EQ((unsigned)0, return_progress_list.size()); +} + +TEST(cls_replica_log, test_bad_get) +{ + SETUP_DATA + + string reply_position_marker; + utime_t reply_time; + list<cls_replica_log_progress_marker> return_progress_list; + ASSERT_EQ(-ENOENT, + cls_replica_log_get_bounds(ioctx, oid, reply_position_marker, + reply_time, return_progress_list)); +} + +TEST(cls_replica_log, test_double_delete) +{ + SETUP_DATA + + ADD_MARKER + + librados::ObjectWriteOperation opc; + progress.items.clear(); + cls_replica_log_update_bound(opc, progress); + ASSERT_EQ(0, ioctx.operate(oid, &opc)); + librados::ObjectWriteOperation opd; + cls_replica_log_delete_bound(opd, entity); + ASSERT_EQ(0, ioctx.operate(oid, &opd)); + + librados::ObjectWriteOperation opd2; + cls_replica_log_delete_bound(opd2, entity); + ASSERT_EQ(0, ioctx.operate(oid, &opd2)); + + string reply_position_marker; + utime_t reply_time; + list<cls_replica_log_progress_marker> return_progress_list; + ASSERT_EQ(0, cls_replica_log_get_bounds(ioctx, oid, reply_position_marker, + reply_time, return_progress_list)); + ASSERT_EQ((unsigned)0, return_progress_list.size()); + +} |