summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-12-09 15:41:44 +0100
committerGitHub <noreply@github.com>2022-12-09 15:41:44 +0100
commit820ae9a634cf02652a0100b50efc3cc663731428 (patch)
tree46eadf552c117707659813650168d5c7c2b40c62 /searchcore/src/tests/proton
parentc21de34754d5dcdd2db84ece9144beab7b961d81 (diff)
parente0e786a00cb20f10ce4facf542cf5cd89136d193 (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')
-rw-r--r--searchcore/src/tests/proton/server/initialize_threads_calculator/CMakeLists.txt9
-rw-r--r--searchcore/src/tests/proton/server/initialize_threads_calculator/initialize_threads_calculator_test.cpp64
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()