Make StringAppendOperatorTest a parameterized test (#6930)

Summary:
StringAppendOperatorTest right now runs in a mode where RUN_ALL_TESTS() is executed twice for the same test but different settings. This creates a problem with a tool that expects every test to run once. Fix it by using a parameterized test instead.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6930

Test Plan: Run the test and see it passed.

Reviewed By: ltamasi

Differential Revision: D21874145

fbshipit-source-id: 55520b2d7f1ba9f3cba1e2d087fe86f43fb06145
This commit is contained in:
sdong 2020-06-04 14:14:51 -07:00 committed by Facebook GitHub Bot
parent 31bd2d790e
commit 6cbe9d9762
1 changed files with 40 additions and 33 deletions

View File

@ -1,3 +1,9 @@
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
// This source code is licensed under both the GPLv2 (found in the
// COPYING file in the root directory) and Apache 2.0 License
// (found in the LICENSE.Apache file in the root directory).
//
/**
* An persistent map : key -> (list of strings), using rocksdb merge.
* This file is a test-harness / use-case for the StringAppendOperator.
@ -6,16 +12,19 @@
* Copyright 2013 Facebook, Inc.
*/
#include "utilities/merge_operators/string_append/stringappend.h"
#include <iostream>
#include <map>
#include <tuple>
#include "port/stack_trace.h"
#include "rocksdb/db.h"
#include "rocksdb/merge_operator.h"
#include "rocksdb/utilities/db_ttl.h"
#include "test_util/testharness.h"
#include "util/random.h"
#include "utilities/merge_operators.h"
#include "utilities/merge_operators/string_append/stringappend.h"
#include "utilities/merge_operators/string_append/stringappend2.h"
using namespace ROCKSDB_NAMESPACE;
@ -108,12 +117,26 @@ class StringLists {
// The class for unit-testing
class StringAppendOperatorTest : public testing::Test {
class StringAppendOperatorTest : public testing::Test,
public ::testing::WithParamInterface<bool> {
public:
StringAppendOperatorTest() {
DestroyDB(kDbName, Options()); // Start each test with a fresh DB
}
void SetUp() override {
#ifndef ROCKSDB_LITE // TtlDb is not supported in Lite
bool if_use_ttl = GetParam();
if (if_use_ttl) {
fprintf(stderr, "Running tests with ttl db and generic operator.\n");
StringAppendOperatorTest::SetOpenDbFunction(&OpenTtlDb);
return;
}
#endif // !ROCKSDB_LITE
fprintf(stderr, "Running tests with regular db and operator.\n");
StringAppendOperatorTest::SetOpenDbFunction(&OpenNormalDb);
}
typedef std::shared_ptr<DB> (* OpenFuncPtr)(char);
// Allows user to open databases with different configurations.
@ -129,7 +152,7 @@ StringAppendOperatorTest::OpenFuncPtr StringAppendOperatorTest::OpenDb = nullptr
// THE TEST CASES BEGIN HERE
TEST_F(StringAppendOperatorTest, IteratorTest) {
TEST_P(StringAppendOperatorTest, IteratorTest) {
auto db_ = OpenDb(',');
StringLists slists(db_);
@ -220,10 +243,9 @@ TEST_F(StringAppendOperatorTest, IteratorTest) {
ASSERT_EQ(res, "g1");
}
}
}
TEST_F(StringAppendOperatorTest, SimpleTest) {
TEST_P(StringAppendOperatorTest, SimpleTest) {
auto db = OpenDb(',');
StringLists slists(db);
@ -238,7 +260,7 @@ TEST_F(StringAppendOperatorTest, SimpleTest) {
ASSERT_EQ(res, "v1,v2,v3");
}
TEST_F(StringAppendOperatorTest, SimpleDelimiterTest) {
TEST_P(StringAppendOperatorTest, SimpleDelimiterTest) {
auto db = OpenDb('|');
StringLists slists(db);
@ -251,7 +273,7 @@ TEST_F(StringAppendOperatorTest, SimpleDelimiterTest) {
ASSERT_EQ(res, "v1|v2|v3");
}
TEST_F(StringAppendOperatorTest, OneValueNoDelimiterTest) {
TEST_P(StringAppendOperatorTest, OneValueNoDelimiterTest) {
auto db = OpenDb('!');
StringLists slists(db);
@ -262,7 +284,7 @@ TEST_F(StringAppendOperatorTest, OneValueNoDelimiterTest) {
ASSERT_EQ(res, "single_val");
}
TEST_F(StringAppendOperatorTest, VariousKeys) {
TEST_P(StringAppendOperatorTest, VariousKeys) {
auto db = OpenDb('\n');
StringLists slists(db);
@ -288,7 +310,7 @@ TEST_F(StringAppendOperatorTest, VariousKeys) {
}
// Generate semi random keys/words from a small distribution.
TEST_F(StringAppendOperatorTest, RandomMixGetAppend) {
TEST_P(StringAppendOperatorTest, RandomMixGetAppend) {
auto db = OpenDb(' ');
StringLists slists(db);
@ -336,10 +358,9 @@ TEST_F(StringAppendOperatorTest, RandomMixGetAppend) {
}
}
}
TEST_F(StringAppendOperatorTest, BIGRandomMixGetAppend) {
TEST_P(StringAppendOperatorTest, BIGRandomMixGetAppend) {
auto db = OpenDb(' ');
StringLists slists(db);
@ -387,10 +408,9 @@ TEST_F(StringAppendOperatorTest, BIGRandomMixGetAppend) {
}
}
}
TEST_F(StringAppendOperatorTest, PersistentVariousKeys) {
TEST_P(StringAppendOperatorTest, PersistentVariousKeys) {
// Perform the following operations in limited scope
{
auto db = OpenDb('\n');
@ -457,7 +477,7 @@ TEST_F(StringAppendOperatorTest, PersistentVariousKeys) {
}
}
TEST_F(StringAppendOperatorTest, PersistentFlushAndCompaction) {
TEST_P(StringAppendOperatorTest, PersistentFlushAndCompaction) {
// Perform the following operations in limited scope
{
auto db = OpenDb('\n');
@ -553,7 +573,7 @@ TEST_F(StringAppendOperatorTest, PersistentFlushAndCompaction) {
}
}
TEST_F(StringAppendOperatorTest, SimpleTestNullDelimiter) {
TEST_P(StringAppendOperatorTest, SimpleTestNullDelimiter) {
auto db = OpenDb('\0');
StringLists slists(db);
@ -576,26 +596,13 @@ TEST_F(StringAppendOperatorTest, SimpleTestNullDelimiter) {
ASSERT_EQ(res, checker);
}
INSTANTIATE_TEST_CASE_P(StringAppendOperatorTest, StringAppendOperatorTest,
testing::Bool());
} // namespace ROCKSDB_NAMESPACE
int main(int argc, char** argv) {
ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
::testing::InitGoogleTest(&argc, argv);
// Run with regular database
int result;
{
fprintf(stderr, "Running tests with regular db and operator.\n");
StringAppendOperatorTest::SetOpenDbFunction(&OpenNormalDb);
result = RUN_ALL_TESTS();
}
#ifndef ROCKSDB_LITE // TtlDb is not supported in Lite
// Run with TTL
{
fprintf(stderr, "Running tests with ttl db and generic operator.\n");
StringAppendOperatorTest::SetOpenDbFunction(&OpenTtlDb);
result |= RUN_ALL_TESTS();
}
#endif // !ROCKSDB_LITE
return result;
return RUN_ALL_TESTS();
}