mirror of
https://github.com/boostorg/beast.git
synced 2025-08-05 15:54:46 +02:00
Add test::error to experimental
This commit is contained in:
@@ -2,6 +2,7 @@ Version 170:
|
|||||||
|
|
||||||
* Add flat_stream to experimental
|
* Add flat_stream to experimental
|
||||||
* Add ssl_stream to experimental
|
* Add ssl_stream to experimental
|
||||||
|
* Add test::error to experimental
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
60
include/boost/beast/experimental/test/detail/error.hpp
Normal file
60
include/boost/beast/experimental/test/detail/error.hpp
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco 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)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BOOST_BEAST_TEST_DETAIL_ERROR_HPP
|
||||||
|
#define BOOST_BEAST_TEST_DETAIL_ERROR_HPP
|
||||||
|
|
||||||
|
#include <boost/beast/core/error.hpp>
|
||||||
|
#include <boost/beast/core/string.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
|
||||||
|
namespace beast {
|
||||||
|
namespace test {
|
||||||
|
enum class error;
|
||||||
|
} // test
|
||||||
|
} // beast
|
||||||
|
|
||||||
|
namespace system {
|
||||||
|
template<>
|
||||||
|
struct is_error_code_enum<beast::test::error>
|
||||||
|
{
|
||||||
|
static bool const value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // system
|
||||||
|
|
||||||
|
namespace beast {
|
||||||
|
namespace test {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
class error_codes : public error_category
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
const char*
|
||||||
|
name() const noexcept override;
|
||||||
|
|
||||||
|
std::string
|
||||||
|
message(int ev) const override;
|
||||||
|
|
||||||
|
error_condition
|
||||||
|
default_error_condition(int ev) const noexcept override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // detail
|
||||||
|
|
||||||
|
error_code
|
||||||
|
make_error_code(error e);
|
||||||
|
|
||||||
|
} // test
|
||||||
|
} // beast
|
||||||
|
|
||||||
|
} // boost
|
||||||
|
|
||||||
|
#endif
|
37
include/boost/beast/experimental/test/error.hpp
Normal file
37
include/boost/beast/experimental/test/error.hpp
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco 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)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BOOST_BEAST_TEST_ERROR_HPP
|
||||||
|
#define BOOST_BEAST_TEST_ERROR_HPP
|
||||||
|
|
||||||
|
#include <boost/beast/core/error.hpp>
|
||||||
|
#include <boost/beast/experimental/test/detail/error.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace beast {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
/// Error codes returned from unit testing algorithms
|
||||||
|
enum class error
|
||||||
|
{
|
||||||
|
/** The test stream generated a simulated testing error
|
||||||
|
|
||||||
|
This error is returned by the test @ref stream when it
|
||||||
|
generates a simulated error.
|
||||||
|
*/
|
||||||
|
test_failure = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
} // test
|
||||||
|
} // beast
|
||||||
|
} // boost
|
||||||
|
|
||||||
|
#include <boost/beast/experimental/test/impl/error.ipp>
|
||||||
|
|
||||||
|
#endif
|
62
include/boost/beast/experimental/test/impl/error.ipp
Normal file
62
include/boost/beast/experimental/test/impl/error.ipp
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco 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)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BOOST_BEAST_TEST_IMPL_ERROR_IPP
|
||||||
|
#define BOOST_BEAST_TEST_IMPL_ERROR_IPP
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace beast {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
inline
|
||||||
|
const char*
|
||||||
|
error_codes::
|
||||||
|
name() const noexcept
|
||||||
|
{
|
||||||
|
return "boost.beast.test";
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
std::string
|
||||||
|
error_codes::
|
||||||
|
message(int ev) const
|
||||||
|
{
|
||||||
|
switch(static_cast<error>(ev))
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case error::test_failure: return "The test stream generated a simulated error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
error_condition
|
||||||
|
error_codes::
|
||||||
|
default_error_condition(int ev) const noexcept
|
||||||
|
{
|
||||||
|
return error_condition{ev, *this};
|
||||||
|
}
|
||||||
|
|
||||||
|
} // detail
|
||||||
|
|
||||||
|
inline
|
||||||
|
error_code
|
||||||
|
make_error_code(error e)
|
||||||
|
{
|
||||||
|
static detail::error_codes const cat{};
|
||||||
|
return error_code{static_cast<
|
||||||
|
std::underlying_type<error>::type>(e), cat};
|
||||||
|
}
|
||||||
|
|
||||||
|
} // test
|
||||||
|
} // beast
|
||||||
|
} // boost
|
||||||
|
|
||||||
|
#endif
|
@@ -7,8 +7,8 @@
|
|||||||
// Official repository: https://github.com/boostorg/beast
|
// Official repository: https://github.com/boostorg/beast
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef BOOST_BEAST_WEBSOCKET_DETAIL_ERROR_IPP
|
#ifndef BOOST_BEAST_WEBSOCKET_DETAIL_ERROR_HPP
|
||||||
#define BOOST_BEAST_WEBSOCKET_DETAIL_ERROR_IPP
|
#define BOOST_BEAST_WEBSOCKET_DETAIL_ERROR_HPP
|
||||||
|
|
||||||
#include <boost/beast/core/error.hpp>
|
#include <boost/beast/core/error.hpp>
|
||||||
#include <boost/beast/core/string.hpp>
|
#include <boost/beast/core/string.hpp>
|
||||||
|
@@ -139,7 +139,7 @@ public:
|
|||||||
test::stream&, multi_buffer> srs(ts);
|
test::stream&, multi_buffer> srs(ts);
|
||||||
srs.buffer().commit(buffer_copy(
|
srs.buffer().commit(buffer_copy(
|
||||||
srs.buffer().prepare(5), buffer("Hello", 5)));
|
srs.buffer().prepare(5), buffer("Hello", 5)));
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
boost::asio::read(srs, buffer(&s[0], s.size()), ec);
|
boost::asio::read(srs, buffer(&s[0], s.size()), ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
@@ -158,7 +158,7 @@ public:
|
|||||||
srs.capacity(3);
|
srs.capacity(3);
|
||||||
srs.buffer().commit(buffer_copy(
|
srs.buffer().commit(buffer_copy(
|
||||||
srs.buffer().prepare(5), buffer("Hello", 5)));
|
srs.buffer().prepare(5), buffer("Hello", 5)));
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
boost::asio::read(srs, buffer(&s[0], s.size()), ec);
|
boost::asio::read(srs, buffer(&s[0], s.size()), ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
@@ -176,7 +176,7 @@ public:
|
|||||||
test::stream&, multi_buffer> srs(ts);
|
test::stream&, multi_buffer> srs(ts);
|
||||||
srs.buffer().commit(buffer_copy(
|
srs.buffer().commit(buffer_copy(
|
||||||
srs.buffer().prepare(5), buffer("Hello", 5)));
|
srs.buffer().prepare(5), buffer("Hello", 5)));
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
boost::asio::async_read(
|
boost::asio::async_read(
|
||||||
srs, buffer(&s[0], s.size()), do_yield[ec]);
|
srs, buffer(&s[0], s.size()), do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -196,7 +196,7 @@ public:
|
|||||||
srs.capacity(3);
|
srs.capacity(3);
|
||||||
srs.buffer().commit(buffer_copy(
|
srs.buffer().commit(buffer_copy(
|
||||||
srs.buffer().prepare(5), buffer("Hello", 5)));
|
srs.buffer().prepare(5), buffer("Hello", 5)));
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
boost::asio::async_read(
|
boost::asio::async_read(
|
||||||
srs, buffer(&s[0], s.size()), do_yield[ec]);
|
srs, buffer(&s[0], s.size()), do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
|
@@ -17,6 +17,7 @@ add_executable (tests-beast-experimental
|
|||||||
${EXTRAS_FILES}
|
${EXTRAS_FILES}
|
||||||
${TEST_MAIN}
|
${TEST_MAIN}
|
||||||
Jamfile
|
Jamfile
|
||||||
|
error.cpp
|
||||||
flat_stream.cpp
|
flat_stream.cpp
|
||||||
ssl_stream.cpp
|
ssl_stream.cpp
|
||||||
)
|
)
|
||||||
|
@@ -8,6 +8,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
local SOURCES =
|
local SOURCES =
|
||||||
|
error.cpp
|
||||||
flat_stream.cpp
|
flat_stream.cpp
|
||||||
ssl_stream.cpp
|
ssl_stream.cpp
|
||||||
;
|
;
|
||||||
|
11
test/beast/experimental/error.cpp
Normal file
11
test/beast/experimental/error.cpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco 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)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
// Test that header file is self-contained.
|
||||||
|
#include <boost/beast/experimental/test/error.hpp>
|
@@ -51,7 +51,7 @@ public:
|
|||||||
test::fail_counter fc(n);
|
test::fail_counter fc(n);
|
||||||
test::stream ts{ioc_, fc};
|
test::stream ts{ioc_, fc};
|
||||||
test_parser<isRequest> p(fc);
|
test_parser<isRequest> p(fc);
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
ts.close_remote();
|
ts.close_remote();
|
||||||
read(ts, b, p, ec);
|
read(ts, b, p, ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -68,7 +68,7 @@ public:
|
|||||||
test::stream ts{ioc_, fc,
|
test::stream ts{ioc_, fc,
|
||||||
std::string(s + pre, len - pre)};
|
std::string(s + pre, len - pre)};
|
||||||
test_parser<isRequest> p(fc);
|
test_parser<isRequest> p(fc);
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
ts.close_remote();
|
ts.close_remote();
|
||||||
read(ts, b, p, ec);
|
read(ts, b, p, ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
test::fail_counter fc(n);
|
test::fail_counter fc(n);
|
||||||
test::stream ts{ioc_, fc};
|
test::stream ts{ioc_, fc};
|
||||||
test_parser<isRequest> p(fc);
|
test_parser<isRequest> p(fc);
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
ts.close_remote();
|
ts.close_remote();
|
||||||
async_read(ts, b, p, do_yield[ec]);
|
async_read(ts, b, p, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -98,7 +98,7 @@ public:
|
|||||||
test::fail_counter fc(n);
|
test::fail_counter fc(n);
|
||||||
test::stream ts{ioc_, fc};
|
test::stream ts{ioc_, fc};
|
||||||
test_parser<isRequest> p(fc);
|
test_parser<isRequest> p(fc);
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
ts.close_remote();
|
ts.close_remote();
|
||||||
async_read_header(ts, b, p, do_yield[ec]);
|
async_read_header(ts, b, p, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -115,7 +115,7 @@ public:
|
|||||||
test::stream ts(ioc_, fc,
|
test::stream ts(ioc_, fc,
|
||||||
std::string{s + pre, len - pre});
|
std::string{s + pre, len - pre});
|
||||||
test_parser<isRequest> p(fc);
|
test_parser<isRequest> p(fc);
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
ts.close_remote();
|
ts.close_remote();
|
||||||
async_read(ts, b, p, do_yield[ec]);
|
async_read(ts, b, p, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -178,7 +178,7 @@ public:
|
|||||||
"10\r\n"
|
"10\r\n"
|
||||||
"****************\r\n"
|
"****************\r\n"
|
||||||
"0\r\n\r\n";
|
"0\r\n\r\n";
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
flat_static_buffer<10> b;
|
flat_static_buffer<10> b;
|
||||||
request<string_body> req;
|
request<string_body> req;
|
||||||
read(c, b, req, ec);
|
read(c, b, req, ec);
|
||||||
@@ -286,7 +286,7 @@ public:
|
|||||||
"\r\n"
|
"\r\n"
|
||||||
};
|
};
|
||||||
request<dynamic_body> m;
|
request<dynamic_body> m;
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
multi_buffer b;
|
multi_buffer b;
|
||||||
read(ts, b, m, ec);
|
read(ts, b, m, ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -305,7 +305,7 @@ public:
|
|||||||
"\r\n"
|
"\r\n"
|
||||||
};
|
};
|
||||||
request<dynamic_body> m;
|
request<dynamic_body> m;
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
multi_buffer b;
|
multi_buffer b;
|
||||||
async_read(c, b, m, do_yield[ec]);
|
async_read(c, b, m, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -324,7 +324,7 @@ public:
|
|||||||
"\r\n"
|
"\r\n"
|
||||||
};
|
};
|
||||||
request_parser<dynamic_body> m;
|
request_parser<dynamic_body> m;
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
multi_buffer b;
|
multi_buffer b;
|
||||||
async_read_some(c, b, m, do_yield[ec]);
|
async_read_some(c, b, m, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
@@ -435,7 +435,7 @@ public:
|
|||||||
for(std::size_t n = 1; n < s.size() - 1; ++n)
|
for(std::size_t n = 1; n < s.size() - 1; ++n)
|
||||||
{
|
{
|
||||||
Parser p;
|
Parser p;
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
flat_buffer b;
|
flat_buffer b;
|
||||||
test::stream ts{ioc_};
|
test::stream ts{ioc_};
|
||||||
ostream(ts.buffer()) << s;
|
ostream(ts.buffer()) << s;
|
||||||
|
@@ -390,7 +390,7 @@ public:
|
|||||||
m.set(field::user_agent, "test");
|
m.set(field::user_agent, "test");
|
||||||
m.set(field::transfer_encoding, "chunked");
|
m.set(field::transfer_encoding, "chunked");
|
||||||
m.body() = "*****";
|
m.body() = "*****";
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
write(ts, m, ec);
|
write(ts, m, ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
@@ -421,7 +421,7 @@ public:
|
|||||||
m.set(field::user_agent, "test");
|
m.set(field::user_agent, "test");
|
||||||
m.set(field::transfer_encoding, "chunked");
|
m.set(field::transfer_encoding, "chunked");
|
||||||
m.body() = "*****";
|
m.body() = "*****";
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
async_write(ts, m, do_yield[ec]);
|
async_write(ts, m, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
@@ -453,7 +453,7 @@ public:
|
|||||||
m.set(field::connection, "keep-alive");
|
m.set(field::connection, "keep-alive");
|
||||||
m.set(field::content_length, "5");
|
m.set(field::content_length, "5");
|
||||||
m.body() = "*****";
|
m.body() = "*****";
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
write(ts, m, ec);
|
write(ts, m, ec);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
@@ -480,7 +480,7 @@ public:
|
|||||||
m.set(field::connection, "keep-alive");
|
m.set(field::connection, "keep-alive");
|
||||||
m.set(field::content_length, "5");
|
m.set(field::content_length, "5");
|
||||||
m.body() = "*****";
|
m.body() = "*****";
|
||||||
error_code ec = test::error::fail_error;
|
error_code ec = test::error::test_failure;
|
||||||
async_write(ts, m, do_yield[ec]);
|
async_write(ts, m, do_yield[ec]);
|
||||||
if(! ec)
|
if(! ec)
|
||||||
{
|
{
|
||||||
|
@@ -464,7 +464,7 @@ public:
|
|||||||
}
|
}
|
||||||
catch(system_error const& se)
|
catch(system_error const& se)
|
||||||
{
|
{
|
||||||
if(se.code() == test::error::fail_error)
|
if(se.code() == test::error::test_failure)
|
||||||
throw;
|
throw;
|
||||||
BEAST_EXPECTS(se.code().category() ==
|
BEAST_EXPECTS(se.code().category() ==
|
||||||
zlib::detail::get_error_category(),
|
zlib::detail::get_error_category(),
|
||||||
|
@@ -296,7 +296,7 @@ public:
|
|||||||
catch(system_error const& se)
|
catch(system_error const& se)
|
||||||
{
|
{
|
||||||
BEAST_EXPECTS(
|
BEAST_EXPECTS(
|
||||||
se.code() == test::error::fail_error,
|
se.code() == test::error::test_failure,
|
||||||
se.code().message());
|
se.code().message());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -350,7 +350,7 @@ public:
|
|||||||
{
|
{
|
||||||
ts.close();
|
ts.close();
|
||||||
if( ! BEAST_EXPECTS(
|
if( ! BEAST_EXPECTS(
|
||||||
ec == test::error::fail_error,
|
ec == test::error::test_failure,
|
||||||
ec.message()))
|
ec.message()))
|
||||||
BOOST_THROW_EXCEPTION(system_error{ec});
|
BOOST_THROW_EXCEPTION(system_error{ec});
|
||||||
continue;
|
continue;
|
||||||
@@ -364,7 +364,7 @@ public:
|
|||||||
catch(system_error const& se)
|
catch(system_error const& se)
|
||||||
{
|
{
|
||||||
BEAST_EXPECTS(
|
BEAST_EXPECTS(
|
||||||
se.code() == test::error::fail_error,
|
se.code() == test::error::test_failure,
|
||||||
se.code().message());
|
se.code().message());
|
||||||
}
|
}
|
||||||
catch(std::exception const& e)
|
catch(std::exception const& e)
|
||||||
|
@@ -11,105 +11,17 @@
|
|||||||
#define BOOST_BEAST_TEST_FAIL_COUNTER_HPP
|
#define BOOST_BEAST_TEST_FAIL_COUNTER_HPP
|
||||||
|
|
||||||
#include <boost/beast/core/error.hpp>
|
#include <boost/beast/core/error.hpp>
|
||||||
|
#include <boost/beast/experimental/test/error.hpp>
|
||||||
#include <boost/throw_exception.hpp>
|
#include <boost/throw_exception.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
namespace beast {
|
||||||
namespace test {
|
namespace test {
|
||||||
|
|
||||||
enum class error
|
|
||||||
{
|
|
||||||
fail_error = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
class fail_error_category : public boost::system::error_category
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
const char*
|
|
||||||
name() const noexcept override
|
|
||||||
{
|
|
||||||
return "test";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string
|
|
||||||
message(int ev) const override
|
|
||||||
{
|
|
||||||
switch(static_cast<error>(ev))
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
case error::fail_error:
|
|
||||||
return "test error";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::system::error_condition
|
|
||||||
default_error_condition(int ev) const noexcept override
|
|
||||||
{
|
|
||||||
return boost::system::error_condition{ev, *this};
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
equivalent(int ev,
|
|
||||||
boost::system::error_condition const& condition
|
|
||||||
) const noexcept override
|
|
||||||
{
|
|
||||||
return condition.value() == ev &&
|
|
||||||
&condition.category() == this;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
equivalent(error_code const& error, int ev) const noexcept override
|
|
||||||
{
|
|
||||||
return error.value() == ev &&
|
|
||||||
&error.category() == this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline
|
|
||||||
boost::system::error_category const&
|
|
||||||
get_error_category()
|
|
||||||
{
|
|
||||||
static fail_error_category const cat{};
|
|
||||||
return cat;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // detail
|
|
||||||
|
|
||||||
inline
|
|
||||||
error_code
|
|
||||||
make_error_code(error ev)
|
|
||||||
{
|
|
||||||
return error_code{
|
|
||||||
static_cast<std::underlying_type<error>::type>(ev),
|
|
||||||
detail::get_error_category()};
|
|
||||||
}
|
|
||||||
|
|
||||||
/** An error code with an error set on default construction
|
|
||||||
|
|
||||||
Default constructed versions of this object will have
|
|
||||||
an error code set right away. This helps tests find code
|
|
||||||
which forgets to clear the error code on success.
|
|
||||||
*/
|
|
||||||
struct fail_error_code : error_code
|
|
||||||
{
|
|
||||||
fail_error_code()
|
|
||||||
: error_code(make_error_code(error::fail_error))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class Arg0, class... ArgN>
|
|
||||||
fail_error_code(Arg0&& arg0, ArgN&&... argn)
|
|
||||||
: error_code(arg0, std::forward<ArgN>(argn)...)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A countdown to simulated failure.
|
/** A countdown to simulated failure.
|
||||||
|
|
||||||
On the Nth operation, the class will fail with the specified
|
On the Nth operation, the class will fail with the specified
|
||||||
error code, or the default error code of @ref error::fail_error.
|
error code, or the default error code of @ref error::test_failure.
|
||||||
*/
|
*/
|
||||||
class fail_counter
|
class fail_counter
|
||||||
{
|
{
|
||||||
@@ -126,7 +38,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
explicit
|
explicit
|
||||||
fail_counter(std::size_t n,
|
fail_counter(std::size_t n,
|
||||||
error_code ev = make_error_code(error::fail_error))
|
error_code ev = make_error_code(error::test_failure))
|
||||||
: n_(n)
|
: n_(n)
|
||||||
, ec_(ev)
|
, ec_(ev)
|
||||||
{
|
{
|
||||||
@@ -169,14 +81,4 @@ public:
|
|||||||
} // beast
|
} // beast
|
||||||
} // boost
|
} // boost
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
namespace system {
|
|
||||||
template<>
|
|
||||||
struct is_error_code_enum<beast::test::error>
|
|
||||||
{
|
|
||||||
static bool const value = true;
|
|
||||||
};
|
|
||||||
} // system
|
|
||||||
} // boost
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user