summaryrefslogtreecommitdiffstats
path: root/test-connectionmanagement_hh.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test-connectionmanagement_hh.cc')
-rw-r--r--test-connectionmanagement_hh.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/test-connectionmanagement_hh.cc b/test-connectionmanagement_hh.cc
new file mode 100644
index 0000000..34432f2
--- /dev/null
+++ b/test-connectionmanagement_hh.cc
@@ -0,0 +1,93 @@
+
+#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.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()