forked from boostorg/mqtt5
Add Jamfile, make CMake scripts Boost compliant
Summary: related to T15996 Reviewers: ivica, korina Reviewed By: ivica Subscribers: iljazovic, miljen Differential Revision: https://repo.mireo.local/D33480
This commit is contained in:
1 parent
53fe64d015
commit
7d18f20e56
41 files changed
+1195
-620
No files matched your search
+70
-85
@@ -8,15 +8,12 @@
|
||||
#include <boost/mqtt5/logger.hpp>
|
||||
#include <boost/mqtt5/logger_traits.hpp>
|
||||
#include <boost/mqtt5/mqtt_client.hpp>
|
||||
#include <boost/mqtt5/websocket_ssl.hpp>
|
||||
|
||||
#include <boost/mqtt5/detail/log_invoke.hpp>
|
||||
|
||||
#include <boost/asio/detached.hpp>
|
||||
#include <boost/asio/io_context.hpp>
|
||||
#include <boost/asio/ip/tcp.hpp>
|
||||
#include <boost/asio/ssl/stream.hpp>
|
||||
#include <boost/beast/websocket/stream.hpp>
|
||||
#include <boost/test/tools/output_test_stream.hpp>
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
@@ -25,33 +22,15 @@
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
|
||||
#include "test_common/extra_deps.hpp"
|
||||
#include "test_common/message_exchange.hpp"
|
||||
#include "test_common/preconditions.hpp"
|
||||
#include "test_common/test_service.hpp"
|
||||
#include "test_common/test_stream.hpp"
|
||||
|
||||
using namespace boost::mqtt5;
|
||||
namespace asio = boost::asio;
|
||||
|
||||
namespace boost::mqtt5 {
|
||||
|
||||
template <typename StreamBase>
|
||||
struct tls_handshake_type<asio::ssl::stream<StreamBase>> {
|
||||
static constexpr auto client = asio::ssl::stream_base::client;
|
||||
static constexpr auto server = asio::ssl::stream_base::server;
|
||||
};
|
||||
|
||||
template <typename StreamBase>
|
||||
void assign_tls_sni(
|
||||
const authority_path& ap,
|
||||
asio::ssl::context& /* ctx */,
|
||||
asio::ssl::stream<StreamBase>& stream
|
||||
) {
|
||||
SSL_set_tlsext_host_name(stream.native_handle(), ap.host.c_str());
|
||||
}
|
||||
|
||||
} // end namespace boost::mqtt5
|
||||
|
||||
|
||||
void logger_test() {
|
||||
BOOST_STATIC_ASSERT(has_at_resolve<logger>);
|
||||
BOOST_STATIC_ASSERT(has_at_tcp_connect<logger>);
|
||||
@@ -61,13 +40,6 @@ void logger_test() {
|
||||
BOOST_STATIC_ASSERT(has_at_disconnect<logger>);
|
||||
}
|
||||
|
||||
using stream_type = boost::beast::websocket::stream<
|
||||
asio::ssl::stream<asio::ip::tcp::socket>
|
||||
>;
|
||||
using context_type = asio::ssl::context;
|
||||
using logger_type = logger;
|
||||
using client_type = mqtt_client<stream_type, context_type, logger_type>;
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(logger_tests)
|
||||
|
||||
class clog_redirect {
|
||||
@@ -90,61 +62,6 @@ bool contains(const std::string& str, const std::string& substr) {
|
||||
return str.find(substr) != std::string::npos;
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(successful_connect_debug) {
|
||||
boost::test_tools::output_test_stream output;
|
||||
|
||||
{
|
||||
clog_redirect guard(output.rdbuf());
|
||||
asio::io_context ioc;
|
||||
|
||||
asio::ssl::context tls_context(asio::ssl::context::tls_client);
|
||||
client_type c(
|
||||
ioc, std::move(tls_context), logger(log_level::debug)
|
||||
);
|
||||
|
||||
c.brokers("broker.hivemq.com/mqtt", 8884)
|
||||
.async_run(asio::detached);
|
||||
|
||||
c.async_disconnect([](error_code) {});
|
||||
|
||||
ioc.run();
|
||||
}
|
||||
|
||||
std::string log = output.rdbuf()->str();
|
||||
BOOST_TEST_MESSAGE(log);
|
||||
BOOST_TEST_WARN(contains(log, "resolve"));
|
||||
BOOST_TEST_WARN(contains(log, "TCP connect"));
|
||||
BOOST_TEST_WARN(contains(log, "TLS handshake"));
|
||||
BOOST_TEST_WARN(contains(log, "WebSocket handshake"));
|
||||
BOOST_TEST_WARN(contains(log, "connack"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(successful_connect_warning) {
|
||||
boost::test_tools::output_test_stream output;
|
||||
|
||||
{
|
||||
clog_redirect guard(output.rdbuf());
|
||||
|
||||
asio::io_context ioc;
|
||||
asio::ssl::context tls_context(asio::ssl::context::tls_client);
|
||||
client_type c(
|
||||
ioc, std::move(tls_context), logger(log_level::warning)
|
||||
);
|
||||
|
||||
c.brokers("broker.hivemq.com/mqtt", 8884)
|
||||
.async_run(asio::detached);
|
||||
|
||||
c.async_disconnect([](error_code) {});
|
||||
|
||||
ioc.run();
|
||||
}
|
||||
|
||||
// If connection is successful, nothing should be printed.
|
||||
// However if the Broker is down or overloaded, this will cause logs to be printed.
|
||||
// We should not fail the test because of it.
|
||||
BOOST_TEST_WARN(output.is_empty());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(disconnect) {
|
||||
using test::after;
|
||||
using namespace std::chrono_literals;
|
||||
@@ -194,4 +111,72 @@ BOOST_AUTO_TEST_CASE(disconnect) {
|
||||
BOOST_TEST(contains(log, "disconnect"));
|
||||
}
|
||||
|
||||
#ifdef BOOST_MQTT5_EXTRA_DEPS
|
||||
using stream_type = boost::beast::websocket::stream<
|
||||
asio::ssl::stream<asio::ip::tcp::socket>
|
||||
>;
|
||||
using context_type = asio::ssl::context;
|
||||
using logger_type = logger;
|
||||
using client_type = mqtt_client<stream_type, context_type, logger_type>;
|
||||
|
||||
BOOST_AUTO_TEST_CASE(successful_connect_debug,
|
||||
* boost::unit_test::precondition(test::public_broker_cond))
|
||||
{
|
||||
boost::test_tools::output_test_stream output;
|
||||
|
||||
{
|
||||
clog_redirect guard(output.rdbuf());
|
||||
asio::io_context ioc;
|
||||
|
||||
asio::ssl::context tls_context(asio::ssl::context::tls_client);
|
||||
client_type c(
|
||||
ioc, std::move(tls_context), logger(log_level::debug)
|
||||
);
|
||||
|
||||
c.brokers("broker.hivemq.com/mqtt", 8884)
|
||||
.async_run(asio::detached);
|
||||
|
||||
c.async_disconnect([](error_code) {});
|
||||
|
||||
ioc.run();
|
||||
}
|
||||
|
||||
std::string log = output.rdbuf()->str();
|
||||
BOOST_TEST_MESSAGE(log);
|
||||
BOOST_TEST_WARN(contains(log, "resolve"));
|
||||
BOOST_TEST_WARN(contains(log, "TCP connect"));
|
||||
BOOST_TEST_WARN(contains(log, "TLS handshake"));
|
||||
BOOST_TEST_WARN(contains(log, "WebSocket handshake"));
|
||||
BOOST_TEST_WARN(contains(log, "connack"));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(successful_connect_warning,
|
||||
* boost::unit_test::precondition(test::public_broker_cond))
|
||||
{
|
||||
boost::test_tools::output_test_stream output;
|
||||
|
||||
{
|
||||
clog_redirect guard(output.rdbuf());
|
||||
|
||||
asio::io_context ioc;
|
||||
asio::ssl::context tls_context(asio::ssl::context::tls_client);
|
||||
client_type c(
|
||||
ioc, std::move(tls_context), logger(log_level::warning)
|
||||
);
|
||||
|
||||
c.brokers("broker.hivemq.com/mqtt", 8884)
|
||||
.async_run(asio::detached);
|
||||
|
||||
c.async_disconnect([](error_code) {});
|
||||
|
||||
ioc.run();
|
||||
}
|
||||
|
||||
// If connection is successful, nothing should be printed.
|
||||
// However if the Broker is down or overloaded, this will cause logs to be printed.
|
||||
// We should not fail the test because of it.
|
||||
BOOST_TEST_WARN(output.is_empty());
|
||||
}
|
||||
#endif // BOOST_MQTT5_EXTRA_DEPS
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END();
|
||||
Reference in new issue
Block a user