diff options
author | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-05-18 11:28:21 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@yahoo-inc.com> | 2017-05-18 11:28:21 +0000 |
commit | 22b9177d83c8b29be8196e99245e197283e31918 (patch) | |
tree | 65cba901e76f1b32fbc251e69a8e9f545ddb7f6c /searchcore | |
parent | 480270b558640b0bc5f4d63f64cb0b36a85a85fc (diff) |
Add unit test for shrink lid space flush target.
Diffstat (limited to 'searchcore')
5 files changed, 138 insertions, 0 deletions
diff --git a/searchcore/CMakeLists.txt b/searchcore/CMakeLists.txt index 4fc000e5a49..2a0ea6c7cb3 100644 --- a/searchcore/CMakeLists.txt +++ b/searchcore/CMakeLists.txt @@ -103,6 +103,7 @@ vespa_define_module( src/tests/proton/feedtoken src/tests/proton/flushengine src/tests/proton/flushengine/prepare_restart_flush_strategy + src/tests/proton/flushengine/shrink_lid_space_flush_target src/tests/proton/index src/tests/proton/index/index_writer src/tests/proton/initializer diff --git a/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/CMakeLists.txt b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/CMakeLists.txt new file mode 100644 index 00000000000..8a917ba8e29 --- /dev/null +++ b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_flushengine_shrink_lid_space_flush_target_test_app TEST + SOURCES + shrink_lid_space_flush_target_test.cpp + DEPENDS + searchcorespi + searchcore_flushengine +) +vespa_add_test( + NAME searchcore_flushengine_shrink_lid_space_flush_target_test_app + COMMAND searchcore_flushengine_shrink_lid_space_flush_target_test_app +) diff --git a/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/DESC b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/DESC new file mode 100644 index 00000000000..e8cb3013c29 --- /dev/null +++ b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/DESC @@ -0,0 +1 @@ +ShrinkLidSpaceFlushTarget test. Take a look at shrink_lid_space_flush_target_test.cpp for details. diff --git a/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/FILES b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/FILES new file mode 100644 index 00000000000..54ff425acdd --- /dev/null +++ b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/FILES @@ -0,0 +1 @@ +shrink_lid_space_flush_target_test.cpp diff --git a/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/shrink_lid_space_flush_target_test.cpp b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/shrink_lid_space_flush_target_test.cpp new file mode 100644 index 00000000000..a7795477aa7 --- /dev/null +++ b/searchcore/src/tests/proton/flushengine/shrink_lid_space_flush_target/shrink_lid_space_flush_target_test.cpp @@ -0,0 +1,123 @@ +// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include <vespa/fastos/fastos.h> +#include <vespa/vespalib/testkit/testapp.h> + +#include <vespa/searchcore/proton/flushengine/shrink_lid_space_flush_target.h> +#include <vespa/searchlib/common/i_compactable_lid_space.h> + +using namespace proton; +using search::SerialNum; +using searchcorespi::IFlushTarget; + +bool validTask(const std::unique_ptr<searchcorespi::FlushTask> &task) +{ + return static_cast<bool>(task); +} + +class MyLidSpace : public search::common::ICompactableLidSpace +{ + bool _canShrink; + size_t _canFree; +public: + MyLidSpace() + : _canShrink(true), + _canFree(16) + { + } + virtual ~MyLidSpace() override {} + + virtual void compactLidSpace(uint32_t wantedDocLidLimit) override { + (void) wantedDocLidLimit; + } + + virtual bool canShrinkLidSpace() const override { + return _canShrink; + } + + virtual size_t getEstimatedShrinkLidSpaceGain() const override { + return _canShrink ? _canFree : 0; + } + + virtual void shrinkLidSpace() override { + if (_canShrink) { + _canFree = 0; + _canShrink = false; + } + } + void setCanShrink(bool canShrink) { _canShrink = canShrink; } + void setCanFree(size_t canFree) { _canFree = canFree; } +}; + +struct Fixture +{ + std::shared_ptr<MyLidSpace> _lidSpace; + std::shared_ptr<ShrinkLidSpaceFlushTarget> _ft; + Fixture() + : _lidSpace(std::make_shared<MyLidSpace>()), + _ft(std::make_shared<ShrinkLidSpaceFlushTarget>("name", + IFlushTarget::Type::GC, + IFlushTarget::Component::ATTRIBUTE, + 10, + IFlushTarget::Time(), + _lidSpace)) + { + } + + ~Fixture() { } +}; + +TEST_F("require that flush target returns estimated memory gain", Fixture) +{ + auto memoryGain = f._ft->getApproxMemoryGain(); + EXPECT_EQUAL(16, memoryGain.gain()); + EXPECT_EQUAL(10u, f._ft->getFlushedSerialNum()); + EXPECT_EQUAL(IFlushTarget::Time(), f._ft->getLastFlushTime()); +} + +TEST_F("require that flush target returns no estimated memory gain when not able to flush", Fixture) +{ + f._lidSpace->setCanShrink(false); + auto memoryGain = f._ft->getApproxMemoryGain(); + EXPECT_EQUAL(0, memoryGain.gain()); +} + +TEST_F("require that flush target returns no estimated memory gain right after shrink", Fixture) +{ + auto task = f._ft->initFlush(20); + EXPECT_TRUE(validTask(task)); + task->run(); + auto memoryGain = f._ft->getApproxMemoryGain(); + EXPECT_EQUAL(0, memoryGain.gain()); + EXPECT_EQUAL(20u, f._ft->getFlushedSerialNum()); + EXPECT_NOT_EQUAL(IFlushTarget::Time(), f._ft->getLastFlushTime()); +} + +TEST_F("require that flush target returns no task when not able to flush", Fixture) +{ + f._lidSpace->setCanShrink(false); + auto task = f._ft->initFlush(20); + EXPECT_FALSE(validTask(task)); + EXPECT_EQUAL(20u, f._ft->getFlushedSerialNum()); + EXPECT_NOT_EQUAL(IFlushTarget::Time(), f._ft->getLastFlushTime()); +} + +TEST_F("require that flush target returns valid task when able to flush again", Fixture) +{ + f._lidSpace->setCanShrink(false); + auto task = f._ft->initFlush(20); + EXPECT_FALSE(validTask(task)); + EXPECT_EQUAL(20u, f._ft->getFlushedSerialNum()); + EXPECT_NOT_EQUAL(IFlushTarget::Time(), f._ft->getLastFlushTime()); + f._lidSpace->setCanShrink(true); + auto memoryGain = f._ft->getApproxMemoryGain(); + EXPECT_EQUAL(16, memoryGain.gain()); + task = f._ft->initFlush(20); + EXPECT_TRUE(validTask(task)); + task->run(); + EXPECT_EQUAL(20u, f._ft->getFlushedSerialNum()); +} + +TEST_MAIN() +{ + TEST_RUN_ALL(); +} |