]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/process/test/async_system.cpp
1 // Copyright (c) 2016 Klemens D. Morgenstern
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)
6 #define BOOST_TEST_MAIN
7 #define BOOST_TEST_IGNORE_SIGCHLD
8 #include <boost/test/included/unit_test.hpp>
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>
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>
26 namespace bp
= boost::process
;
27 BOOST_AUTO_TEST_CASE(stackful
, *boost::unit_test::timeout(15))
29 using boost::unit_test::framework::master_test_suite
;
31 bool did_something_else
= false;
33 boost::asio::io_context ios
;
35 [&](boost::asio::yield_context yield_
)
40 master_test_suite().argv
[1],
41 "test", "--exit-code", "123");
43 BOOST_CHECK_EQUAL(ret
, 123);
44 BOOST_CHECK(did_something_else
);
47 boost::asio::spawn(ios
, stackful
);
48 ios
.post([&]{did_something_else
= true;});
51 BOOST_CHECK(did_something_else
);
54 BOOST_AUTO_TEST_CASE(stackful_except
, *boost::unit_test::timeout(15))
56 using boost::unit_test::framework::master_test_suite
;
58 bool did_something_else
= false;
60 boost::asio::io_context ios
;
62 [&](boost::asio::yield_context yield_
)
68 "none-existing-exe"), boost::system::system_error
);
70 BOOST_CHECK(did_something_else
);
73 boost::asio::spawn(ios
, stackful
);
74 ios
.post([&]{did_something_else
= true;});
77 BOOST_CHECK(did_something_else
);
81 BOOST_AUTO_TEST_CASE(stackful_error
, *boost::unit_test::timeout(15))
83 using boost::unit_test::framework::master_test_suite
;
85 bool did_something_else
= false;
87 boost::asio::io_context ios
;
89 [&](boost::asio::yield_context yield_
)
91 boost::system::error_code ec
;
98 BOOST_CHECK_EQUAL(ret
, -1);
99 BOOST_CHECK(did_something_else
);
102 boost::asio::spawn(ios
, stackful
);
103 ios
.post([&]{did_something_else
= true;});
106 BOOST_CHECK(did_something_else
);