// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). // #include "rocksdb/status.h" #include "rocksdb/env.h" #include #include "util/coding.h" #include "util/testharness.h" namespace rocksdb { class LockTest : public testing::Test { public: static LockTest* current_; std::string file_; rocksdb::Env* env_; LockTest() : file_(test::TmpDir() + "/db_testlock_file"), env_(rocksdb::Env::Default()) { current_ = this; } ~LockTest() { } Status LockFile(FileLock** db_lock) { return env_->LockFile(file_, db_lock); } Status UnlockFile(FileLock* db_lock) { return env_->UnlockFile(db_lock); } }; LockTest* LockTest::current_; TEST_F(LockTest, LockBySameThread) { FileLock* lock1; FileLock* lock2; // acquire a lock on a file ASSERT_OK(LockFile(&lock1)); // re-acquire the lock on the same file. This should fail. ASSERT_TRUE(LockFile(&lock2).IsIOError()); // release the lock ASSERT_OK(UnlockFile(lock1)); } } // namespace rocksdb int main(int argc, char** argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }