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