// // Copyright (c) 2023-2025 Ivica Siladic, Bruno Iljazovic, Korina Simicevic // // 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 #ifdef BOOST_ASIO_HAS_CO_AWAIT #include "test_common/test_broker.hpp" #include "test_common/extra_deps.hpp" #include #include #include #include #include #include // std::monostate #include namespace boost::mqtt5::test { // the following code needs to compile template < typename StreamType, typename TlsContextType = std::monostate, typename Logger = noop_logger > asio::awaitable test_default_completion_tokens_impl( TlsContextType tls_context = {}, Logger logger = {} ) { asio::io_context ioc; using client_type = asio::use_awaitable_t<>::as_default_on_t< mqtt_client >; client_type c(ioc, std::move(tls_context), std::move(logger)); co_await c.async_run(); auto pub_props = publish_props {}; co_await c.template async_publish( "topic", "payload", retain_e::no, pub_props ); auto sub_topic = subscribe_topic {}; auto sub_topics = std::vector { 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); auto unsub_topics = std::vector {}; auto unsub_props = unsubscribe_props {}; co_await c.async_unsubscribe(unsub_topics, unsub_props); co_await c.async_unsubscribe("topic", unsub_props); co_await c.async_receive(); auto dc_props = disconnect_props {}; co_await c.async_disconnect(); co_await c.async_disconnect(disconnect_rc_e::normal_disconnection, dc_props); co_return; } asio::awaitable test_default_completion_tokens() { co_await test_default_completion_tokens_impl(); #ifdef BOOST_MQTT5_EXTRA_DEPS co_await test_default_completion_tokens_impl< asio::ssl::stream, asio::ssl::context >(asio::ssl::context(asio::ssl::context::tls_client)); co_await test_default_completion_tokens_impl< boost::beast::websocket::stream >(); co_await test_default_completion_tokens_impl< boost::beast::websocket::stream>, asio::ssl::context, logger >( asio::ssl::context(asio::ssl::context::tls_client), logger(log_level::debug) ); #endif // BOOST_MQTT5_EXTRA_DEPS } } // end namespace boost::mqtt5::test #endif // BOOST_ASIO_HAS_CO_AWAIT