2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 12:52:17 +00:00

Extended tests to run under UNIX sockets

This commit is contained in:
ruben
2020-04-15 12:42:38 +01:00
parent e384e6cbaa
commit a7625831d4
12 changed files with 1163 additions and 911 deletions

View File

@@ -13,92 +13,119 @@ using boost::mysql::value;
using boost::mysql::error_code;
using boost::mysql::error_info;
using boost::mysql::errc;
using boost::mysql::tcp_resultset;
using boost::mysql::tcp_prepared_statement;
using boost::mysql::prepared_statement;
namespace
{
struct ExecuteStatementTest : public NetworkTest
template <typename Stream>
struct ExecuteStatementTest : public NetworkTest<Stream>
{
prepared_statement<Stream> do_prepare(std::string_view stmt)
{
auto res = this->GetParam().net->prepare_statement(this->conn, stmt);
res.validate_no_error();
return std::move(res.value);
}
auto do_execute(prepared_statement<Stream>& stmt, value_list_it first, value_list_it last)
{
return this->GetParam().net->execute_statement(stmt, first, last);
}
auto do_execute(prepared_statement<Stream>& stmt, const std::vector<value>& params)
{
return this->GetParam().net->execute_statement(stmt, params);
}
// Iterator version
void Iterator_OkNoParams()
{
std::forward_list<value> params;
auto stmt = do_prepare("SELECT * FROM empty_table");
auto result = do_execute(stmt, params.begin(), params.end()); // execute
result.validate_no_error();
EXPECT_TRUE(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 = do_execute(stmt, params.begin(), params.end());
result.validate_no_error();
EXPECT_TRUE(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 = do_execute(stmt, params.begin(), params.end());
result.validate_error(errc::wrong_num_params, {"param", "2", "1", "statement", "execute"});
EXPECT_FALSE(result.value.valid());
}
void Iterator_ServerError()
{
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 = do_execute(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 = do_execute(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 = do_execute(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 = do_execute(stmt, params);
result.validate_error(errc::wrong_num_params, {"param", "2", "1", "statement", "execute"});
EXPECT_FALSE(result.value.valid());
}
void Container_ServerError()
{
auto stmt = do_prepare("INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
auto result = do_execute(stmt, makevalues("f0", "bad_date"));
result.validate_error(errc::truncated_wrong_value, {"field_date", "bad_date", "incorrect date value"});
EXPECT_FALSE(result.value.valid());
}
};
// Iterator version
TEST_P(ExecuteStatementTest, Iterator_OkNoParams)
{
std::forward_list<value> params;
auto stmt = conn.prepare_statement("SELECT * FROM empty_table");
auto result = GetParam().net->execute_statement(stmt, params.begin(), params.end()); // execute
result.validate_no_error();
EXPECT_TRUE(result.value.valid());
}
MYSQL_NETWORK_TEST_SUITE2(ExecuteStatementTest);
TEST_P(ExecuteStatementTest, Iterator_OkWithParams)
{
std::forward_list<value> params { value("item"), value(42) };
auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id IN (?, ?)");
auto result = GetParam().net->execute_statement(stmt, params.begin(), params.end());
result.validate_no_error();
EXPECT_TRUE(result.value.valid());
}
MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_OkNoParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_OkWithParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_MismatchedNumParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Iterator_ServerError)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_OkNoParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_OkWithParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_MismatchedNumParams)
MYSQL_NETWORK_TEST(ExecuteStatementTest, Container_ServerError)
TEST_P(ExecuteStatementTest, Iterator_MismatchedNumParams)
{
std::forward_list<value> params { value("item") };
auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id IN (?, ?)");
auto result = GetParam().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());
}
TEST_P(ExecuteStatementTest, Iterator_ServerError)
{
std::forward_list<value> params { value("f0"), value("bad_date") };
auto stmt = conn.prepare_statement("INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
auto result = GetParam().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
TEST_P(ExecuteStatementTest, Container_OkNoParams)
{
auto stmt = conn.prepare_statement("SELECT * FROM empty_table");
auto result = GetParam().net->execute_statement(stmt, std::vector<value>()); // execute
result.validate_no_error();
EXPECT_TRUE(result.value.valid());
}
TEST_P(ExecuteStatementTest, Container_OkWithParams)
{
std::vector<value> params { value("item"), value(42) };
auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id IN (?, ?)");
auto result = GetParam().net->execute_statement(stmt, params);
result.validate_no_error();
EXPECT_TRUE(result.value.valid());
}
TEST_P(ExecuteStatementTest, Container_MismatchedNumParams)
{
std::vector<value> params { value("item") };
auto stmt = conn.prepare_statement("SELECT * FROM empty_table WHERE id IN (?, ?)");
auto result = GetParam().net->execute_statement(stmt, params);
result.validate_error(errc::wrong_num_params, {"param", "2", "1", "statement", "execute"});
EXPECT_FALSE(result.value.valid());
}
TEST_P(ExecuteStatementTest, Container_ServerError)
{
auto stmt = conn.prepare_statement("INSERT INTO inserts_table (field_varchar, field_date) VALUES (?, ?)");
auto result = GetParam().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());
}
MYSQL_NETWORK_TEST_SUITE(ExecuteStatementTest);
// Other containers
struct ExecuteStatementOtherContainersTest : IntegTestAfterHandshake {};
struct ExecuteStatementOtherContainersTest : IntegTestAfterHandshake<boost::asio::ip::tcp::socket> {};
TEST_F(ExecuteStatementOtherContainersTest, NoParams_CanUseNoStatementParamsVariable)
{