2011-03-19 06:37:00 +08:00
|
|
|
// 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 "util/testharness.h"
|
|
|
|
|
2011-08-16 09:21:01 +08:00
|
|
|
#include <stdlib.h>
|
2011-03-19 06:37:00 +08:00
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
2018-03-16 21:23:29 +08:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "leveldb/env.h"
|
|
|
|
|
2011-03-19 06:37:00 +08:00
|
|
|
namespace leveldb {
|
|
|
|
namespace test {
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
struct Test {
|
|
|
|
const char* base;
|
|
|
|
const char* name;
|
|
|
|
void (*func)();
|
|
|
|
};
|
|
|
|
std::vector<Test>* tests;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool RegisterTest(const char* base, const char* name, void (*func)()) {
|
2018-04-11 07:18:06 +08:00
|
|
|
if (tests == nullptr) {
|
2011-03-19 06:37:00 +08:00
|
|
|
tests = new std::vector<Test>;
|
|
|
|
}
|
|
|
|
Test t;
|
|
|
|
t.base = base;
|
|
|
|
t.name = name;
|
|
|
|
t.func = func;
|
|
|
|
tests->push_back(t);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
int RunAllTests() {
|
2011-08-16 09:21:01 +08:00
|
|
|
const char* matcher = getenv("LEVELDB_TESTS");
|
|
|
|
|
2011-03-19 06:37:00 +08:00
|
|
|
int num = 0;
|
2018-04-11 07:18:06 +08:00
|
|
|
if (tests != nullptr) {
|
2013-12-11 02:36:31 +08:00
|
|
|
for (size_t i = 0; i < tests->size(); i++) {
|
2011-03-19 06:37:00 +08:00
|
|
|
const Test& t = (*tests)[i];
|
2018-04-11 07:18:06 +08:00
|
|
|
if (matcher != nullptr) {
|
2011-08-16 09:21:01 +08:00
|
|
|
std::string name = t.base;
|
|
|
|
name.push_back('.');
|
|
|
|
name.append(t.name);
|
2018-04-11 07:18:06 +08:00
|
|
|
if (strstr(name.c_str(), matcher) == nullptr) {
|
2011-08-16 09:21:01 +08:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
2011-03-19 06:37:00 +08:00
|
|
|
fprintf(stderr, "==== Test %s.%s\n", t.base, t.name);
|
|
|
|
(*t.func)();
|
|
|
|
++num;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fprintf(stderr, "==== PASSED %d tests\n", num);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string TmpDir() {
|
|
|
|
std::string dir;
|
|
|
|
Status s = Env::Default()->GetTestDirectory(&dir);
|
|
|
|
ASSERT_TRUE(s.ok()) << s.ToString();
|
|
|
|
return dir;
|
|
|
|
}
|
|
|
|
|
|
|
|
int RandomSeed() {
|
|
|
|
const char* env = getenv("TEST_RANDOM_SEED");
|
2018-04-11 07:18:06 +08:00
|
|
|
int result = (env != nullptr ? atoi(env) : 301);
|
2011-03-19 06:37:00 +08:00
|
|
|
if (result <= 0) {
|
|
|
|
result = 301;
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2011-11-01 01:22:06 +08:00
|
|
|
} // namespace test
|
|
|
|
} // namespace leveldb
|