https://github.com/facebook/rocksdb
Raw File
Tip revision: f881d6f2266fe606c4848d8ff35d9374472b240e authored by Dhruba Borthakur on 09 January 2013, 18:26:03 UTC
Release 1.5.7.fb
Tip revision: f881d6f
filelock_test.cc
// Copyright (c) 2012 Facebook. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "leveldb/status.h"
#include "leveldb/env.h"

#include <vector>
#include "util/coding.h"
#include "util/testharness.h"

namespace leveldb {

class LockTest {
 public:
  static LockTest* current_;
  std::string file_;
  leveldb::Env* env_;

  LockTest() : file_(test::TmpDir() + "/db_testlock_file"),
               env_(leveldb::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(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 leveldb

int main(int argc, char** argv) {
  return leveldb::test::RunAllTests();
}
back to top