diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-12-09 15:41:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-09 15:41:44 +0100 |
commit | 820ae9a634cf02652a0100b50efc3cc663731428 (patch) | |
tree | 46eadf552c117707659813650168d5c7c2b40c62 /searchcore/src/tests/proton | |
parent | c21de34754d5dcdd2db84ece9144beab7b961d81 (diff) | |
parent | e0e786a00cb20f10ce4facf542cf5cd89136d193 (diff) |
Merge pull request #25198 from vespa-engine/geirst/more-robust-initialization-of-proton-components
Make initialization of proton components more robust regarding resour…
Diffstat (limited to 'searchcore/src/tests/proton')
2 files changed, 73 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/server/initialize_threads_calculator/CMakeLists.txt b/searchcore/src/tests/proton/server/initialize_threads_calculator/CMakeLists.txt new file mode 100644 index 00000000000..e3ce152384c --- /dev/null +++ b/searchcore/src/tests/proton/server/initialize_threads_calculator/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(searchcore_initialize_threads_calculator_test_app TEST + SOURCES + initialize_threads_calculator_test.cpp + DEPENDS + searchcore_server + GTest::GTest +) +vespa_add_test(NAME searchcore_initialize_threads_calculator_test_app COMMAND searchcore_initialize_threads_calculator_test_app) diff --git a/searchcore/src/tests/proton/server/initialize_threads_calculator/initialize_threads_calculator_test.cpp b/searchcore/src/tests/proton/server/initialize_threads_calculator/initialize_threads_calculator_test.cpp new file mode 100644 index 00000000000..7aad69076ca --- /dev/null +++ b/searchcore/src/tests/proton/server/initialize_threads_calculator/initialize_threads_calculator_test.cpp @@ -0,0 +1,64 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/searchcore/proton/server/initialize_threads_calculator.h> +#include <vespa/searchlib/test/directory_handler.h> +#include <vespa/vespalib/gtest/gtest.h> +#include <vespa/vespalib/util/threadstackexecutor.h> + +using namespace proton; +using vespalib::ThreadStackExecutor; + +class InitializeThreadsCalculatorTest : public search::test::DirectoryHandler, public testing::Test { +public: + InitializeThreadsCalculatorTest() : DirectoryHandler("tmp") {} +}; + +void +expect_successful_init(uint32_t exp_threads) +{ + InitializeThreadsCalculator i("tmp", 9); + EXPECT_EQ(exp_threads, i.num_threads()); + EXPECT_TRUE(i.threads().get() != nullptr); + EXPECT_EQ(exp_threads, dynamic_cast<const ThreadStackExecutor&>(*i.threads()).getNumThreads()); + i.init_done(); + EXPECT_TRUE(i.threads().get() == nullptr); +} + +void +expect_aborted_init(uint32_t exp_threads, uint32_t cfg_threads = 9) +{ + InitializeThreadsCalculator i("tmp", cfg_threads); + EXPECT_EQ(exp_threads, i.num_threads()); + EXPECT_TRUE(i.threads().get() != nullptr); + EXPECT_EQ(exp_threads, dynamic_cast<const ThreadStackExecutor&>(*i.threads()).getNumThreads()); +} + +TEST_F(InitializeThreadsCalculatorTest, initialize_threads_unchanged_when_init_is_successful) +{ + expect_successful_init(9); + // The previous init was successful, + // so we still use the configured number of initialize threads. + expect_successful_init(9); +} + +TEST_F(InitializeThreadsCalculatorTest, initialize_threads_cut_in_half_when_init_is_aborted) +{ + expect_aborted_init(9); + expect_aborted_init(4); + expect_aborted_init(2); + expect_aborted_init(1); + expect_aborted_init(1); +} + +TEST_F(InitializeThreadsCalculatorTest, zero_initialize_threads_is_special) +{ + { + InitializeThreadsCalculator i("tmp", 0); + EXPECT_EQ(0, i.num_threads()); + EXPECT_TRUE(i.threads().get() == nullptr); + } + expect_aborted_init(1, 0); + expect_aborted_init(1, 0); +} + +GTEST_MAIN_RUN_ALL_TESTS() |