summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoah Watkins <noahwatkins@gmail.com>2012-11-28 15:33:45 -0800
committerNoah Watkins <noahwatkins@gmail.com>2013-01-05 11:42:43 -0800
commite1112f9ae1c29165656c6540c6b36be712a92f7f (patch)
treeee8507d98aa4a902280e7fe05f2c0fb72ba8a942
parent8548a88d476adffdf7e01d2fee38a67d7675bd54 (diff)
downloadceph-e1112f9ae1c29165656c6540c6b36be712a92f7f.tar.gz
test: auto create/cleanup ceph mount instances
Adds a test fixture which creates and destroys a ceph mount automatically for each test. This lets us easily alter the mount before each test runs. We'll use this to enable/disable local reads for each test. Signed-off-by: Noah Watkins <noahwatkins@gmail.com>
-rw-r--r--src/test/libcephfs/test.cc289
1 files changed, 91 insertions, 198 deletions
diff --git a/src/test/libcephfs/test.cc b/src/test/libcephfs/test.cc
index b8c62dff23e..9cd6541a0a6 100644
--- a/src/test/libcephfs/test.cc
+++ b/src/test/libcephfs/test.cc
@@ -22,13 +22,54 @@
#include <dirent.h>
#include <sys/xattr.h>
-TEST(LibCephFS, OpenEmptyComponent) {
+class ConfiguredMountTest : public ::testing::Test {
+ protected:
+ struct ceph_mount_info *cmount;
+
+ virtual void SetUp() {
+ ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+ ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+ }
+
+ virtual void TearDown() {
+ ASSERT_EQ(ceph_release(cmount), 0);
+ }
+
+ void RefreshMount() {
+ ASSERT_EQ(ceph_release(cmount), 0);
+ ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+ ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+ }
+};
+
+class MountedTest : public ConfiguredMountTest {
+ protected:
+ virtual void SetUp() {
+ ConfiguredMountTest::SetUp();
+ Mount();
+ }
+
+ virtual void TearDown() {
+ ASSERT_EQ(ceph_unmount(cmount), 0);
+ ConfiguredMountTest::TearDown();
+ }
+
+ void Remount(bool deep=false) {
+ ASSERT_EQ(ceph_unmount(cmount), 0);
+ if (deep)
+ ConfiguredMountTest::RefreshMount();
+ Mount();
+ }
+
+ private:
+ void Mount() {
+ ASSERT_EQ(ceph_mount(cmount, NULL), 0);
+ }
+};
+
+TEST_F(MountedTest, OpenEmptyComponent) {
pid_t mypid = getpid();
- struct ceph_mount_info *cmount;
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
char c_dir[1024];
sprintf(c_dir, "/open_test_%d", mypid);
@@ -45,116 +86,65 @@ TEST(LibCephFS, OpenEmptyComponent) {
ASSERT_EQ(0, ceph_close(cmount, fd));
ASSERT_EQ(0, ceph_closedir(cmount, dirp));
- ceph_shutdown(cmount);
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
-
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
+ Remount();
fd = ceph_open(cmount, c_path, O_RDONLY, 0666);
ASSERT_LT(0, fd);
ASSERT_EQ(0, ceph_close(cmount, fd));
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, MountNonExist) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
+TEST_F(ConfiguredMountTest, MountNonExist) {
ASSERT_NE(0, ceph_mount(cmount, "/non-exist"));
}
-TEST(LibCephFS, MountDouble) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
+TEST_F(MountedTest, MountDouble) {
ASSERT_EQ(-EISCONN, ceph_mount(cmount, "/"));
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, MountRemount) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
-
+TEST_F(MountedTest, MountRemount) {
CephContext *cct = ceph_get_mount_context(cmount);
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
- ASSERT_EQ(0, ceph_unmount(cmount));
-
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
+ Remount();
ASSERT_EQ(cct, ceph_get_mount_context(cmount));
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, UnmountUnmounted) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
+TEST_F(ConfiguredMountTest, UnmountUnmounted) {
ASSERT_EQ(-ENOTCONN, ceph_unmount(cmount));
}
-TEST(LibCephFS, ReleaseUnmounted) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_release(cmount));
+TEST_F(ConfiguredMountTest, ReleaseUnmounted) {
+ // Default behavior of ConfiguredMountTest
}
-TEST(LibCephFS, ReleaseMounted) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
+TEST_F(MountedTest, ReleaseMounted) {
ASSERT_EQ(-EISCONN, ceph_release(cmount));
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, UnmountRelease) {
-
- struct ceph_mount_info *cmount;
-
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
- ASSERT_EQ(0, ceph_unmount(cmount));
- ASSERT_EQ(0, ceph_release(cmount));
+TEST_F(MountedTest, UnmountRelease) {
+ // Default behavior of ConfiguredMountTest
}
-TEST(LibCephFS, Mount) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
- ceph_shutdown(cmount);
-
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
- ceph_shutdown(cmount);
+TEST_F(MountedTest, Mount) {
+ /*
+ * Remount(true) will reproduce the following. The first mount operation is
+ * taken care of by the fixture.
+ *
+ * struct ceph_mount_info *cmount;
+ * ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+ * ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+ * ASSERT_EQ(ceph_mount(cmount, NULL), 0);
+ * ceph_shutdown(cmount);
+ *
+ * ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+ * ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+ * ASSERT_EQ(ceph_mount(cmount, NULL), 0);
+ * ceph_shutdown(cmount);
+ */
+ Remount(true);
}
-TEST(LibCephFS, OpenLayout) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, OpenLayout) {
/* valid layout */
char test_layout_file[256];
sprintf(test_layout_file, "test_layout_%d_b", getpid());
@@ -188,19 +178,12 @@ TEST(LibCephFS, OpenLayout) {
sprintf(test_layout_file, "test_layout_%d_f", getpid());
fd = ceph_open_layout(cmount, test_layout_file, O_CREAT, 0666, (1<<20), 7, (1<<20), "asdfjasdfjasdf");
ASSERT_EQ(fd, -EINVAL);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, DirLs) {
+TEST_F(MountedTest, DirLs) {
pid_t mypid = getpid();
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, "/"), 0);
-
struct ceph_dir_result *ls_dir = NULL;
char foostr[256];
sprintf(foostr, "dir_ls%d", mypid);
@@ -349,16 +332,9 @@ TEST(LibCephFS, DirLs) {
}
ASSERT_EQ(ceph_closedir(cmount, ls_dir), 0);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, ManyNestedDirs) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, ManyNestedDirs) {
const char *many_path = "a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a";
ASSERT_EQ(ceph_mkdirs(cmount, many_path, 0755), 0);
@@ -393,16 +369,9 @@ TEST(LibCephFS, ManyNestedDirs) {
ASSERT_EQ(ceph_chdir(cmount, "/"), 0);
ASSERT_EQ(ceph_rmdir(cmount, "a/a/a"), 0);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, Xattrs) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, Xattrs) {
char test_xattr_file[256];
sprintf(test_xattr_file, "test_xattr_%d", getpid());
int fd = ceph_open(cmount, test_xattr_file, O_CREAT, 0666);
@@ -445,28 +414,15 @@ TEST(LibCephFS, Xattrs) {
}
ceph_close(cmount, fd);
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, LstatSlashdot) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, LstatSlashdot) {
struct stat stbuf;
ASSERT_EQ(ceph_lstat(cmount, "/.", &stbuf), 0);
ASSERT_EQ(ceph_lstat(cmount, ".", &stbuf), 0);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, DoubleChmod) {
-
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
+TEST_F(MountedTest, DoubleChmod) {
char test_file[256];
sprintf(test_file, "test_perms_%d", getpid());
@@ -512,16 +468,9 @@ TEST(LibCephFS, DoubleChmod) {
ASSERT_EQ(ceph_write(cmount, fd, bytes, strlen(bytes), 0), (int)strlen(bytes));
ceph_close(cmount, fd);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, Fchmod) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, Fchmod) {
char test_file[256];
sprintf(test_file, "test_perms_%d", getpid());
@@ -555,16 +504,9 @@ TEST(LibCephFS, Fchmod) {
ASSERT_EQ(ceph_write(cmount, fd, bytes, strlen(bytes), 0), (int)strlen(bytes));
ceph_close(cmount, fd);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, Fchown) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, Fchown) {
char test_file[256];
sprintf(test_file, "test_fchown_%d", getpid());
@@ -581,15 +523,9 @@ TEST(LibCephFS, Fchown) {
fd = ceph_open(cmount, test_file, O_RDWR, 0);
ASSERT_EQ(fd, -EACCES);
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, Symlinks) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, Symlinks) {
char test_file[256];
sprintf(test_file, "test_symlinks_%d", getpid());
@@ -634,16 +570,9 @@ TEST(LibCephFS, Symlinks) {
struct stat stbuf_symlink;
ASSERT_EQ(ceph_lstat(cmount, test_symlink, &stbuf_symlink), 0);
ASSERT_TRUE(S_ISLNK(stbuf_symlink.st_mode));
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, DirSyms) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, DirSyms) {
char test_dir1[256];
sprintf(test_dir1, "dir1_symlinks_%d", getpid());
@@ -665,16 +594,9 @@ TEST(LibCephFS, DirSyms) {
// ensure that its a file not a directory we get back
ASSERT_TRUE(S_ISREG(stbuf.st_mode));
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, LoopSyms) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, LoopSyms) {
char test_dir1[256];
sprintf(test_dir1, "dir1_loopsym_%d", getpid());
@@ -705,19 +627,12 @@ TEST(LibCephFS, LoopSyms) {
ASSERT_EQ(ceph_symlink(cmount, b, c), 0);
ASSERT_EQ(ceph_symlink(cmount, c, a), 0);
ASSERT_EQ(ceph_open(cmount, a, O_RDWR, 0), -ELOOP);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, HardlinkNoOriginal) {
+TEST_F(MountedTest, HardlinkNoOriginal) {
int mypid = getpid();
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
char dir[256];
sprintf(dir, "/test_rmdirfail%d", mypid);
ASSERT_EQ(ceph_mkdir(cmount, dir, 0777), 0);
@@ -735,25 +650,16 @@ TEST(LibCephFS, HardlinkNoOriginal) {
// remove file link points to
ASSERT_EQ(ceph_unlink(cmount, "f1"), 0);
- ceph_shutdown(cmount);
+ /* Complete refresh (builds new context) */
+ Remount(true);
// now cleanup
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
ASSERT_EQ(ceph_chdir(cmount, dir), 0);
ASSERT_EQ(ceph_unlink(cmount, "hardl1"), 0);
ASSERT_EQ(ceph_rmdir(cmount, dir), 0);
-
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, BadFileDesc) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, BadFileDesc) {
ASSERT_EQ(ceph_fchmod(cmount, -1, 0655), -EBADF);
ASSERT_EQ(ceph_close(cmount, -1), -EBADF);
ASSERT_EQ(ceph_lseek(cmount, -1, 0, SEEK_SET), -EBADF);
@@ -776,12 +682,7 @@ TEST(LibCephFS, BadFileDesc) {
ASSERT_EQ(ceph_get_file_replication(cmount, -1), -EBADF);
}
-TEST(LibCephFS, ReadEmptyFile) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(ceph_create(&cmount, NULL), 0);
- ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
- ASSERT_EQ(ceph_mount(cmount, NULL), 0);
-
+TEST_F(MountedTest, ReadEmptyFile) {
// test the read_sync path in the client for zero files
ASSERT_EQ(ceph_conf_set(cmount, "client_debug_force_sync_read", "true"), 0);
@@ -801,15 +702,9 @@ TEST(LibCephFS, ReadEmptyFile) {
ASSERT_EQ(ceph_read(cmount, fd, buf, 4096, 0), 0);
ceph_close(cmount, fd);
- ceph_shutdown(cmount);
}
-TEST(LibCephFS, ReaddirRCB) {
- struct ceph_mount_info *cmount;
- ASSERT_EQ(0, ceph_create(&cmount, NULL));
- ASSERT_EQ(0, ceph_conf_read_file(cmount, NULL));
- ASSERT_EQ(0, ceph_mount(cmount, "/"));
-
+TEST_F(MountedTest, ReaddirRCB) {
char c_dir[256];
sprintf(c_dir, "/readdir_r_cb_tests_%d", getpid());
struct ceph_dir_result *dirp;
@@ -842,6 +737,4 @@ TEST(LibCephFS, ReaddirRCB) {
ASSERT_EQ(5, ceph_getdnames(cmount, dirp, buf, 6));
ASSERT_EQ(4, ceph_getdnames(cmount, dirp, buf, 6));
ASSERT_LE(0, ceph_closedir(cmount, dirp));
-
- ceph_shutdown(cmount);
}