https://github.com/facebook/rocksdb
Raw File
Tip revision: 2adddeefcbde51a907a625e12070eff1134b9ea1 authored by Dhruba Borthakur on 20 March 2013, 21:16:53 UTC
1.5.8.1.fb release.
Tip revision: 2adddee
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