From c5441296223883c2cc4109013f0ce7cbc0ae1d38 Mon Sep 17 00:00:00 2001 From: nsubiron Date: Wed, 10 Oct 2018 18:10:33 +0200 Subject: [PATCH] Add unit test for checking server shutdown --- LibCarla/source/test/test_streaming.cpp | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/LibCarla/source/test/test_streaming.cpp b/LibCarla/source/test/test_streaming.cpp index e289defdf..ec5e17179 100644 --- a/LibCarla/source/test/test_streaming.cpp +++ b/LibCarla/source/test/test_streaming.cpp @@ -7,6 +7,8 @@ #include "test.h" #include +#include +#include #include #include #include @@ -163,3 +165,46 @@ TEST(streaming, low_level_tcp_small_message) { ASSERT_GT(message_count, 10u); c->Stop(); } + +TEST(streaming, stream_outlives_server) { + using namespace carla::streaming; + using namespace util::buffer; + constexpr size_t iterations = 10u; + std::atomic_bool done{false}; + + const std::string message = "Hello client, how are you?"; + std::shared_ptr stream; + + carla::ThreadGroup sender; + sender.CreateThread([&]() { + while (!done) { + auto s = std::atomic_load_explicit(&stream, std::memory_order_relaxed); + if (s != nullptr) { + (*s) << message; + } + } + }); + + for (auto i = 0u; i < iterations; ++i) { + Server srv(TESTING_PORT); + srv.AsyncRun(2u); + { + auto s = std::make_shared(srv.MakeStream()); + std::atomic_store_explicit(&stream, s, std::memory_order_relaxed); + } + std::atomic_size_t messages_received{0u}; + { + Client c; + c.AsyncRun(2u); + c.Subscribe(stream->token(), [&](auto buffer) { + const std::string result = as_string(buffer); + ASSERT_EQ(result, message); + ++messages_received; + }); + std::this_thread::sleep_for(20ms); + } // client dies here. + ASSERT_GT(messages_received, 0u); + } // server dies here. + std::this_thread::sleep_for(20ms); + done = true; +} // stream dies here.