Skip to content

Commit

Permalink
test/libcephfs: ensure that we set the mode of the libcephfs root bef…
Browse files Browse the repository at this point in the history
…ore testing

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>
  • Loading branch information
jtlayton committed Nov 29, 2016
1 parent 08acce6 commit a9a1a63
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/test/libcephfs/CMakeLists.txt
Expand Up @@ -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})
Expand Down
62 changes: 62 additions & 0 deletions src/test/libcephfs/main.cc
@@ -0,0 +1,62 @@
// -*- 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"
#include "include/stat.h"
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <sys/xattr.h>
#include <sys/uio.h>

#ifdef __linux__
#include <limits.h>
#endif

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();
}

0 comments on commit a9a1a63

Please sign in to comment.