From 0cde5890e59ab7cacd3beadc52ca95437ddb4d8b Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 23 Dec 2015 09:20:49 -0500 Subject: [PATCH] ceph_test_objectstore: add omap iterator test Signed-off-by: Sage Weil --- src/test/objectstore/store_test.cc | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index 0608978fb5124..7b1a7609d5384 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -1182,6 +1182,74 @@ TEST_P(StoreTest, SimpleCloneTest) { } } +TEST_P(StoreTest, OmapSimple) { + ObjectStore::Sequencer osr("test"); + int r; + coll_t cid; + { + ObjectStore::Transaction t; + t.create_collection(cid, 0); + cerr << "Creating collection " << cid << std::endl; + r = store->apply_transaction(&osr, t); + ASSERT_EQ(r, 0); + } + ghobject_t hoid(hobject_t(sobject_t("omap_obj", CEPH_NOSNAP), + "key", 123, -1, "")); + bufferlist small; + small.append("small"); + map km; + km["foo"] = small; + km["bar"].append("asdfjkasdkjdfsjkafskjsfdj"); + bufferlist header; + header.append("this is a header"); + { + ObjectStore::Transaction t; + t.touch(cid, hoid); + t.omap_setkeys(cid, hoid, km); + t.omap_setheader(cid, hoid, header); + cerr << "Creating object and set omap " << hoid << std::endl; + r = store->apply_transaction(&osr, t); + ASSERT_EQ(r, 0); + } + // get header, keys + { + bufferlist h; + map r; + store->omap_get(cid, hoid, &h, &r); + ASSERT_TRUE(h.contents_equal(header)); + ASSERT_EQ(r.size(), km.size()); + cout << "r: " << r << std::endl; + } + // test iterator with seek_to_first + { + map r; + ObjectMap::ObjectMapIterator iter = store->get_omap_iterator(cid, hoid); + for (iter->seek_to_first(); iter->valid(); iter->next(false)) { + r[iter->key()] = iter->value(); + } + cout << "r: " << r << std::endl; + ASSERT_EQ(r.size(), km.size()); + } + // test iterator with initial lower_bound + { + map r; + ObjectMap::ObjectMapIterator iter = store->get_omap_iterator(cid, hoid); + for (iter->lower_bound(string()); iter->valid(); iter->next(false)) { + r[iter->key()] = iter->value(); + } + cout << "r: " << r << std::endl; + ASSERT_EQ(r.size(), km.size()); + } + { + ObjectStore::Transaction t; + t.remove(cid, hoid); + t.remove_collection(cid); + cerr << "Cleaning" << std::endl; + r = store->apply_transaction(&osr, t); + ASSERT_EQ(r, 0); + } +} + TEST_P(StoreTest, OmapCloneTest) { ObjectStore::Sequencer osr("test"); int r; -- 2.39.5