From 33ccedf03b89c9c363db07b2b4a52828785cfee9 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 30 Oct 2020 16:57:48 -0700 Subject: [PATCH] test/crimson: factor out seastar_runner helpers Signed-off-by: Samuel Just --- src/test/crimson/gtest_seastar.cc | 44 +------------------ src/test/crimson/gtest_seastar.h | 33 +------------- src/test/crimson/seastar_runner.h | 71 +++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 74 deletions(-) create mode 100644 src/test/crimson/seastar_runner.h diff --git a/src/test/crimson/gtest_seastar.cc b/src/test/crimson/gtest_seastar.cc index 767066b3173..9d43fc6be14 100644 --- a/src/test/crimson/gtest_seastar.cc +++ b/src/test/crimson/gtest_seastar.cc @@ -4,49 +4,7 @@ #include "include/ceph_assert.h" #include "gtest_seastar.h" -seastar_gtest_env_t seastar_test_suite_t::seastar_env; - -seastar_gtest_env_t::seastar_gtest_env_t() : - begin_fd{seastar::file_desc::eventfd(0, 0)} {} - -void seastar_gtest_env_t::init(int argc, char **argv) -{ - thread = std::thread([argc, argv, this] { reactor(argc, argv); }); - eventfd_t result = 0; - if (int r = ::eventfd_read(begin_fd.get(), &result); r < 0) { - std::cerr << "unable to eventfd_read():" << errno << std::endl; - throw std::runtime_error("Cannot start seastar"); - } -} - -void seastar_gtest_env_t::stop() -{ - run([this] { - on_end->write_side().signal(1); - return seastar::now(); - }); - thread.join(); -} - -seastar_gtest_env_t::~seastar_gtest_env_t() -{} - -void seastar_gtest_env_t::reactor(int argc, char** argv) -{ - app.run(argc, argv, [this] { - on_end.reset(new seastar::readable_eventfd); - return seastar::now().then([this] { - ::eventfd_write(begin_fd.get(), 1); - return seastar::now(); - }).then([this] { - return on_end->wait().then([](size_t){}); - }).handle_exception([](auto ep) { - std::cerr << "Error: " << ep << std::endl; - }).finally([this] { - on_end.reset(); - }); - }); -} +SeastarRunner seastar_test_suite_t::seastar_env; int main(int argc, char **argv) { diff --git a/src/test/crimson/gtest_seastar.h b/src/test/crimson/gtest_seastar.h index 6f4d376d27a..20709a3eec4 100644 --- a/src/test/crimson/gtest_seastar.h +++ b/src/test/crimson/gtest_seastar.h @@ -3,41 +3,12 @@ #pragma once -#include -#include -#include - -#include -#include -#include -#include -#include - #include "gtest/gtest.h" -struct seastar_gtest_env_t { - seastar::app_template app; - seastar::file_desc begin_fd; - std::unique_ptr on_end; - - std::thread thread; - - seastar_gtest_env_t(); - ~seastar_gtest_env_t(); - - void init(int argc, char **argv); - void stop(); - void reactor(int argc, char **argv); - - template - void run(Func &&func) { - auto fut = seastar::alien::submit_to(0, std::forward(func)); - fut.get(); - } -}; +#include "seastar_runner.h" struct seastar_test_suite_t : public ::testing::Test { - static seastar_gtest_env_t seastar_env; + static SeastarRunner seastar_env; template void run(Func &&func) { diff --git a/src/test/crimson/seastar_runner.h b/src/test/crimson/seastar_runner.h new file mode 100644 index 00000000000..5a430554e59 --- /dev/null +++ b/src/test/crimson/seastar_runner.h @@ -0,0 +1,71 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include + +struct SeastarRunner { + seastar::app_template app; + seastar::file_desc begin_fd; + std::unique_ptr on_end; + + std::thread thread; + + SeastarRunner() : + begin_fd{seastar::file_desc::eventfd(0, 0)} {} + + ~SeastarRunner() {} + + void init(int argc, char **argv) + { + thread = std::thread([argc, argv, this] { reactor(argc, argv); }); + eventfd_t result = 0; + if (int r = ::eventfd_read(begin_fd.get(), &result); r < 0) { + std::cerr << "unable to eventfd_read():" << errno << std::endl; + throw std::runtime_error("Cannot start seastar"); + } + } + + void stop() + { + run([this] { + on_end->write_side().signal(1); + return seastar::now(); + }); + thread.join(); + } + + void reactor(int argc, char **argv) + { + app.run(argc, argv, [this] { + on_end.reset(new seastar::readable_eventfd); + return seastar::now().then([this] { + ::eventfd_write(begin_fd.get(), 1); + return seastar::now(); + }).then([this] { + return on_end->wait().then([](size_t){}); + }).handle_exception([](auto ep) { + std::cerr << "Error: " << ep << std::endl; + }).finally([this] { + on_end.reset(); + }); + }); + } + + template + void run(Func &&func) { + auto fut = seastar::alien::submit_to(0, std::forward(func)); + fut.get(); + } +}; + + -- 2.39.5