]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson: add tests for enhanced get/set attrs apis 40977/head
authorXuehan Xu <xxhdx1985126@gmail.com>
Sun, 2 May 2021 07:22:16 +0000 (15:22 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Tue, 4 May 2021 10:39:12 +0000 (18:39 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/test/crimson/seastore/test_seastore.cc

index eb20b965d6110f55776208962c0dc85e6e336eba..bbea9222864a43aa15e81e2041dfc0c0662309ba 100644 (file)
@@ -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);
   });
 }