git / moonbite-core / src/leveldb/util/testutil.h · raw
// 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.#ifndef STORAGE_LEVELDB_UTIL_TESTUTIL_H_#define STORAGE_LEVELDB_UTIL_TESTUTIL_H_#include "helpers/memenv/memenv.h"#include "leveldb/env.h"#include "leveldb/slice.h"#include "util/random.h"namespace leveldb {namespace test {// Store in *dst a random string of length "len" and return a Slice that// references the generated data.Slice RandomString(Random* rnd, int len, std::string* dst);// Return a random key with the specified length that may contain interesting// characters (e.g. \x00, \xff, etc.).std::string RandomKey(Random* rnd, int len);// Store in *dst a string of length "len" that will compress to// "N*compressed_fraction" bytes and return a Slice that references// the generated data.Slice CompressibleString(Random* rnd, double compressed_fraction, size_t len, std::string* dst);// A wrapper that allows injection of errors.class ErrorEnv : public EnvWrapper { public: bool writable_file_error_; int num_writable_file_errors_; ErrorEnv() : EnvWrapper(NewMemEnv(Env::Default())), writable_file_error_(false), num_writable_file_errors_(0) {} ~ErrorEnv() override { delete target(); } Status NewWritableFile(const std::string& fname, WritableFile** result) override { if (writable_file_error_) { ++num_writable_file_errors_; *result = nullptr; return Status::IOError(fname, "fake error"); } return target()->NewWritableFile(fname, result); } Status NewAppendableFile(const std::string& fname, WritableFile** result) override { if (writable_file_error_) { ++num_writable_file_errors_; *result = nullptr; return Status::IOError(fname, "fake error"); } return target()->NewAppendableFile(fname, result); }};} // namespace test} // namespace leveldb#endif // STORAGE_LEVELDB_UTIL_TESTUTIL_H_