diff options
Diffstat (limited to 'searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp')
-rw-r--r-- | searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp | 79 |
1 files changed, 61 insertions, 18 deletions
diff --git a/searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp b/searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp index 8745a4ffeaa..3fc80cfa5c5 100644 --- a/searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp +++ b/searchcore/src/tests/proton/attribute/attributes_state_explorer/attributes_state_explorer_test.cpp @@ -7,10 +7,10 @@ #include <vespa/searchcore/proton/test/attribute_vectors.h> #include <vespa/searchlib/index/dummyfileheadercontext.h> #include <vespa/searchlib/test/directory_handler.h> -#include <vespa/vespalib/test/insertion_operators.h> -#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/vespalib/data/slime/slime.h> +#include <vespa/vespalib/gtest/gtest.h> +#include <vespa/vespalib/util/sequencedtaskexecutor.h> #include <vespa/vespalib/util/foreground_thread_executor.h> -#include <vespa/vespalib/util/foregroundtaskexecutor.h> #include <vespa/log/log.h> LOG_SETUP("attributes_state_explorer_test"); @@ -18,64 +18,107 @@ LOG_SETUP("attributes_state_explorer_test"); using namespace proton; using namespace proton::test; using search::AttributeVector; -using vespalib::ForegroundTaskExecutor; +using search::DictionaryConfig; using vespalib::ForegroundThreadExecutor; +using vespalib::ISequencedTaskExecutor; +using vespalib::SequencedTaskExecutor; +using vespalib::Slime; using search::TuneFileAttributes; using search::index::DummyFileHeaderContext; using search::test::DirectoryHandler; const vespalib::string TEST_DIR = "test_output"; -struct Fixture +namespace { +VESPA_THREAD_STACK_TAG(test_executor) +} + +struct AttributesStateExplorerTest : public ::testing::Test { DirectoryHandler _dirHandler; DummyFileHeaderContext _fileHeaderContext; - ForegroundTaskExecutor _attributeFieldWriter; + std::unique_ptr<ISequencedTaskExecutor> _attribute_field_writer; ForegroundThreadExecutor _shared; HwInfo _hwInfo; AttributeManager::SP _mgr; AttributeManagerExplorer _explorer; - Fixture() + AttributesStateExplorerTest() : _dirHandler(TEST_DIR), _fileHeaderContext(), - _attributeFieldWriter(), + _attribute_field_writer(SequencedTaskExecutor::create(test_executor, 1)), _shared(), _hwInfo(), _mgr(new AttributeManager(TEST_DIR, "test.subdb", TuneFileAttributes(), _fileHeaderContext, - _attributeFieldWriter, + *_attribute_field_writer, _shared, _hwInfo)), _explorer(_mgr) { addAttribute("regular"); addExtraAttribute("extra"); + add_fast_search_attribute("btree", DictionaryConfig::Type::BTREE); + add_fast_search_attribute("hybrid", DictionaryConfig::Type::BTREE_AND_HASH); + add_fast_search_attribute("hash", DictionaryConfig::Type::HASH); } void addAttribute(const vespalib::string &name) { _mgr->addAttribute({name, AttributeUtils::getInt32Config()}, 1); } + void add_fast_search_attribute(const vespalib::string &name, + DictionaryConfig::Type dictionary_type) { + search::attribute::Config cfg = AttributeUtils::getInt32Config(); + cfg.setFastSearch(true); + cfg.set_dictionary_config(search::DictionaryConfig(dictionary_type)); + _mgr->addAttribute({name, cfg}, 1); + } void addExtraAttribute(const vespalib::string &name) { _mgr->addExtraAttribute(createInt32Attribute(name)); } + Slime explore_attribute(const vespalib::string &name) { + Slime result; + vespalib::slime::SlimeInserter inserter(result); + _explorer.get_child(name)->get_state(inserter, true); + return result; + } + }; typedef std::vector<vespalib::string> StringVector; -TEST_F("require that attributes are exposed as children names", Fixture) +TEST_F(AttributesStateExplorerTest, require_that_attributes_are_exposed_as_children_names) { - StringVector children = f._explorer.get_children_names(); + StringVector children = _explorer.get_children_names(); std::sort(children.begin(), children.end()); - EXPECT_EQUAL(StringVector({"extra", "regular"}), children); + EXPECT_EQ(StringVector({"btree", "extra", "hash", "hybrid", "regular"}), children); } -TEST_F("require that attributes are explorable", Fixture) +TEST_F(AttributesStateExplorerTest, require_that_attributes_are_explorable) { - EXPECT_TRUE(f._explorer.get_child("regular").get() != nullptr); - EXPECT_TRUE(f._explorer.get_child("extra").get() != nullptr); - EXPECT_TRUE(f._explorer.get_child("not").get() == nullptr); + EXPECT_TRUE(_explorer.get_child("regular").get() != nullptr); + EXPECT_TRUE(_explorer.get_child("extra").get() != nullptr); + EXPECT_TRUE(_explorer.get_child("not").get() == nullptr); } -TEST_MAIN() +TEST_F(AttributesStateExplorerTest, require_that_dictionary_memory_usage_is_reported) { - TEST_RUN_ALL(); + { + auto slime = explore_attribute("btree"); + auto& dictionary = slime.get()["enumStore"]["dictionary"]; + EXPECT_LT(0, dictionary["btreeMemoryUsage"]["used"].asLong()); + EXPECT_EQ(0, dictionary["hashMemoryUsage"]["used"].asLong()); + } + { + auto slime = explore_attribute("hash"); + auto& dictionary = slime.get()["enumStore"]["dictionary"]; + EXPECT_EQ(0, dictionary["btreeMemoryUsage"]["used"].asLong()); + EXPECT_LT(0, dictionary["hashMemoryUsage"]["used"].asLong()); + } + { + auto slime = explore_attribute("hybrid"); + auto& dictionary = slime.get()["enumStore"]["dictionary"]; + EXPECT_LT(0, dictionary["btreeMemoryUsage"]["used"].asLong()); + EXPECT_LT(0, dictionary["hashMemoryUsage"]["used"].asLong()); + } } + +GTEST_MAIN_RUN_ALL_TESTS() |