2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-14 12:52:17 +00:00
Files
mysql/test/integration/utils/include/streams.hpp
Ruben Perez 86e0eacd6a SSL/TLS and row reading rework (v0.2.0)
* SSL/TLS rework
* Unified connection object
* New prepared_statement::execute interface
* New resultset::read_one mechanic
* Unified row object
* null_t type
* Travis to GitHub actions migration
* Integration test rework
2022-03-21 16:09:48 +01:00

76 lines
2.8 KiB
C++

//
// 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)
//
#ifndef BOOST_MYSQL_TEST_INTEGRATION_UTILS_INCLUDE_STREAMS_HPP
#define BOOST_MYSQL_TEST_INTEGRATION_UTILS_INCLUDE_STREAMS_HPP
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/local/stream_protocol.hpp>
#include <boost/asio/ssl/stream.hpp>
#include <boost/asio/use_future.hpp>
namespace boost {
namespace mysql {
namespace test {
// A TCP socket that has use_future as default completion token
class future_executor : public boost::asio::io_context::executor_type
{
public:
future_executor(const boost::asio::io_context::executor_type& inner) :
boost::asio::io_context::executor_type(inner) {}
using default_completion_token_type = boost::asio::use_future_t<>;
// Required to build in MSVC for some arcane reason
operator boost::asio::any_io_executor() const
{
return boost::asio::any_io_executor(static_cast<const boost::asio::io_context::executor_type>(*this));
}
};
// The actual streams we will be using to test
using tcp_socket = boost::asio::ip::tcp::socket;
using tcp_ssl_socket = boost::asio::ssl::stream<tcp_socket>;
using tcp_ssl_future_socket = boost::asio::ssl::stream<
boost::asio::basic_stream_socket<
boost::asio::ip::tcp,
future_executor
>
>;
#ifdef BOOST_ASIO_HAS_LOCAL_SOCKETS
using unix_socket = boost::asio::local::stream_protocol::socket;
using unix_ssl_socket = boost::asio::ssl::stream<unix_socket>;
#endif
// Stream names
template <class Stream> constexpr const char* get_stream_name();
template <> constexpr const char* get_stream_name<tcp_socket>() { return "tcp"; }
template <> constexpr const char* get_stream_name<tcp_ssl_socket>() { return "tcp_ssl"; }
template <> constexpr const char* get_stream_name<tcp_ssl_future_socket>() { return "tcp_ssl_default_token"; }
#ifdef BOOST_ASIO_HAS_LOCAL_SOCKETS
template <> constexpr const char* get_stream_name<unix_socket>() { return "unix"; }
template <> constexpr const char* get_stream_name<unix_ssl_socket>() { return "unix_ssl"; }
#endif
// Supports SSL (doesn't use the lib's type trait for test independance)
template <class Stream> constexpr bool supports_ssl();
template <> constexpr bool supports_ssl<tcp_socket>() { return false; }
template <> constexpr bool supports_ssl<tcp_ssl_socket>() { return true; }
template <> constexpr bool supports_ssl<tcp_ssl_future_socket>() { return true; }
#ifdef BOOST_ASIO_HAS_LOCAL_SOCKETS
template <> constexpr bool supports_ssl<unix_socket>() { return false; }
template <> constexpr bool supports_ssl<unix_ssl_socket>() { return true; }
#endif
} // test
} // mysql
} // boost
#endif