mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-18 02:02:17 +00:00
118 lines
2.8 KiB
C++
118 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
|
|
|
|
} // namespace test
|
|
} // namespace mysql
|
|
} // namespace boost
|
|
|
|
#endif |