]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2688] New tests for invalid port number
authorMarcin Siodelski <marcin@isc.org>
Thu, 12 Jan 2023 16:52:15 +0000 (17:52 +0100)
committerAndrei Pavel <andrei@isc.org>
Thu, 13 Jul 2023 10:27:55 +0000 (13:27 +0300)
src/lib/database/database_connection.h
src/lib/database/testutils/schema.cc
src/lib/database/testutils/schema.h
src/lib/mysql/mysql_connection.cc
src/lib/mysql/tests/mysql_connection_unittest.cc
src/lib/pgsql/pgsql_connection.cc
src/lib/pgsql/tests/pgsql_connection_unittest.cc

index 881bfbac3da0460dcc4c47c87c78a70fcde6b500..f28f326745fd658adb7531fbcef262082f2c59f1 100644 (file)
@@ -68,6 +68,15 @@ public:
         isc::Exception(file, line, what) {}
 };
 
+/// @brief Invalid port number
+///
+/// Thrown when the port number specified for the database connection is invalid.
+class DbInvalidPort : public Exception {
+public:
+    DbInvalidPort(const char* file, size_t line, const char* what) :
+        isc::Exception(file, line, what) {}
+};
+
 /// @brief Invalid 'readonly' value specification.
 ///
 /// Thrown when the value of the 'readonly' boolean parameter is invalid.
index 80371e5abc71f002dc8b8436c0e956ca08d65aa5..b396b9ec455cbb39f12e6cd57345c8c2ff2bb84b 100644 (file)
@@ -25,6 +25,7 @@ const char* INVALID_NAME = "name=invalidname";
 const char* VALID_HOST = "host=localhost";
 const char* VALID_HOST_TCP = "host=127.0.0.1";
 const char* INVALID_HOST = "host=invalidhost";
+const char* INVALID_PORT_1 = "port=65536";
 const char* VALID_USER = "user=keatest";
 const char* VALID_READONLY_USER = "user=keatest_readonly";
 const char* VALID_SECURE_USER = "user=keatest_secure";
index 55c7b77864027ab66a74c528a0c12bc7610f9429..2c08bed334ab00484c0b15a855f2572cf3c3582a 100644 (file)
@@ -21,6 +21,7 @@ extern const char* INVALID_NAME;
 extern const char* VALID_HOST;
 extern const char* VALID_HOST_TCP;
 extern const char* INVALID_HOST;
+extern const char* INVALID_PORT_1;
 extern const char* VALID_USER;
 extern const char* VALID_READONLY_USER;
 extern const char* VALID_SECURE_USER;
index 1b1e4fc7dae5d9cd73ad95ce8aafefa5693ba4c1..9db0da5416cf695559199e014e6f3b8450b440b9 100644 (file)
@@ -65,7 +65,12 @@ MySqlConnection::openDatabase() {
     }
 
     unsigned int port = 0;
-    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+    try {
+        setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidPort, ex.what());
+    }
 
     const char* user = NULL;
     string suser;
index 46a8cb0abc7baa3e18cba559de406336706b7f52..a6d4bbde49ade53405b181fe641fd1dc5b1b80e6 100644 (file)
@@ -609,6 +609,16 @@ TEST_F(MySqlConnectionTest, transactions) {
     EXPECT_THROW(conn_.rollback(), isc::Unexpected);
 }
 
+// Tests that invalid port value causes an error.
+TEST_F(MySqlConnectionTest, portInvalid) {
+    std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_HOST_TCP, VALID_USER,
+                                            VALID_PASSWORD, INVALID_PORT_1);
+    MySqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.openDatabase(), DbInvalidPort);
+}
+
+
 // Tests that valid connection timeout is accepted.
 TEST_F(MySqlConnectionTest, connectionTimeout) {
     std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME,
index d7a08686c02b31b10c9ac7e6143154500e58c3bd..77b71260be31b9d32d9358752aaee1804801c370 100644 (file)
@@ -193,7 +193,12 @@ PgSqlConnection::getConnParameters() {
     dbconnparameters += "host = '" + shost + "'" ;
 
     unsigned int port = 0;
-    setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+    try {
+        setIntParameterValue("port", 0, numeric_limits<uint16_t>::max(), port);
+
+    } catch (const std::exception& ex) {
+        isc_throw(DbInvalidPort, ex.what());
+    }
 
     // Add port to connection parameters when not default.
     if (port > 0) {
index 897904a7ac9dc3cb42e801f458749f63631cac63..906b3fc3896af7cccac288d68cd9d6b74026b1ec 100644 (file)
@@ -563,6 +563,15 @@ TEST_F(PgSqlConnectionTest, savepoints) {
     ASSERT_NO_THROW_LOG(testSelect(three_rows, 0, 10));
 }
 
+// Tests that invalid port value causes an error.
+TEST_F(PgSqlConnectionTest, portInvalid) {
+    std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,
+                                            VALID_USER, VALID_PASSWORD,
+                                            INVALID_PORT_1);
+    PgSqlConnection conn(DatabaseConnection::parse(conn_str));
+    EXPECT_THROW(conn.getConnParameters(), DbInvalidPort);
+}
+
 // Tests that valid connection timeout is accepted.
 TEST_F(PgSqlConnectionTest, connectionTimeout) {
     std::string conn_str = connectionString(PGSQL_VALID_TYPE, VALID_NAME,