summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc')
-rw-r--r--src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc b/src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc
new file mode 100644
index 0000000..3d9de82
--- /dev/null
+++ b/src/lib/dhcpsrv/tests/cfg_multi_threading_unittest.cc
@@ -0,0 +1,117 @@
+// Copyright (C) 2020-2021 Internet Systems Consortium, Inc. ("ISC")
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#include <config.h>
+
+#include <cc/data.h>
+#include <dhcpsrv/cfg_multi_threading.h>
+#include <util/multi_threading_mgr.h>
+
+#include <gtest/gtest.h>
+
+using namespace isc::data;
+using namespace isc::dhcp;
+using namespace isc::util;
+
+namespace {
+
+/// @brief Test fixture class for @c MultiThreadingConfigParser
+class CfgMultiThreadingTest : public ::testing::Test {
+public:
+
+ /// @brief Constructor
+ CfgMultiThreadingTest() = default;
+
+ /// @brief Destructor
+ virtual ~CfgMultiThreadingTest() = default;
+
+protected:
+
+ /// @brief Setup for each test.
+ ///
+ /// Clears the configuration in the @c MultiThreadingMgr.
+ virtual void SetUp();
+
+ /// @brief Cleans up after each test.
+ ///
+ /// Clears the configuration in the @c MultiThreadingMgr.
+ virtual void TearDown();
+};
+
+void
+CfgMultiThreadingTest::SetUp() {
+ MultiThreadingMgr::instance().apply(false, 0, 0);
+}
+
+void
+CfgMultiThreadingTest::TearDown() {
+ MultiThreadingMgr::instance().apply(false, 0 , 0);
+}
+
+/// @brief Verifies that extracting multi threading settings works
+TEST_F(CfgMultiThreadingTest, extract) {
+ bool enabled = false;
+ uint32_t thread_count = 0;
+ uint32_t queue_size = 0;
+ std::string content_json =
+ "{"
+ " \"enable-multi-threading\": true,\n"
+ " \"thread-pool-size\": 4,\n"
+ " \"packet-queue-size\": 64\n"
+ "}";
+ ConstElementPtr param;
+ ASSERT_NO_THROW(param = Element::fromJSON(content_json))
+ << "invalid context_json, test is broken";
+ ASSERT_NO_THROW(CfgMultiThreading::extract(param, enabled, thread_count,
+ queue_size));
+ EXPECT_EQ(enabled, true);
+ EXPECT_EQ(thread_count, 4);
+ EXPECT_EQ(queue_size, 64);
+
+ content_json = "{}";
+ ASSERT_NO_THROW(param = Element::fromJSON(content_json))
+ << "invalid context_json, test is broken";
+ //check empty config
+ ASSERT_NO_THROW(CfgMultiThreading::extract(param, enabled, thread_count,
+ queue_size));
+ EXPECT_EQ(enabled, false);
+ EXPECT_EQ(thread_count, 0);
+ EXPECT_EQ(queue_size, 0);
+
+ enabled = true;
+ thread_count = 4;
+ queue_size = 64;
+ // check empty data
+ ASSERT_NO_THROW(CfgMultiThreading::extract(ConstElementPtr(), enabled,
+ thread_count, queue_size));
+ EXPECT_EQ(enabled, false);
+ EXPECT_EQ(thread_count, 0);
+ EXPECT_EQ(queue_size, 0);
+}
+
+/// @brief Verifies that applying multi threading settings works
+TEST_F(CfgMultiThreadingTest, apply) {
+ EXPECT_FALSE(MultiThreadingMgr::instance().getMode());
+ EXPECT_EQ(MultiThreadingMgr::instance().getThreadPoolSize(), 0);
+ EXPECT_EQ(MultiThreadingMgr::instance().getPacketQueueSize(), 0);
+ EXPECT_EQ(MultiThreadingMgr::instance().getThreadPool().getMaxQueueSize(), 0);
+ std::string content_json =
+ "{"
+ " \"enable-multi-threading\": true,\n"
+ " \"thread-pool-size\": 4,\n"
+ " \"packet-queue-size\": 64\n"
+ "}";
+ ConstElementPtr param;
+ ASSERT_NO_THROW(param = Element::fromJSON(content_json))
+ << "invalid context_json, test is broken";
+ CfgMultiThreading::apply(param);
+ EXPECT_TRUE(MultiThreadingMgr::instance().getMode());
+ EXPECT_EQ(MultiThreadingMgr::instance().getThreadPoolSize(), 4);
+ EXPECT_EQ(MultiThreadingMgr::instance().getPacketQueueSize(), 64);
+ EXPECT_EQ(MultiThreadingMgr::instance().getThreadPool().getMaxQueueSize(), 64);
+}
+
+} // namespace