mirror of
https://github.com/Icinga/icinga2.git
synced 2025-08-24 11:08:16 +02:00
84 lines
2.6 KiB
C++
84 lines
2.6 KiB
C++
//
|
|
// Copyright (c) 2020 Kasper Laudrup (laudrup at stacktrace dot dk)
|
|
//
|
|
// 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)
|
|
//
|
|
|
|
#include "echo_server.hpp"
|
|
#include "echo_client.hpp"
|
|
#include "async_echo_server.hpp"
|
|
#include "async_echo_client.hpp"
|
|
#include "asio_ssl_client_stream.hpp"
|
|
#include "asio_ssl_server_stream.hpp"
|
|
#include "wintls_client_stream.hpp"
|
|
#include "wintls_server_stream.hpp"
|
|
#include "unittest.hpp"
|
|
|
|
#include <boost/wintls.hpp>
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <tuple>
|
|
|
|
namespace {
|
|
std::string generate_data(std::size_t size) {
|
|
std::string ret(size, '\0');
|
|
for (std::size_t i = 0; i < size - 1; ++i) {
|
|
ret[i] = static_cast<char>(i % 26 + 65);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
}
|
|
|
|
using TestTypes = std::tuple<std::tuple<asio_ssl_client_stream, asio_ssl_server_stream>,
|
|
std::tuple<wintls_client_stream, asio_ssl_server_stream>,
|
|
std::tuple<asio_ssl_client_stream, wintls_server_stream>,
|
|
std::tuple<wintls_client_stream, wintls_server_stream>>;
|
|
|
|
TEMPLATE_LIST_TEST_CASE("echo test", "", TestTypes) {
|
|
using ClientStream = typename std::tuple_element<0, TestType>::type;
|
|
using ServerStream = typename std::tuple_element<1, TestType>::type;
|
|
|
|
auto test_data_size = GENERATE(0x100, 0x100 - 1, 0x100 + 1,
|
|
0x1000, 0x1000 - 1, 0x1000 + 1,
|
|
0x10000, 0x10000 - 1, 0x10000 + 1,
|
|
0x100000, 0x100000 - 1, 0x100000 + 1);
|
|
const std::string test_data = generate_data(static_cast<std::size_t>(test_data_size));
|
|
|
|
net::io_context io_context;
|
|
|
|
SECTION("sync test") {
|
|
echo_client<ClientStream> client(io_context);
|
|
echo_server<ServerStream> server(io_context);
|
|
|
|
client.stream.next_layer().connect(server.stream.next_layer());
|
|
|
|
auto handshake_result = server.handshake();
|
|
client.handshake();
|
|
REQUIRE_FALSE(handshake_result.get());
|
|
|
|
client.write(test_data);
|
|
server.read();
|
|
server.write();
|
|
client.read();
|
|
|
|
auto shutdown_result = server.shutdown();
|
|
client.shutdown();
|
|
REQUIRE_FALSE(shutdown_result.get());
|
|
|
|
CHECK(client.template data<std::string>() == test_data);
|
|
}
|
|
|
|
SECTION("async test") {
|
|
async_echo_server<ServerStream> server(io_context);
|
|
async_echo_client<ClientStream> client(io_context, test_data);
|
|
client.stream.next_layer().connect(server.stream.next_layer());
|
|
server.run();
|
|
client.run();
|
|
io_context.run();
|
|
CHECK(client.received_message() == test_data);
|
|
}
|
|
}
|