From ec197e133cf7fb4fdd37c4d96affce0713d4ad2c Mon Sep 17 00:00:00 2001 From: Ruben Perez Date: Fri, 7 Oct 2022 22:58:02 +0200 Subject: [PATCH] statement unit tests --- include/boost/mysql/statement.hpp | 2 +- test/CMakeLists.txt | 9 +-- test/unit/prepared_statement.cpp | 120 ------------------------------ test/unit/statement.cpp | 86 +++++++++++++++++++++ 4 files changed, 91 insertions(+), 126 deletions(-) delete mode 100644 test/unit/prepared_statement.cpp create mode 100644 test/unit/statement.cpp diff --git a/include/boost/mysql/statement.hpp b/include/boost/mysql/statement.hpp index 7c6c9e90..f8938c71 100644 --- a/include/boost/mysql/statement.hpp +++ b/include/boost/mysql/statement.hpp @@ -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; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 683ddd0d..55a23cf8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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 diff --git a/test/unit/prepared_statement.cpp b/test/unit/prepared_statement.cpp deleted file mode 100644 index 924d937a..00000000 --- a/test/unit/prepared_statement.cpp +++ /dev/null @@ -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 -#include -#include "test_common.hpp" -#include "test_stream.hpp" -#include -#include -#include -#include - -using namespace boost::mysql::detail; -using boost::mysql::statement_base; - -using chan_t = boost::mysql::detail::channel; -using stmt_t = statement_base; - -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; - using rebound_type = boost::mysql::tcp_prepared_statement::rebind_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::value)); -} - -BOOST_AUTO_TEST_SUITE_END() // test_prepared_statement diff --git a/test/unit/statement.cpp b/test/unit/statement.cpp new file mode 100644 index 00000000..854c7625 --- /dev/null +++ b/test/unit/statement.cpp @@ -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 +#include +#include +#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; + +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() + +}