]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/process/test/async_system.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / process / test / async_system.cpp
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>
18 #include <boost/asio/spawn.hpp>
19 #include <boost/asio/coroutine.hpp>
20 #include <boost/asio/use_future.hpp>
21 #include <boost/asio/yield.hpp>
22
23 #include <vector>
24 #include <array>
25
26 namespace bp = boost::process;
27 BOOST_AUTO_TEST_CASE(stackful, *boost::unit_test::timeout(15))
28 {
29 using boost::unit_test::framework::master_test_suite;
30
31 bool did_something_else = false;
32
33 boost::asio::io_context ios;
34 auto stackful =
35 [&](boost::asio::yield_context yield_)
36 {
37 int ret =
38 bp::async_system(
39 ios, yield_,
40 master_test_suite().argv[1],
41 "test", "--exit-code", "123");
42
43 BOOST_CHECK_EQUAL(ret, 123);
44 BOOST_CHECK(did_something_else);
45 };
46
47 boost::asio::spawn(ios, stackful);
48 ios.post([&]{did_something_else = true;});
49
50 ios.run();
51 BOOST_CHECK(did_something_else);
52 }
53
54 BOOST_AUTO_TEST_CASE(stackful_except, *boost::unit_test::timeout(15))
55 {
56 using boost::unit_test::framework::master_test_suite;
57
58 bool did_something_else = false;
59
60 boost::asio::io_context ios;
61 auto stackful =
62 [&](boost::asio::yield_context yield_)
63 {
64
65 BOOST_CHECK_THROW(
66 bp::async_system(
67 ios, yield_,
68 "none-existing-exe"), boost::system::system_error);
69
70 BOOST_CHECK(did_something_else);
71 };
72
73 boost::asio::spawn(ios, stackful);
74 ios.post([&]{did_something_else = true;});
75 ios.run();
76
77 BOOST_CHECK(did_something_else);
78 }
79
80
81 BOOST_AUTO_TEST_CASE(stackful_error, *boost::unit_test::timeout(15))
82 {
83 using boost::unit_test::framework::master_test_suite;
84
85 bool did_something_else = false;
86
87 boost::asio::io_context ios;
88 auto stackful =
89 [&](boost::asio::yield_context yield_)
90 {
91 boost::system::error_code ec;
92 auto ret =
93 bp::async_system(
94 ios, yield_[ec],
95 "none-existing-exe");
96
97 BOOST_CHECK(ec);
98 BOOST_CHECK_EQUAL(ret, -1);
99 BOOST_CHECK(did_something_else);
100 };
101
102 boost::asio::spawn(ios, stackful);
103 ios.post([&]{did_something_else = true;});
104 ios.run();
105
106 BOOST_CHECK(did_something_else);
107 }