From: Matt Benjamin Date: Fri, 15 Jan 2016 21:44:54 +0000 (-0500) Subject: librgw: add support for rgw_rename tests X-Git-Tag: v10.1.0~382^2~29 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ca6e93bb359e1c1b9d47de4bf774ce8d224b4ed5;p=ceph.git librgw: add support for rgw_rename tests Implements intra-bucket rgw_rename test, which unfortunately fails currently. Signed-off-by: Matt Benjamin --- diff --git a/src/test/librgw_file_nfsns.cc b/src/test/librgw_file_nfsns.cc index b24f1435cf95..9d3fa509e467 100644 --- a/src/test/librgw_file_nfsns.cc +++ b/src/test/librgw_file_nfsns.cc @@ -134,6 +134,7 @@ namespace { bool do_marker1 = false; bool do_create = false; bool do_delete = false; + bool do_rename = false; bool verbose = false; string marker_dir("nfs_marker"); @@ -152,6 +153,8 @@ namespace { obj_rec dirs1_b{dirs1_bucket_name, nullptr, nullptr, nullptr}; + dirs1_vec renames_vec; + struct { int argc; char **argv; @@ -360,6 +363,63 @@ TEST(LibRGW, RGW_CREATE_DIRS1) { } } +TEST(LibRGW, RGW_SETUP_RENAME1) { + /* verify rgw_create (create [empty] file objects the easy way) */ + if (do_rename) { + int rc; + struct stat st; + obj_vec ovec; + for (int b_ix : {0, 1}) { + std::string bname{"brename_" + to_string(b_ix)}; + obj_rec brec{bname, nullptr, nullptr, nullptr}; + (void) rgw_lookup(fs, fs->root_fh, brec.name.c_str(), &brec.fh, + RGW_LOOKUP_FLAG_NONE); + if (! brec.fh) { + if (do_create) { + struct stat st; + int rc = rgw_mkdir(fs, fs->root_fh, brec.name.c_str(), 755, &st, + &brec.fh, RGW_MKDIR_FLAG_NONE); + ASSERT_EQ(rc, 0); + } + } + ASSERT_NE(brec.fh, nullptr); + brec.sync(); + for (int f_ix : {0, 1}) { + std::string rfname{"rfile_"}; + rfname += to_string(f_ix); + obj_rec rf{rfname, nullptr, brec.fh, nullptr}; + (void) rgw_lookup(fs, rf.parent_fh, rf.name.c_str(), &rf.fh, + RGW_LOOKUP_FLAG_NONE); + if (! rf.fh) { + rc = rgw_create(fs, rf.parent_fh, rf.name.c_str(), 644, &st, &rf.fh, + RGW_CREATE_FLAG_NONE); + ASSERT_EQ(rc, 0); + } + rf.sync(); + ovec.push_back(rf); + } + renames_vec.push_back(dirs1_rec{brec, ovec}); + ovec.clear(); + } /* b_ix */ + } +} + +TEST(LibRGW, RGW_INTRABUCKET_RENAME1) { + /* rgw_rename a file within a bucket */ + if (do_rename) { + int rc; + obj_rec& bdir0 = get<0>(renames_vec[0]); + obj_rec& src_obj = get<1>(renames_vec[0])[0]; + std::string rfname{"rfile_r0"}; + std::cout << "rename file " << src_obj.name << " to " + << rfname << " (bucket " << bdir0.name << ")" + << std::endl; + rc = rgw_rename(fs, bdir0.fh, src_obj.name.c_str(), bdir0.fh, + rfname.c_str(), RGW_RENAME_FLAG_NONE); + ASSERT_EQ(rc, 0); + } +} + TEST(LibRGW, BAD_DELETES_DIRS1) { if (do_dirs1) { int rc; @@ -777,6 +837,9 @@ int main(int argc, char *argv[]) } else if (ceph_argparse_flag(args, arg_iter, "--delete", (char*) nullptr)) { do_delete = true; + } else if (ceph_argparse_flag(args, arg_iter, "--rename", + (char*) nullptr)) { + do_rename = true; } else if (ceph_argparse_flag(args, arg_iter, "--verbose", (char*) nullptr)) { verbose = true;