]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
test/libcephfs: ensure that we set the mode of the libcephfs root before testing
authorJeff Layton <jlayton@redhat.com>
Wed, 30 Nov 2016 12:37:52 +0000 (07:37 -0500)
committerJeff Layton <jlayton@redhat.com>
Wed, 30 Nov 2016 12:37:52 +0000 (07:37 -0500)
Patrick noticed that the libcephfs tests failed to run unless they were
run after the ceph-fuse tests had run. The ceph-fuse tests set the root
of the share to mode 01777, but the libcephfs tests don't do that even
though they rely on the directory being world-writable.

Fix this by adding a new main() function for ceph_test_libcephfs, and
calling a function (copied from access.cc) that resets the permissions
of the root before running the tests.

Fixes: http://tracker.ceph.com/issues/18013
Signed-off-by: Jeff Layton <jlayton@redhat.com>
src/test/libcephfs/CMakeLists.txt
src/test/libcephfs/main.cc [new file with mode: 0644]

index d2642cf4af9183fdacdb0991bbe9e45db1809410..ace1c882d5a664235342bea761039b93a908313e 100644 (file)
@@ -7,6 +7,7 @@ if(${WITH_CEPHFS})
     flock.cc
     recordlock.cc
     acl.cc
+    main.cc
   )
   set_target_properties(ceph_test_libcephfs PROPERTIES COMPILE_FLAGS
     ${UNITTEST_CXX_FLAGS})
diff --git a/src/test/libcephfs/main.cc b/src/test/libcephfs/main.cc
new file mode 100644 (file)
index 0000000..99a72b2
--- /dev/null
@@ -0,0 +1,49 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2011 New Dream Network
+ * Copyright (C) 2016 Red Hat
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#include "gtest/gtest.h"
+#include "include/cephfs/libcephfs.h"
+
+static int update_root_mode()
+{
+  struct ceph_mount_info *admin;
+  int r = ceph_create(&admin, NULL);
+  if (r < 0)
+    return r;
+  ceph_conf_read_file(admin, NULL);
+  ceph_conf_parse_env(admin, NULL);
+  ceph_conf_set(admin, "client_permissions", "false");
+  r = ceph_mount(admin, "/");
+  if (r < 0)
+    goto out;
+  r = ceph_chmod(admin, "/", 01777);
+out:
+  ceph_shutdown(admin);
+  return r;
+}
+
+
+int main(int argc, char **argv)
+{
+  int r = update_root_mode();
+  if (r < 0)
+    exit(1);
+
+  ::testing::InitGoogleTest(&argc, argv);
+
+  srand(getpid());
+
+  return RUN_ALL_TESTS();
+}