From 1c798dc6c7ea43e6093cd2dc341475a1e03a82ac Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Sun, 2 May 2021 15:22:16 +0800 Subject: [PATCH] test/crimson: add tests for enhanced get/set attrs apis Signed-off-by: Xuehan Xu --- src/test/crimson/seastore/test_seastore.cc | 87 ++++++++++++++++++---- 1 file changed, 73 insertions(+), 14 deletions(-) diff --git a/src/test/crimson/seastore/test_seastore.cc b/src/test/crimson/seastore/test_seastore.cc index eb20b965d6110..bbea9222864a4 100644 --- a/src/test/crimson/seastore/test_seastore.cc +++ b/src/test/crimson/seastore/test_seastore.cc @@ -177,20 +177,31 @@ struct seastore_test_t : EXPECT_EQ(contents.length(), st.st_size); } - void set_attr_oi( + void set_attr( SeaStore &seastore, + std::string key, bufferlist& val) { CTransaction t; - t.setattr(cid, oid, OI_ATTR, val); + t.setattr(cid, oid, key, val); seastore.do_transaction( coll, std::move(t)).get0(); } - SeaStore::attrs_t get_attr_oi( + SeaStore::attrs_t get_attrs( SeaStore &seastore) { - return seastore.get_attrs( - coll, oid).handle_error(SeaStore::get_attrs_ertr::discard_all{}).get(); + return seastore.get_attrs(coll, oid) + .handle_error(SeaStore::get_attrs_ertr::discard_all{}) + .get(); + } + + ceph::bufferlist get_attr( + SeaStore& seastore, + std::string_view name) { + return seastore.get_attr(coll, oid, name) + .handle_error( + SeaStore::get_attr_errorator::discard_all{}) + .get(); } void check_omap_key( @@ -350,16 +361,64 @@ TEST_F(seastore_test_t, attr) { run_async([this] { auto& test_obj = get_object(make_oid(0)); - std::string s("asdfasdfasdf"); + + std::string oi("asdfasdfasdf"); bufferlist bl; - encode(s, bl); - test_obj.set_attr_oi(*seastore, bl); - auto attrs = test_obj.get_attr_oi(*seastore); - std::string s2; - bufferlist bl2; - bl2.push_back(attrs[OI_ATTR]); - decode(s2, bl); - EXPECT_EQ(s, s2); + encode(oi, bl); + test_obj.set_attr(*seastore, OI_ATTR, bl); + + std::string ss("fdsfdsfs"); + bl.clear(); + encode(ss, bl); + test_obj.set_attr(*seastore, SS_ATTR, bl); + + std::string test_val("ssssssssssss"); + bl.clear(); + encode(test_val, bl); + test_obj.set_attr(*seastore, "test_key", bl); + + auto attrs = test_obj.get_attrs(*seastore); + std::string oi2; + bufferlist bl2 = attrs[OI_ATTR]; + decode(oi2, bl2); + bl2.clear(); + bl2 = attrs[SS_ATTR]; + std::string ss2; + decode(ss2, bl2); + std::string test_val2; + bl2.clear(); + bl2 = attrs["test_key"]; + decode(test_val2, bl2); + EXPECT_EQ(ss, ss2); + EXPECT_EQ(oi, oi2); + EXPECT_EQ(test_val, test_val2); + + bl2.clear(); + bl2 = test_obj.get_attr(*seastore, "test_key"); + test_val2.clear(); + decode(test_val2, bl2); + EXPECT_EQ(test_val, test_val2); + + std::cout << "test_key passed" << std::endl; + char ss_array[256] = {0}; + std::string ss_str(&ss_array[0], 256); + bl.clear(); + encode(ss_str, bl); + test_obj.set_attr(*seastore, SS_ATTR, bl); + + attrs = test_obj.get_attrs(*seastore); + std::cout << "got attr" << std::endl; + bl2.clear(); + bl2 = attrs[SS_ATTR]; + std::string ss_str2; + decode(ss_str2, bl2); + EXPECT_EQ(ss_str, ss_str2); + + bl2.clear(); + ss_str2.clear(); + bl2 = test_obj.get_attr(*seastore, SS_ATTR); + decode(ss_str2, bl2); + EXPECT_EQ(ss_str, ss_str2); }); } -- 2.39.5