// // Copyright (c) 2019-2020 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/connection.hpp" #include "integration_test_common.hpp" #include using namespace boost::mysql::test; using boost::mysql::connection; using boost::mysql::socket_connection; using boost::asio::ip::tcp; namespace { struct ConnectionTest : IntegTest { }; TEST_F(ConnectionTest, MoveConstructor_ConnectedConnection_UsableConnection) { // First connection connection first (ctx); EXPECT_TRUE(first.valid()); // Connect first.next_layer().connect(get_endpoint(endpoint_kind::localhost)); first.handshake(params); // Construct second connection connection second (std::move(first)); EXPECT_FALSE(first.valid()); EXPECT_TRUE(second.valid()); EXPECT_NO_THROW(second.query("SELECT 1")); } TEST_F(ConnectionTest, MoveAssignment_FromConnectedConnection_UsableConnection) { // First connection connection first (ctx); connection second (ctx); EXPECT_TRUE(first.valid()); EXPECT_TRUE(second.valid()); // Connect first.next_layer().connect(get_endpoint(endpoint_kind::localhost)); first.handshake(params); // Move second = std::move(first); EXPECT_FALSE(first.valid()); EXPECT_TRUE(second.valid()); EXPECT_NO_THROW(second.query("SELECT 1")); } struct SocketConnectionTest : IntegTest { }; TEST_F(SocketConnectionTest, MoveConstructor_ConnectedConnection_UsableConnection) { // First connection socket_connection first (ctx); EXPECT_TRUE(first.valid()); // Connect first.connect(get_endpoint(endpoint_kind::localhost), params); // Construct second connection socket_connection second (std::move(first)); EXPECT_FALSE(first.valid()); EXPECT_TRUE(second.valid()); EXPECT_NO_THROW(second.query("SELECT 1")); } TEST_F(SocketConnectionTest, MoveAssignment_FromConnectedConnection_UsableConnection) { // First connection socket_connection first (ctx); socket_connection second (ctx); EXPECT_TRUE(first.valid()); EXPECT_TRUE(second.valid()); // Connect first.connect(get_endpoint(endpoint_kind::localhost), params); // Move second = std::move(first); EXPECT_FALSE(first.valid()); EXPECT_TRUE(second.valid()); EXPECT_NO_THROW(second.query("SELECT 1")); } }