mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-14 00:42:53 +00:00
Replaced gtest by Boost.Test
This commit is contained in:
@@ -14,137 +14,131 @@ using boost::mysql::error_code;
|
||||
using boost::mysql::error_info;
|
||||
using boost::mysql::errc;
|
||||
using boost::mysql::prepared_statement;
|
||||
using boost::mysql::socket_connection;
|
||||
using boost::asio::ip::tcp;
|
||||
|
||||
namespace
|
||||
{
|
||||
BOOST_AUTO_TEST_SUITE(test_execute_statement)
|
||||
|
||||
template <typename Stream>
|
||||
struct ExecuteStatementTest : public NetworkTest<Stream>
|
||||
prepared_statement<Stream> do_prepare(
|
||||
network_functions<Stream>* net,
|
||||
socket_connection<Stream>& conn,
|
||||
boost::string_view stmt
|
||||
)
|
||||
{
|
||||
network_functions<Stream>* net {this->GetParam().net};
|
||||
auto res = net->prepare_statement(conn, stmt);
|
||||
res.validate_no_error();
|
||||
return std::move(res.value);
|
||||
}
|
||||
|
||||
ExecuteStatementTest()
|
||||
{
|
||||
this->connect(this->GetParam().ssl);
|
||||
}
|
||||
// Iterator version
|
||||
BOOST_MYSQL_NETWORK_TEST(iterator_ok_no_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
std::forward_list<value> params;
|
||||
auto stmt = do_prepare(sample.net, this->conn, "SELECT * FROM empty_table");
|
||||
auto result = sample.net->execute_statement(stmt, params.begin(), params.end()); // execute
|
||||
result.validate_no_error();
|
||||
BOOST_TEST(result.value.valid());
|
||||
}
|
||||
|
||||
prepared_statement<Stream> do_prepare(boost::string_view stmt)
|
||||
{
|
||||
auto res = this->GetParam().net->prepare_statement(this->conn, stmt);
|
||||
res.validate_no_error();
|
||||
return std::move(res.value);
|
||||
}
|
||||
BOOST_MYSQL_NETWORK_TEST(iterator_ok_with_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
std::forward_list<value> params { value("item"), value(42) };
|
||||
auto stmt = do_prepare(sample.net, this->conn,
|
||||
"SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_no_error();
|
||||
BOOST_TEST(result.value.valid());
|
||||
}
|
||||
|
||||
// Iterator version
|
||||
void Iterator_OkNoParams()
|
||||
{
|
||||
std::forward_list<value> params;
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table");
|
||||
auto result = net->execute_statement(stmt, params.begin(), params.end()); // execute
|
||||
result.validate_no_error();
|
||||
EXPECT_TRUE(result.value.valid());
|
||||
}
|
||||
BOOST_MYSQL_NETWORK_TEST(iterator_mismatched_num_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
std::forward_list<value> params { value("item") };
|
||||
auto stmt = do_prepare(sample.net, this->conn,
|
||||
"SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_error(errc::wrong_num_params,
|
||||
{"param", "2", "1", "statement", "execute"});
|
||||
BOOST_TEST(!result.value.valid());
|
||||
}
|
||||
|
||||
void Iterator_OkWithParams()
|
||||
{
|
||||
std::forward_list<value> params { value("item"), value(42) };
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_no_error();
|
||||
EXPECT_TRUE(result.value.valid());
|
||||
}
|
||||
BOOST_MYSQL_NETWORK_TEST(iterator_server_error, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
this->start_transaction();
|
||||
std::forward_list<value> params { value("f0"), value("bad_date") };
|
||||
auto stmt = do_prepare(sample.net, this->conn,
|
||||
"INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_error(errc::truncated_wrong_value,
|
||||
{"field_date", "bad_date", "incorrect date value"});
|
||||
BOOST_TEST(!result.value.valid());
|
||||
}
|
||||
|
||||
void Iterator_MismatchedNumParams()
|
||||
{
|
||||
std::forward_list<value> params { value("item") };
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_error(errc::wrong_num_params, {"param", "2", "1", "statement", "execute"});
|
||||
EXPECT_FALSE(result.value.valid());
|
||||
}
|
||||
// Container version
|
||||
BOOST_MYSQL_NETWORK_TEST(container_ok_no_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
auto stmt = do_prepare(sample.net, this->conn, "SELECT * FROM empty_table");
|
||||
auto result = sample.net->execute_statement(stmt, std::vector<value>()); // execute
|
||||
result.validate_no_error();
|
||||
BOOST_TEST(result.value.valid());
|
||||
}
|
||||
|
||||
void Iterator_ServerError()
|
||||
{
|
||||
this->start_transaction();
|
||||
std::forward_list<value> params { value("f0"), value("bad_date") };
|
||||
auto stmt = do_prepare("INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
|
||||
auto result = net->execute_statement(stmt, params.begin(), params.end());
|
||||
result.validate_error(errc::truncated_wrong_value, {"field_date", "bad_date", "incorrect date value"});
|
||||
EXPECT_FALSE(result.value.valid());
|
||||
}
|
||||
|
||||
// Container version
|
||||
void Container_OkNoParams()
|
||||
{
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table");
|
||||
auto result = net->execute_statement(stmt, std::vector<value>()); // execute
|
||||
result.validate_no_error();
|
||||
EXPECT_TRUE(result.value.valid());
|
||||
}
|
||||
|
||||
void Container_OkWithParams()
|
||||
{
|
||||
std::vector<value> params { value("item"), value(42) };
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = net->execute_statement(stmt, params);
|
||||
result.validate_no_error();
|
||||
EXPECT_TRUE(result.value.valid());
|
||||
}
|
||||
|
||||
void Container_MismatchedNumParams()
|
||||
{
|
||||
std::vector<value> params { value("item") };
|
||||
auto stmt = do_prepare("SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = net->execute_statement(stmt, params);
|
||||
result.validate_error(errc::wrong_num_params, {"param", "2", "1", "statement", "execute"});
|
||||
EXPECT_FALSE(result.value.valid());
|
||||
}
|
||||
|
||||
void Container_ServerError()
|
||||
{
|
||||
this->start_transaction();
|
||||
auto stmt = do_prepare("INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
|
||||
auto result = net->execute_statement(stmt, makevalues("f0", "bad_date"));
|
||||
result.validate_error(errc::truncated_wrong_value, {"field_date", "bad_date", "incorrect date value"});
|
||||
EXPECT_FALSE(result.value.valid());
|
||||
}
|
||||
};
|
||||
|
||||
BOOST_MYSQL_NETWORK_TEST_SUITE(ExecuteStatementTest)
|
||||
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_OkNoParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_OkWithParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_MismatchedNumParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_ServerError)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_OkNoParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_OkWithParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_MismatchedNumParams)
|
||||
BOOST_MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_ServerError)
|
||||
BOOST_MYSQL_NETWORK_TEST(container_ok_with_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
auto stmt = do_prepare(sample.net, this->conn, "SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, make_value_vector("item", 42));
|
||||
result.validate_no_error();
|
||||
BOOST_TEST(result.value.valid());
|
||||
}
|
||||
|
||||
BOOST_MYSQL_NETWORK_TEST(container_mismatched_num_params, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
auto stmt = do_prepare(sample.net, this->conn,
|
||||
"SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, make_value_vector("item"));
|
||||
result.validate_error(errc::wrong_num_params,
|
||||
{"param", "2", "1", "statement", "execute"});
|
||||
BOOST_TEST(!result.value.valid());
|
||||
}
|
||||
|
||||
BOOST_MYSQL_NETWORK_TEST(container_server_error, network_fixture, network_ssl_gen)
|
||||
{
|
||||
this->connect(sample.ssl);
|
||||
this->start_transaction();
|
||||
auto stmt = do_prepare(sample.net, this->conn,
|
||||
"INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
|
||||
auto result = sample.net->execute_statement(stmt, make_value_vector("f0", "bad_date"));
|
||||
result.validate_error(errc::truncated_wrong_value,
|
||||
{"field_date", "bad_date", "incorrect date value"});
|
||||
BOOST_TEST(!result.value.valid());
|
||||
}
|
||||
|
||||
// Other containers
|
||||
struct ExecuteStatementOtherContainersTest : IntegTest<boost::asio::ip::tcp::socket>
|
||||
BOOST_FIXTURE_TEST_CASE(no_statement_params_variable, network_fixture<tcp::socket>)
|
||||
{
|
||||
ExecuteStatementOtherContainersTest()
|
||||
{
|
||||
connect(boost::mysql::ssl_mode::disable);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(ExecuteStatementOtherContainersTest, NoParams_CanUseNoStatementParamsVariable)
|
||||
{
|
||||
auto stmt = conn.prepare_statement("SELECT * FROM empty_table");
|
||||
this->connect(boost::mysql::ssl_mode::disable);
|
||||
auto stmt = this->conn.prepare_statement(
|
||||
"SELECT * FROM empty_table");
|
||||
auto result = stmt.execute(boost::mysql::no_statement_params);
|
||||
EXPECT_TRUE(result.valid());
|
||||
BOOST_TEST(result.valid());
|
||||
}
|
||||
|
||||
TEST_F(ExecuteStatementOtherContainersTest, CArray)
|
||||
BOOST_FIXTURE_TEST_CASE(c_array, network_fixture<tcp::socket>)
|
||||
{
|
||||
this->connect(boost::mysql::ssl_mode::disable);
|
||||
value arr [] = { value("hola"), value(10) };
|
||||
auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto stmt = this->conn.prepare_statement(
|
||||
"SELECT * FROM empty_table WHERE id IN (?, ?)");
|
||||
auto result = stmt.execute(arr);
|
||||
EXPECT_TRUE(result.valid());
|
||||
BOOST_TEST(result.valid());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END() // test_execute_statement
|
||||
|
||||
Reference in New Issue
Block a user