]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/process/test/async_system_stackful_error.cpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / libs / process / test / async_system_stackful_error.cpp
CommitLineData
b32b8144
FG
1// Copyright (c) 2016 Klemens D. Morgenstern
2//
3// Distributed under the Boost Software License, Version 1.0. (See accompanying
4// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#define BOOST_TEST_MAIN
7#define BOOST_TEST_IGNORE_SIGCHLD
8#include <boost/test/included/unit_test.hpp>
9
10#include <boost/process/error.hpp>
11#include <boost/process/io.hpp>
12#include <boost/process/async.hpp>
13#include <boost/process/child.hpp>
14#include <boost/process/async_system.hpp>
15
16#include <string>
17#include <boost/asio/io_context.hpp>
92f5a8d4 18#include <boost/asio/post.hpp>
b32b8144
FG
19#include <boost/asio/spawn.hpp>
20#include <boost/asio/coroutine.hpp>
21#include <boost/asio/use_future.hpp>
22#include <boost/asio/yield.hpp>
23
24#include <vector>
25#include <array>
92f5a8d4 26BOOST_AUTO_TEST_SUITE( async );
b32b8144
FG
27
28namespace bp = boost::process;
29BOOST_AUTO_TEST_CASE(stackful, *boost::unit_test::timeout(15))
30{
31 using boost::unit_test::framework::master_test_suite;
32
33 bool did_something_else = false;
34
35 boost::asio::io_context ios;
36 auto stackful =
37 [&](boost::asio::yield_context yield_)
38 {
39 int ret =
40 bp::async_system(
41 ios, yield_,
42 master_test_suite().argv[1],
43 "test", "--exit-code", "123");
44
45 BOOST_CHECK_EQUAL(ret, 123);
46 BOOST_CHECK(did_something_else);
47 };
48
49 boost::asio::spawn(ios, stackful);
92f5a8d4 50 boost::asio::post(ios.get_executor(), [&]{did_something_else = true;});
b32b8144
FG
51
52 ios.run();
53 BOOST_CHECK(did_something_else);
54}
55
56BOOST_AUTO_TEST_CASE(stackful_except, *boost::unit_test::timeout(15))
57{
58 using boost::unit_test::framework::master_test_suite;
59
60 bool did_something_else = false;
61
62 boost::asio::io_context ios;
63 auto stackful =
64 [&](boost::asio::yield_context yield_)
65 {
66
67 BOOST_CHECK_THROW(
68 bp::async_system(
69 ios, yield_,
70 "none-existing-exe"), boost::system::system_error);
71
72 BOOST_CHECK(did_something_else);
73 };
74
75 boost::asio::spawn(ios, stackful);
92f5a8d4 76 boost::asio::post(ios.get_executor(), [&]{did_something_else = true;});
b32b8144
FG
77 ios.run();
78
79 BOOST_CHECK(did_something_else);
80}
81
82
83BOOST_AUTO_TEST_CASE(stackful_error, *boost::unit_test::timeout(15))
84{
85 using boost::unit_test::framework::master_test_suite;
86
87 bool did_something_else = false;
88
89 boost::asio::io_context ios;
90 auto stackful =
91 [&](boost::asio::yield_context yield_)
92 {
93 boost::system::error_code ec;
94 auto ret =
95 bp::async_system(
96 ios, yield_[ec],
97 "none-existing-exe");
98
99 BOOST_CHECK(ec);
100 BOOST_CHECK_EQUAL(ret, -1);
101 BOOST_CHECK(did_something_else);
102 };
103
104 boost::asio::spawn(ios, stackful);
92f5a8d4 105 boost::asio::post(ios.get_executor(), [&]{did_something_else = true;});
b32b8144
FG
106 ios.run();
107
108 BOOST_CHECK(did_something_else);
92f5a8d4
TL
109}
110
111BOOST_AUTO_TEST_SUITE_END();