testharness.cc raw

   1  // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style license that can be
   3  // found in the LICENSE file. See the AUTHORS file for names of contributors.
   4  
   5  #include "util/testharness.h"
   6  
   7  #include <stdlib.h>
   8  #include <sys/stat.h>
   9  #include <sys/types.h>
  10  
  11  #include <string>
  12  #include <vector>
  13  
  14  #include "leveldb/env.h"
  15  
  16  namespace leveldb {
  17  namespace test {
  18  
  19  namespace {
  20  struct Test {
  21    const char* base;
  22    const char* name;
  23    void (*func)();
  24  };
  25  std::vector<Test>* tests;
  26  }  // namespace
  27  
  28  bool RegisterTest(const char* base, const char* name, void (*func)()) {
  29    if (tests == nullptr) {
  30      tests = new std::vector<Test>;
  31    }
  32    Test t;
  33    t.base = base;
  34    t.name = name;
  35    t.func = func;
  36    tests->push_back(t);
  37    return true;
  38  }
  39  
  40  int RunAllTests() {
  41    const char* matcher = getenv("LEVELDB_TESTS");
  42  
  43    int num = 0;
  44    if (tests != nullptr) {
  45      for (size_t i = 0; i < tests->size(); i++) {
  46        const Test& t = (*tests)[i];
  47        if (matcher != nullptr) {
  48          std::string name = t.base;
  49          name.push_back('.');
  50          name.append(t.name);
  51          if (strstr(name.c_str(), matcher) == nullptr) {
  52            continue;
  53          }
  54        }
  55        fprintf(stderr, "==== Test %s.%s\n", t.base, t.name);
  56        (*t.func)();
  57        ++num;
  58      }
  59    }
  60    fprintf(stderr, "==== PASSED %d tests\n", num);
  61    return 0;
  62  }
  63  
  64  std::string TmpDir() {
  65    std::string dir;
  66    Status s = Env::Default()->GetTestDirectory(&dir);
  67    ASSERT_TRUE(s.ok()) << s.ToString();
  68    return dir;
  69  }
  70  
  71  int RandomSeed() {
  72    const char* env = getenv("TEST_RANDOM_SEED");
  73    int result = (env != nullptr ? atoi(env) : 301);
  74    if (result <= 0) {
  75      result = 301;
  76    }
  77    return result;
  78  }
  79  
  80  }  // namespace test
  81  }  // namespace leveldb
  82