forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Separate Env tests from PosixEnv tests.
env_test.cc defines EnvPosixTest which tests the Env implementation returned by Env::Default(). The naming is a bit unfortunate, as the tests in env_test.cc are written against the Env contract, and therefore are applicable to any Env implementation. An instance of the confusion caused by the naming is [] which added a dependency from env_test.cc to EnvPosixTestHelper, which is closely coupled to EnvPosix. This change disentangles EnvPosix-specific test code into a env_posix_test.cc file. The code there uses EnvPosixTestHelper and specifically targets the EnvPosix implementation. env_test.cc now implements EnvTest, and contains tests that are also applicable to other ports, which may define their own Env implementation. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=148914642
- Loading branch information
Showing
3 changed files
with
78 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. See the AUTHORS file for names of contributors. | ||
|
||
#include "leveldb/env.h" | ||
|
||
#include "port/port.h" | ||
#include "util/testharness.h" | ||
#include "util/env_posix_test_helper.h" | ||
|
||
namespace leveldb { | ||
|
||
static const int kDelayMicros = 100000; | ||
static const int kReadOnlyFileLimit = 4; | ||
static const int kMMapLimit = 4; | ||
|
||
class EnvPosixTest { | ||
public: | ||
Env* env_; | ||
EnvPosixTest() : env_(Env::Default()) { } | ||
|
||
static void SetFileLimits(int read_only_file_limit, int mmap_limit) { | ||
EnvPosixTestHelper::SetReadOnlyFDLimit(read_only_file_limit); | ||
EnvPosixTestHelper::SetReadOnlyMMapLimit(mmap_limit); | ||
} | ||
}; | ||
|
||
TEST(EnvPosixTest, TestOpenOnRead) { | ||
// Write some test data to a single file that will be opened |n| times. | ||
std::string test_dir; | ||
ASSERT_OK(env_->GetTestDirectory(&test_dir)); | ||
std::string test_file = test_dir + "/open_on_read.txt"; | ||
|
||
FILE* f = fopen(test_file.c_str(), "w"); | ||
ASSERT_TRUE(f != NULL); | ||
const char kFileData[] = "abcdefghijklmnopqrstuvwxyz"; | ||
fputs(kFileData, f); | ||
fclose(f); | ||
|
||
// Open test file some number above the sum of the two limits to force | ||
// open-on-read behavior of POSIX Env leveldb::RandomAccessFile. | ||
const int kNumFiles = kReadOnlyFileLimit + kMMapLimit + 5; | ||
leveldb::RandomAccessFile* files[kNumFiles] = {0}; | ||
for (int i = 0; i < kNumFiles; i++) { | ||
ASSERT_OK(env_->NewRandomAccessFile(test_file, &files[i])); | ||
} | ||
char scratch; | ||
Slice read_result; | ||
for (int i = 0; i < kNumFiles; i++) { | ||
ASSERT_OK(files[i]->Read(i, 1, &read_result, &scratch)); | ||
ASSERT_EQ(kFileData[i], read_result[0]); | ||
} | ||
for (int i = 0; i < kNumFiles; i++) { | ||
delete files[i]; | ||
} | ||
ASSERT_OK(env_->DeleteFile(test_file)); | ||
} | ||
|
||
} // namespace leveldb | ||
|
||
int main(int argc, char** argv) { | ||
// All tests currently run with the same read-only file limits. | ||
leveldb::EnvPosixTest::SetFileLimits(leveldb::kReadOnlyFileLimit, | ||
leveldb::kMMapLimit); | ||
return leveldb::test::RunAllTests(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters