summaryrefslogtreecommitdiffstats
path: root/src/seastar/include/seastar/testing/test_runner.hh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/seastar/include/seastar/testing/test_runner.hh59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/seastar/include/seastar/testing/test_runner.hh b/src/seastar/include/seastar/testing/test_runner.hh
new file mode 100644
index 000000000..17d032977
--- /dev/null
+++ b/src/seastar/include/seastar/testing/test_runner.hh
@@ -0,0 +1,59 @@
+/*
+ * This file is open source software, licensed to you under the terms
+ * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. You may not use this file except in compliance with the License.
+ *
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ * Copyright (C) 2015 Cloudius Systems, Ltd.
+ */
+
+#pragma once
+
+#include <memory>
+#include <functional>
+#include <atomic>
+#include <random>
+#include <seastar/core/future.hh>
+#include <seastar/core/posix.hh>
+#include <seastar/testing/exchanger.hh>
+
+namespace seastar {
+
+namespace testing {
+
+extern thread_local std::default_random_engine local_random_engine;
+
+class test_runner {
+private:
+ std::unique_ptr<posix_thread> _thread;
+ std::atomic<bool> _started{false};
+ exchanger<std::function<future<>()>> _task;
+ bool _done = false;
+ int _exit_code{0};
+public:
+ // Returns whether initialization was successful.
+ // Will return as soon as the seastar::app was started.
+ bool start(int argc, char** argv);
+ ~test_runner();
+ void run_sync(std::function<future<>()> task);
+ // Returns the return value of the underlying `seastar::app::run()`.
+ int finalize();
+};
+
+test_runner& global_test_runner();
+
+}
+
+}