aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-02-24 11:04:09 +0100
committerTor Egge <Tor.Egge@online.no>2022-02-24 11:04:09 +0100
commitacbb0547a41e35aa9ca3826a496b040d39951ceb (patch)
tree7d6d67b44279dcf0e48ab993269cc4394f6b6895
parent122aa5b6f4f7c61b8662df6e2115a91af640de33 (diff)
Convert btree stress test to gtest.
-rw-r--r--vespalib/src/tests/btree/btree-stress/CMakeLists.txt1
-rw-r--r--vespalib/src/tests/btree/btree-stress/btree_stress_test.cpp86
2 files changed, 46 insertions, 41 deletions
diff --git a/vespalib/src/tests/btree/btree-stress/CMakeLists.txt b/vespalib/src/tests/btree/btree-stress/CMakeLists.txt
index 52a421f7733..29f3c0acc77 100644
--- a/vespalib/src/tests/btree/btree-stress/CMakeLists.txt
+++ b/vespalib/src/tests/btree/btree-stress/CMakeLists.txt
@@ -4,5 +4,6 @@ vespa_add_executable(vespalib_btree_stress_test_app
btree_stress_test.cpp
DEPENDS
vespalib
+ GTest::GTest
)
vespa_add_test(NAME vespalib_btree_stress_test_app COMMAND vespalib_btree_stress_test_app BENCHMARK)
diff --git a/vespalib/src/tests/btree/btree-stress/btree_stress_test.cpp b/vespalib/src/tests/btree/btree-stress/btree_stress_test.cpp
index c47fc3dad85..4cc45a85955 100644
--- a/vespalib/src/tests/btree/btree-stress/btree_stress_test.cpp
+++ b/vespalib/src/tests/btree/btree-stress/btree_stress_test.cpp
@@ -1,11 +1,11 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/vespalib/btree/btree.h>
#include <vespa/vespalib/btree/btreebuilder.h>
#include <vespa/vespalib/btree/btreenodeallocator.h>
#include <vespa/vespalib/btree/btreeroot.h>
#include <vespa/vespalib/btree/btreestore.h>
+#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vespalib/util/lambdatask.h>
#include <vespa/vespalib/util/rand48.h>
@@ -23,7 +23,7 @@
#include <vespa/vespalib/btree/btreeaggregator.hpp>
#include <vespa/log/log.h>
-LOG_SETUP("btreestress_test");
+LOG_SETUP("btree_stress_test");
using MyTree = vespalib::btree::BTree<uint32_t, uint32_t>;
using MyTreeIterator = typename MyTree::Iterator;
@@ -31,8 +31,9 @@ using MyTreeConstIterator = typename MyTree::ConstIterator;
using GenerationHandler = vespalib::GenerationHandler;
using vespalib::makeLambdaTask;
-struct Fixture
+class Fixture : public testing::Test
{
+protected:
GenerationHandler _generationHandler;
MyTree _tree;
MyTreeIterator _writeItr;
@@ -43,11 +44,11 @@ struct Fixture
std::atomic<long> _readSeed;
std::atomic<long> _doneWriteWork;
std::atomic<long> _doneReadWork;
- std::atomic<int> _stopRead;
+ std::atomic<bool> _stopRead;
bool _reportWork;
Fixture();
- ~Fixture();
+ ~Fixture() override;
void commit();
void adjustWriteIterator(uint32_t key);
void insert(uint32_t key);
@@ -60,7 +61,8 @@ struct Fixture
Fixture::Fixture()
- : _generationHandler(),
+ : testing::Test(),
+ _generationHandler(),
_tree(),
_writeItr(_tree.begin()),
_writer(1, 128_Ki),
@@ -70,7 +72,7 @@ Fixture::Fixture()
_readSeed(50),
_doneWriteWork(0),
_doneReadWork(0),
- _stopRead(0),
+ _stopRead(false),
_reportWork(false)
{
_rnd.srand48(32);
@@ -139,7 +141,7 @@ Fixture::readWork(uint32_t cnt)
vespalib::Rand48 rnd;
rnd.srand48(++_readSeed);
uint32_t i;
- for (i = 0; i < cnt && _stopRead.load() == 0; ++i) {
+ for (i = 0; i < cnt && !_stopRead.load(); ++i) {
auto guard = _generationHandler.takeGuard();
uint32_t key = rnd.lrand48() % (_keyLimit + 1);
MyTreeConstIterator itr = _tree.getFrozenView().lowerBound(key);
@@ -171,55 +173,57 @@ Fixture::writeWork(uint32_t cnt)
commit();
}
_doneWriteWork += cnt;
- _stopRead = 1;
+ _stopRead = true;
LOG(info, "done %u write work", cnt);
}
+using BTreeStressTest = Fixture;
-TEST_F("Test manual lower bound call", Fixture)
+
+TEST_F(BTreeStressTest, basic_lower_bound)
{
- f.insert(1);
- f.remove(2);
- f.insert(1);
- f.insert(5);
- f.insert(4);
- f.remove(3);
- f.remove(5);
- f.commit();
- auto itr = f._tree.getFrozenView().lowerBound(3);
+ insert(1);
+ remove(2);
+ insert(1);
+ insert(5);
+ insert(4);
+ remove(3);
+ remove(5);
+ commit();
+ auto itr = _tree.getFrozenView().lowerBound(3);
EXPECT_TRUE(itr.valid());
- EXPECT_EQUAL(4u, itr.getKey());
+ EXPECT_EQ(4u, itr.getKey());
}
-TEST_F("Test single threaded lower_bound reader without updates", Fixture)
+TEST_F(BTreeStressTest, single_lower_bound_reader_without_updates)
{
- f._reportWork = true;
- f.writeWork(10);
- f._stopRead = 0;
- f.readWork(10);
+ _reportWork = true;
+ writeWork(10);
+ _stopRead = false;
+ readWork(10);
}
-TEST_F("Test single threaded lower_bound reader during updates", Fixture)
+TEST_F(BTreeStressTest, single_lower_bound_reader_during_updates)
{
uint32_t cnt = 1000000;
- f._reportWork = true;
- f._writer.execute(makeLambdaTask([this, cnt]() { f.writeWork(cnt); }));
- f._readers.execute(makeLambdaTask([this]() { f.readWork(); }));
- f._writer.sync();
- f._readers.sync();
+ _reportWork = true;
+ _writer.execute(makeLambdaTask([this, cnt]() { writeWork(cnt); }));
+ _readers.execute(makeLambdaTask([this]() { readWork(); }));
+ _writer.sync();
+ _readers.sync();
}
-TEST_F("Test multithreaded lower_bound reader during updates", Fixture)
+TEST_F(BTreeStressTest, multiple_lower_bound_readers_during_updates)
{
uint32_t cnt = 1000000;
- f._reportWork = true;
- f._writer.execute(makeLambdaTask([this, cnt]() { f.writeWork(cnt); }));
- f._readers.execute(makeLambdaTask([this]() { f.readWork(); }));
- f._readers.execute(makeLambdaTask([this]() { f.readWork(); }));
- f._readers.execute(makeLambdaTask([this]() { f.readWork(); }));
- f._readers.execute(makeLambdaTask([this]() { f.readWork(); }));
- f._writer.sync();
- f._readers.sync();
+ _reportWork = true;
+ _writer.execute(makeLambdaTask([this, cnt]() { writeWork(cnt); }));
+ _readers.execute(makeLambdaTask([this]() { readWork(); }));
+ _readers.execute(makeLambdaTask([this]() { readWork(); }));
+ _readers.execute(makeLambdaTask([this]() { readWork(); }));
+ _readers.execute(makeLambdaTask([this]() { readWork(); }));
+ _writer.sync();
+ _readers.sync();
}
-TEST_MAIN() { TEST_RUN_ALL(); }
+GTEST_MAIN_RUN_ALL_TESTS()