summaryrefslogtreecommitdiffstats
path: root/test-connectionmanagement_hh.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 21:11:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 21:11:59 +0000
commit3cd01b932e1c85394272ae64fae67ebeda92fb00 (patch)
treec5a3115d710afc1879ddea5349362a2bc651733c /test-connectionmanagement_hh.cc
parentInitial commit. (diff)
downloaddnsdist-3cd01b932e1c85394272ae64fae67ebeda92fb00.tar.xz
dnsdist-3cd01b932e1c85394272ae64fae67ebeda92fb00.zip
Adding upstream version 1.8.3.upstream/1.8.3
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'test-connectionmanagement_hh.cc')
-rw-r--r--test-connectionmanagement_hh.cc94
1 files changed, 94 insertions, 0 deletions
diff --git a/test-connectionmanagement_hh.cc b/test-connectionmanagement_hh.cc
new file mode 100644
index 0000000..8320518
--- /dev/null
+++ b/test-connectionmanagement_hh.cc
@@ -0,0 +1,94 @@
+
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+
+#include "connection-management.hh"
+
+BOOST_AUTO_TEST_SUITE(connectionmanagement_hh)
+
+BOOST_AUTO_TEST_CASE(test_ConnectionManagementEnabled) {
+ size_t maxConns = 10;
+
+ ConcurrentConnectionManager manager(maxConns);
+
+ for (size_t idx = 0; idx < maxConns; idx++) {
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ }
+
+ /* we are full */
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ manager.releaseConnection();
+ /* we can register one additional connection now that we released one */
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ /* but not two */
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ /* raise the number of slots */
+ maxConns = 12;
+ manager.setMaxConcurrentConnections(maxConns);
+ BOOST_CHECK_EQUAL(manager.getMaxConcurrentConnections(), maxConns);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ /* release everything */
+ for (size_t idx = 0; idx < maxConns; idx++) {
+ manager.releaseConnection();
+ }
+
+ /* decrease the number of slots */
+ maxConns = 2;
+ manager.setMaxConcurrentConnections(maxConns);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ /* decrease the number of slots with some connections still registered */
+ maxConns = 1;
+ manager.setMaxConcurrentConnections(maxConns);
+
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+ for (size_t idx = 0; idx < 2; idx++) {
+ manager.releaseConnection();
+ }
+
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+}
+
+BOOST_AUTO_TEST_CASE(test_ConnectionManagementDisabledThenEnabled) {
+ /* 0 means no limit */
+ size_t maxConns = 0;
+ ConcurrentConnectionManager manager(maxConns);
+
+ for (size_t idx = 0; idx < 10; idx++) {
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ }
+
+ /* set a limit to 5 connections */
+ maxConns = 5;
+ manager.setMaxConcurrentConnections(maxConns);
+ /* we can no longer register new sessions */
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ /* release all of them */
+ for (size_t idx = 0; idx < 10; idx++) {
+ manager.releaseConnection();
+ }
+
+ /* register as many as we now can */
+ for (size_t idx = 0; idx < maxConns; idx++) {
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+ }
+
+ BOOST_CHECK_EQUAL(manager.registerConnection(), false);
+
+ manager.releaseConnection();
+
+ BOOST_CHECK_EQUAL(manager.registerConnection(), true);
+}
+
+BOOST_AUTO_TEST_SUITE_END()