Files

96 lines
2.8 KiB
C++
Raw Permalink Normal View History

2024-08-06 07:41:29 +02:00
//
2025-02-14 13:42:23 +01:00
// Copyright (c) 2023-2025 Ivica Siladic, Bruno Iljazovic, Korina Simicevic
2024-08-06 07:41:29 +02:00
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <boost/asio/use_awaitable.hpp>
#ifdef BOOST_ASIO_HAS_CO_AWAIT
2025-01-13 16:11:41 +01:00
#include <boost/mqtt5.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ip/tcp.hpp>
2024-10-08 09:59:35 +02:00
#include <cstdint>
2024-08-06 07:41:29 +02:00
#include <string>
#include <variant> // std::monostate
#include <vector>
#include "test_common/extra_deps.hpp"
2024-08-06 07:41:29 +02:00
namespace boost::mqtt5::test {
2024-08-06 07:41:29 +02:00
// the following code needs to compile
template <
2025-01-27 10:14:52 +01:00
typename StreamType,
typename TlsContextType = std::monostate,
typename Logger = noop_logger
>
2024-08-06 07:41:29 +02:00
asio::awaitable<void> test_default_completion_tokens_impl(
2025-01-27 10:14:52 +01:00
TlsContextType tls_context = {}, Logger logger = {}
2024-08-06 07:41:29 +02:00
) {
2025-01-13 16:11:41 +01:00
asio::io_context ioc;
2024-08-06 07:41:29 +02:00
2025-01-27 10:14:52 +01:00
using client_type = asio::use_awaitable_t<>::as_default_on_t<
mqtt_client<StreamType, TlsContextType, Logger>
>;
client_type c(ioc, std::move(tls_context), std::move(logger));
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
co_await c.async_run();
auto pub_props = publish_props {};
co_await c.template async_publish<qos_e::at_least_once>(
"topic", "payload", retain_e::no, pub_props
);
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
auto sub_topic = subscribe_topic {};
auto sub_topics = std::vector<subscribe_topic> { sub_topic };
auto sub_props = subscribe_props {};
co_await c.async_subscribe(sub_topics, sub_props);
co_await c.async_subscribe(sub_topic, sub_props);
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
auto unsub_topics = std::vector<std::string> {};
auto unsub_props = unsubscribe_props {};
co_await c.async_unsubscribe(unsub_topics, unsub_props);
co_await c.async_unsubscribe("topic", unsub_props);
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
co_await c.async_receive();
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
auto dc_props = disconnect_props {};
co_await c.async_disconnect();
co_await c.async_disconnect(disconnect_rc_e::normal_disconnection, dc_props);
co_return;
2024-08-06 07:41:29 +02:00
}
asio::awaitable<void> test_default_completion_tokens() {
2025-01-13 16:11:41 +01:00
co_await test_default_completion_tokens_impl<asio::ip::tcp::socket>();
2024-08-06 07:41:29 +02:00
#ifdef BOOST_MQTT5_EXTRA_DEPS
2025-01-13 16:11:41 +01:00
co_await test_default_completion_tokens_impl<
asio::ssl::stream<asio::ip::tcp::socket>,
asio::ssl::context
>(asio::ssl::context(asio::ssl::context::tls_client));
2024-08-06 07:41:29 +02:00
2025-01-13 16:11:41 +01:00
co_await test_default_completion_tokens_impl<
boost::beast::websocket::stream<asio::ip::tcp::socket>
>();
2024-08-06 07:41:29 +02:00
2025-01-27 10:14:52 +01:00
co_await test_default_completion_tokens_impl<
boost::beast::websocket::stream<asio::ssl::stream<asio::ip::tcp::socket>>,
asio::ssl::context,
logger
>(
asio::ssl::context(asio::ssl::context::tls_client),
logger(log_level::debug)
);
#endif // BOOST_MQTT5_EXTRA_DEPS
2024-08-06 07:41:29 +02:00
}
} // end namespace boost::mqtt5::test
2024-08-06 07:41:29 +02:00
#endif // BOOST_ASIO_HAS_CO_AWAIT