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

statement unit tests

This commit is contained in:
Ruben Perez
2022-10-07 22:58:02 +02:00
parent 85922c438c
commit ec197e133c
4 changed files with 91 additions and 126 deletions

View File

@@ -26,7 +26,7 @@ public:
statement(const statement&) = delete;
statement(statement&& other) noexcept : statement_base(other) { other.reset(); }
statement& operator=(const statement&) = delete;
statement& operator=(statement&& rhs) noexcept { swap(std::move(rhs)); return *this; }
statement& operator=(statement&& rhs) noexcept { swap(rhs); return *this; }
~statement() = default;
using executor_type = typename Stream::executor_type;

View File

@@ -37,6 +37,9 @@ add_executable(
unit/detail/auxiliar/static_string.cpp
unit/detail/auxiliar/rows_iterator.cpp
unit/detail/auxiliar/field_type_traits.cpp
unit/detail/network_algorithms/read_one_row.cpp
unit/detail/network_algorithms/read_some_rows.cpp
unit/detail/network_algorithms/read_all_rows.cpp
unit/detail/protocol/capabilities.cpp
# unit/detail/protocol/date.cpp
unit/detail/protocol/null_bitmap_traits.cpp
@@ -45,10 +48,6 @@ add_executable(
unit/detail/protocol/deserialize_binary_field.cpp
unit/detail/protocol/deserialize_row.cpp
unit/detail/network_algorithms/read_one_row.cpp
unit/detail/network_algorithms/read_some_rows.cpp
unit/detail/network_algorithms/read_all_rows.cpp
unit/field_view.cpp
unit/field.cpp
unit/row_view.cpp
@@ -59,7 +58,7 @@ add_executable(
unit/metadata_collection_view.cpp
unit/error.cpp
unit/execute_params.cpp
# unit/prepared_statement.cpp
unit/statement.cpp
# unit/resultset.cpp
# unit/connection.cpp
unit/entry_point.cpp

View File

@@ -1,120 +0,0 @@
//
// Copyright (c) 2019-2022 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <boost/mysql/detail/protocol/channel.hpp>
#include <boost/mysql/tcp.hpp>
#include "test_common.hpp"
#include "test_stream.hpp"
#include <boost/mysql/statement_base.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/strand.hpp>
#include <boost/test/unit_test_suite.hpp>
using namespace boost::mysql::detail;
using boost::mysql::statement_base;
using chan_t = boost::mysql::detail::channel<boost::mysql::test::test_stream>;
using stmt_t = statement_base<boost::mysql::test::test_stream>;
BOOST_AUTO_TEST_SUITE(test_prepared_statement)
// default ctor
BOOST_AUTO_TEST_CASE(default_ctor)
{
stmt_t s;
BOOST_TEST(!s.valid());
}
// init ctor
BOOST_AUTO_TEST_CASE(init_ctor)
{
chan_t chan;
stmt_t s (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
BOOST_TEST(s.valid());
BOOST_TEST(s.id() == 10u);
BOOST_TEST(s.num_params() == 8u);
}
// move ctor
BOOST_AUTO_TEST_CASE(move_ctor_from_invalid)
{
stmt_t s1;
stmt_t s2 {std::move(s1)};
BOOST_TEST(!s1.valid());
BOOST_TEST(!s2.valid());
}
BOOST_AUTO_TEST_CASE(move_ctor_from_valid)
{
chan_t chan;
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
stmt_t s2 (std::move(s1));
BOOST_TEST(!s1.valid());
BOOST_TEST(s2.valid());
BOOST_TEST(s2.id() == 10u);
BOOST_TEST(s2.num_params() == 8u);
}
// move assign
BOOST_AUTO_TEST_CASE(move_assign_invalid_to_invalid)
{
stmt_t s1;
stmt_t s2;
s2 = std::move(s1);
BOOST_TEST(!s1.valid());
BOOST_TEST(!s2.valid());
}
BOOST_AUTO_TEST_CASE(move_assign_invalid_to_valid)
{
chan_t chan;
stmt_t s1;
stmt_t s2 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
s2 = std::move(s1);
BOOST_TEST(!s1.valid());
BOOST_TEST(!s2.valid());
}
BOOST_AUTO_TEST_CASE(move_assign_valid_to_invalid)
{
chan_t chan;
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
stmt_t s2;
s2 = std::move(s1);
BOOST_TEST(!s1.valid());
BOOST_TEST(s2.valid());
BOOST_TEST(s2.id() == 10u);
BOOST_TEST(s2.num_params() == 8u);
}
BOOST_AUTO_TEST_CASE(move_assign_valid_to_valid)
{
chan_t chan;
stmt_t s1 (chan, com_stmt_prepare_ok_packet{10, 9, 8, 7});
stmt_t s2 (chan, com_stmt_prepare_ok_packet{1, 2, 3, 4});
s2 = std::move(s1);
BOOST_TEST(!s1.valid());
BOOST_TEST(s2.valid());
BOOST_TEST(s2.id() == 10u);
BOOST_TEST(s2.num_params() == 8u);
}
// rebind executor
BOOST_AUTO_TEST_CASE(rebind_executor)
{
using other_executor = boost::asio::strand<boost::asio::io_context::executor_type>;
using rebound_type = boost::mysql::tcp_prepared_statement::rebind_executor<other_executor>::other;
using expected_type = boost::mysql::statement_base<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
other_executor
>
>;
BOOST_TEST((std::is_same<rebound_type, expected_type>::value));
}
BOOST_AUTO_TEST_SUITE_END() // test_prepared_statement

86
test/unit/statement.cpp Normal file
View File

@@ -0,0 +1,86 @@
//
// Copyright (c) 2019-2022 Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <boost/mysql/statement.hpp>
#include <boost/mysql/detail/protocol/prepared_statement_messages.hpp>
#include <boost/test/unit_test.hpp>
#include "test_common.hpp"
#include "test_channel.hpp"
#include "test_stream.hpp"
using namespace boost::mysql::test;
using boost::mysql::detail::com_stmt_prepare_ok_packet;
using statement_t = boost::mysql::statement<test_stream>;
namespace
{
BOOST_AUTO_TEST_SUITE(test_statement)
test_channel chan = create_channel();
BOOST_AUTO_TEST_CASE(default_ctor)
{
statement_t stmt;
BOOST_TEST(!stmt.valid());
}
BOOST_AUTO_TEST_CASE(member_fns)
{
statement_t stmt;
stmt.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
BOOST_TEST(stmt.valid());
BOOST_TEST(stmt.id() == 1);
BOOST_TEST(stmt.num_params() == 3);
}
BOOST_AUTO_TEST_CASE(move_ctor_from_invalid)
{
statement_t stmt1;
statement_t stmt2 (std::move(stmt1));
BOOST_TEST(!stmt2.valid());
}
BOOST_AUTO_TEST_CASE(move_ctor_from_valid)
{
statement_t stmt1;
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
statement_t stmt2 (std::move(stmt1));
BOOST_TEST(stmt2.valid());
BOOST_TEST(stmt2.id() == 1);
BOOST_TEST(stmt2.num_params() == 3);
}
BOOST_AUTO_TEST_CASE(move_assign_from_invalid)
{
statement_t stmt1;
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
statement_t stmt2;
stmt1 = std::move(stmt2);
BOOST_TEST(!stmt1.valid());
}
BOOST_AUTO_TEST_CASE(move_assign_from_valid)
{
statement_t stmt1;
stmt1.reset(&chan, com_stmt_prepare_ok_packet{ 4, 8, 3, 9 });
statement_t stmt2;
stmt2.reset(&chan, com_stmt_prepare_ok_packet{ 1, 2, 3, 4 });
stmt1 = std::move(stmt2);
BOOST_TEST(stmt1.valid());
BOOST_TEST(stmt1.id() == 1);
BOOST_TEST(stmt1.num_params() == 3);
}
BOOST_AUTO_TEST_SUITE_END()
}