#include <folly/File.h>
#include <mutex>
#include <boost/thread/locks.hpp>
#include <glog/logging.h>
#include <folly/String.h>
#include <folly/Subprocess.h>
#include <folly/experimental/TestUtil.h>
#include <folly/experimental/io/FsUtil.h>
#include <folly/portability/GFlags.h>
#include <folly/portability/GTest.h>
Go to the source code of this file.
DEFINE_bool |
( |
s |
, |
|
|
false |
, |
|
|
"get shared lock" |
|
|
) |
| |
DEFINE_bool |
( |
x |
, |
|
|
false |
, |
|
|
"get exclusive lock" |
|
|
) |
| |
Definition at line 37 of file FileLockTest.cpp.
References EXPECT_EQ, EXPECT_TRUE, f, folly::test::TemporaryFile::fd(), folly::lock(), mode, folly::test::TemporaryFile::path(), folly::detail::SHARED, gmock_test_utils::Subprocess, and folly::detail::distributed_mutex::wait().
38 typedef std::unique_lock<File> Lock;
39 typedef boost::shared_lock<File> SharedLock;
42 static constexpr
size_t pathLength = 2048;
43 char buf[pathLength + 1];
44 int r = readlink(
"/proc/self/exe", buf, pathLength);
49 auto helper_basename =
"file_test_lock_helper";
51 if (fs::exists(me.parent_path() / helper_basename)) {
52 helper = me.parent_path() / helper_basename;
54 throw std::runtime_error(
55 folly::to<std::string>(
"cannot find helper ", helper_basename));
61 enum LockMode { EXCLUSIVE,
SHARED };
62 auto testLock = [&](LockMode
mode,
bool expectedSuccess) {
64 mode == SHARED ?
"-s" :
"-x",
65 tempFile.
path().string()})
69 EXPECT_EQ(expectedSuccess ? 0 : 42, ret.exitStatus());
76 { SharedLock
lock(
f); }
79 Lock
lock(
f, std::defer_lock);
84 SharedLock
lock(
f, boost::defer_lock);
91 testLock(EXCLUSIVE,
false);
97 testLock(SHARED,
false);
103 testLock(EXCLUSIVE,
false);
109 testLock(SHARED,
true);
#define EXPECT_EQ(val1, val2)
folly::Optional< PskKeyExchangeMode > mode
auto lock(SynchronizedLocker...lockersIn) -> std::tuple< typename SynchronizedLocker::LockedPtr... >
bool wait(Waiter *waiter, bool shouldSleep, Waiter *&next)
const fs::path & path() const
#define EXPECT_TRUE(condition)