From fb41ef8ed51a059e908212772827d266b082bcd3 Mon Sep 17 00:00:00 2001 From: Andrei Pavel Date: Fri, 20 Jan 2023 22:41:53 +0200 Subject: [PATCH] [#2727] introduce HAVE_MYSQL_GET_OPTION MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Addresses error: mysql_connection_unittest.cc: In member function ‘virtual void {anonymous}::MySqlConnectionTest_connectionTimeout_Test::TestBody()’: mysql_connection_unittest.cc:633:77: error: ‘mysql_get_option’ was not declared in this scope EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout)); --- configure.ac | 22 +++++- .../mysql/tests/mysql_connection_unittest.cc | 70 ++++++++++--------- 2 files changed, 56 insertions(+), 36 deletions(-) diff --git a/configure.ac b/configure.ac index 3356a8c9e3..fac7847241 100644 --- a/configure.ac +++ b/configure.ac @@ -710,7 +710,7 @@ if test "$MYSQL_CONFIG" != "" ; then # Note that MYSQL is present in the config.h file AC_DEFINE([HAVE_MYSQL], [1], [MySQL is present]) - # Check is my_bool is defined. + # Check if my_bool is defined. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([#include const my_bool MLM_FALSE = 0;] @@ -719,9 +719,27 @@ if test "$MYSQL_CONFIG" != "" ; then AC_DEFINE([HAVE_MYSQL_MY_BOOL], [1], [MySQL uses my_bool])], [AC_MSG_RESULT([checking for MySQL my_bool... no])]) + # Check if mysql_get_option is defined. + AC_MSG_CHECKING([for MySQL mysql_get_option]) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [MYSQL handle; + unsigned int timeout; + mysql_get_option(&handle, MYSQL_OPT_CONNECT_TIMEOUT, &timeout);] + )], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_MYSQL_GET_OPTION], [true], [MySQL has mysql_get_option defined.])], + [AC_MSG_RESULT([no]) + AC_MSG_WARN([mysql_get_option program failed to build: + +$(cat conftest.cpp) + +$(cat conftest.err)])] + ) + CPPFLAGS=$CPPFLAGS_SAVED LIBS=$LIBS_SAVED - fi # Solaris puts FIONREAD in filio.h diff --git a/src/lib/mysql/tests/mysql_connection_unittest.cc b/src/lib/mysql/tests/mysql_connection_unittest.cc index a6d4bbde49..cc2b21d3ea 100644 --- a/src/lib/mysql/tests/mysql_connection_unittest.cc +++ b/src/lib/mysql/tests/mysql_connection_unittest.cc @@ -173,7 +173,6 @@ public: mysql_stmt_close(stmt); } - /// @brief Tests inserting and retrieving data from the database. /// /// In this test data carried in the bindings is inserted into the database. @@ -618,22 +617,6 @@ TEST_F(MySqlConnectionTest, portInvalid) { 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, - VALID_HOST_TCP, VALID_USER, - VALID_PASSWORD, VALID_TIMEOUT); - MySqlConnection conn(DatabaseConnection::parse(conn_str)); - ASSERT_NO_THROW_LOG(conn.openDatabase()); - - auto mysql = static_cast(conn.mysql_); - ASSERT_TRUE(mysql); - unsigned int timeout = 123; - EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout)); - EXPECT_EQ(10, timeout); -} - // Tests that invalid timeout value type causes an error. TEST_F(MySqlConnectionTest, connectionTimeoutInvalid) { std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, @@ -661,6 +644,41 @@ TEST_F(MySqlConnectionTest, connectionTimeoutInvalid3) { EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout); } +// Tests that an invalid read timeout causes an error. +TEST_F(MySqlConnectionTest, readTimeoutInvalid) { + std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, + VALID_HOST_TCP, VALID_USER, + VALID_PASSWORD, INVALID_READ_TIMEOUT_1); + MySqlConnection conn(DatabaseConnection::parse(conn_str)); + EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout); +} + +// Tests that an invalid write timeout causes an error. +TEST_F(MySqlConnectionTest, writeTimeoutInvalid) { + std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, + VALID_HOST_TCP, VALID_USER, + VALID_PASSWORD, INVALID_WRITE_TIMEOUT_1); + MySqlConnection conn(DatabaseConnection::parse(conn_str)); + EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout); +} + +#ifdef HAVE_MYSQL_GET_OPTION + +// Tests that valid connection timeout is accepted. +TEST_F(MySqlConnectionTest, connectionTimeout) { + std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, + VALID_HOST_TCP, VALID_USER, + VALID_PASSWORD, VALID_TIMEOUT); + MySqlConnection conn(DatabaseConnection::parse(conn_str)); + ASSERT_NO_THROW_LOG(conn.openDatabase()); + + auto mysql = static_cast(conn.mysql_); + ASSERT_TRUE(mysql); + unsigned int timeout = 123; + EXPECT_EQ(0, mysql_get_option(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout)); + EXPECT_EQ(10, timeout); +} + // Tests that a valid read timeout is accepted. TEST_F(MySqlConnectionTest, readTimeout) { std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, @@ -691,15 +709,6 @@ TEST_F(MySqlConnectionTest, readTimeoutZero) { EXPECT_EQ(0, timeout); } -// Tests that an invalid read timeout causes an error. -TEST_F(MySqlConnectionTest, readTimeoutInvalid) { - std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, - VALID_HOST_TCP, VALID_USER, - VALID_PASSWORD, INVALID_READ_TIMEOUT_1); - MySqlConnection conn(DatabaseConnection::parse(conn_str)); - EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout); -} - // Tests that a valid write timeout is accepted. TEST_F(MySqlConnectionTest, writeTimeout) { std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, @@ -730,14 +739,7 @@ TEST_F(MySqlConnectionTest, writeTimeoutZero) { EXPECT_EQ(0, timeout); } -// Tests that an invalid write timeout causes an error. -TEST_F(MySqlConnectionTest, writeTimeoutInvalid) { - std::string conn_str = connectionString(MYSQL_VALID_TYPE, VALID_NAME, - VALID_HOST_TCP, VALID_USER, - VALID_PASSWORD, INVALID_WRITE_TIMEOUT_1); - MySqlConnection conn(DatabaseConnection::parse(conn_str)); - EXPECT_THROW(conn.openDatabase(), DbInvalidTimeout); -} +#endif // HAVE_MYSQL_GET_OPTION TEST_F(MySqlConnectionWithPrimaryKeyTest, select) { select(); -- 2.47.2