mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-26 16:30:56 +00:00
add InDomain regression test
Summary: regression tests to make sure seek keys not in domain would not fail assertion Test Plan: ``` [gzh@dev6163.prn2 ~/local/rocksdb] ./prefix_test --gtest_filter=SamePrefixTest.* /tmp/rocksdbtest-112628/prefix_test Note: Google Test filter = SamePrefixTest.* [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from SamePrefixTest [ RUN ] SamePrefixTest.InDomainTest [ OK ] SamePrefixTest.InDomainTest (211 ms) [----------] 1 test from SamePrefixTest (211 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (211 ms total) ``` Reviewers: andrewkr, sdong Reviewed By: sdong Subscribers: andrewkr, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D61161
This commit is contained in:
parent
9c8ac144bd
commit
e72ea485ed
|
@ -146,6 +146,35 @@ std::string Get(DB* db, const ReadOptions& read_options, uint64_t prefix,
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SamePrefixTransform : public SliceTransform {
|
||||||
|
private:
|
||||||
|
const Slice prefix_;
|
||||||
|
std::string name_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit SamePrefixTransform(const Slice& prefix)
|
||||||
|
: prefix_(prefix), name_("rocksdb.SamePrefix." + prefix.ToString()) {}
|
||||||
|
|
||||||
|
virtual const char* Name() const override { return name_.c_str(); }
|
||||||
|
|
||||||
|
virtual Slice Transform(const Slice& src) const override {
|
||||||
|
assert(InDomain(src));
|
||||||
|
return prefix_;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool InDomain(const Slice& src) const override {
|
||||||
|
if (src.size() >= prefix_.size()) {
|
||||||
|
return Slice(src.data(), prefix_.size()) == prefix_;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool InRange(const Slice& dst) const override {
|
||||||
|
return dst == prefix_;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
class PrefixTest : public testing::Test {
|
class PrefixTest : public testing::Test {
|
||||||
|
@ -226,6 +255,55 @@ class PrefixTest : public testing::Test {
|
||||||
Options options;
|
Options options;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
TEST(SamePrefixTest, InDomainTest) {
|
||||||
|
DB* db;
|
||||||
|
Options options;
|
||||||
|
options.create_if_missing = true;
|
||||||
|
options.prefix_extractor.reset(new SamePrefixTransform("HHKB"));
|
||||||
|
BlockBasedTableOptions bbto;
|
||||||
|
bbto.filter_policy.reset(NewBloomFilterPolicy(10, false));
|
||||||
|
bbto.whole_key_filtering = false;
|
||||||
|
options.table_factory.reset(NewBlockBasedTableFactory(bbto));
|
||||||
|
WriteOptions write_options;
|
||||||
|
ReadOptions read_options;
|
||||||
|
{
|
||||||
|
ASSERT_OK(DB::Open(options, kDbName, &db));
|
||||||
|
ASSERT_OK(db->Put(write_options, "HHKB pro2", "Mar 24, 2006"));
|
||||||
|
ASSERT_OK(db->Put(write_options, "HHKB pro2 Type-S", "June 29, 2011"));
|
||||||
|
ASSERT_OK(db->Put(write_options, "Realforce 87u", "idk"));
|
||||||
|
db->Flush(FlushOptions());
|
||||||
|
std::string result;
|
||||||
|
auto db_iter = db->NewIterator(ReadOptions());
|
||||||
|
|
||||||
|
db_iter->Seek("Realforce 87u");
|
||||||
|
ASSERT_TRUE(db_iter->Valid());
|
||||||
|
ASSERT_OK(db_iter->status());
|
||||||
|
ASSERT_EQ(db_iter->key(), "Realforce 87u");
|
||||||
|
ASSERT_EQ(db_iter->value(), "idk");
|
||||||
|
|
||||||
|
delete db_iter;
|
||||||
|
delete db;
|
||||||
|
ASSERT_OK(DestroyDB(kDbName, Options()));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
ASSERT_OK(DB::Open(options, kDbName, &db));
|
||||||
|
ASSERT_OK(db->Put(write_options, "pikachu", "1"));
|
||||||
|
ASSERT_OK(db->Put(write_options, "Meowth", "1"));
|
||||||
|
ASSERT_OK(db->Put(write_options, "Mewtwo", "idk"));
|
||||||
|
db->Flush(FlushOptions());
|
||||||
|
std::string result;
|
||||||
|
auto db_iter = db->NewIterator(ReadOptions());
|
||||||
|
|
||||||
|
db_iter->Seek("Mewtwo");
|
||||||
|
ASSERT_TRUE(db_iter->Valid());
|
||||||
|
ASSERT_OK(db_iter->status());
|
||||||
|
delete db_iter;
|
||||||
|
delete db;
|
||||||
|
ASSERT_OK(DestroyDB(kDbName, Options()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(PrefixTest, TestResult) {
|
TEST_F(PrefixTest, TestResult) {
|
||||||
for (int num_buckets = 1; num_buckets <= 2; num_buckets++) {
|
for (int num_buckets = 1; num_buckets <= 2; num_buckets++) {
|
||||||
FirstOption();
|
FirstOption();
|
||||||
|
|
Loading…
Reference in a new issue