]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/process/test/group.cpp
1 // Copyright (c) 2006, 2007 Julio M. Merino Vidal
2 // Copyright (c) 2008 Ilya Sokolov, Boris Schaeling
3 // Copyright (c) 2009 Boris Schaeling
4 // Copyright (c) 2010 Felipe Tanus, Boris Schaeling
5 // Copyright (c) 2011, 2012 Jeff Flinn, Boris Schaeling
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10 #define BOOST_TEST_MAIN
11 #define BOOST_TEST_IGNORE_SIGCHLD
12 #include <boost/test/included/unit_test.hpp>
14 #include <boost/system/error_code.hpp>
16 #include <boost/asio.hpp>
17 #include <boost/algorithm/string/predicate.hpp>
19 #include <boost/process/error.hpp>
20 #include <boost/process/io.hpp>
21 #include <boost/process/args.hpp>
22 #include <boost/process/child.hpp>
23 #include <boost/process/group.hpp>
24 #include <system_error>
32 namespace bp
= boost::process
;
34 BOOST_AUTO_TEST_CASE(group_test
, *boost::unit_test::timeout(5))
36 std::cout
<< "group_test" << std::endl
;
37 using boost::unit_test::framework::master_test_suite
;
44 master_test_suite().argv
[1],
48 BOOST_CHECK(c
.running());
51 BOOST_REQUIRE(c
.in_group());
53 BOOST_CHECK(c
.running());
55 BOOST_REQUIRE_NO_THROW(g
.terminate());
56 std::this_thread::sleep_for(std::chrono::milliseconds(50));
58 BOOST_CHECK(!c
.running());
62 std::cout
<< "group_test out" << std::endl
;
66 BOOST_AUTO_TEST_CASE(attached
, *boost::unit_test::timeout(5))
68 std::cout
<< "attached" << std::endl
;
70 using boost::unit_test::framework::master_test_suite
;
78 master_test_suite().argv
[1],
79 bp::args
+={"--launch-attached"},
85 BOOST_REQUIRE(c
.in_group(ec
));
93 is
>> pid
; //invalid pid.
97 std::this_thread::sleep_for(std::chrono::milliseconds(100)); //just to be sure.
100 #if defined( BOOST_POSIX_API )
101 ::waitpid(sub_c
.id(), nullptr, WNOHANG
);
102 BOOST_CHECK(kill(sub_c
.id(), 0) == 0);
104 BOOST_CHECK(sub_c
.running());
107 BOOST_REQUIRE_NO_THROW(g
.terminate());
110 std::this_thread::sleep_for(std::chrono::milliseconds(100)); //just to be sure.
112 BOOST_CHECK(!c
.running());
114 #if defined( BOOST_POSIX_API )
116 ::waitpid(sub_c
.id(), nullptr, WNOHANG
);
117 bool still_runs
= (kill(sub_c
.id(), 0) == 0) && (errno
!= ECHILD
) && (errno
!= ESRCH
);
119 bool still_runs
= sub_c
.running();
121 BOOST_CHECK_MESSAGE(!still_runs
, boost::process::detail::get_last_error().message());
125 BOOST_CHECK(!c
.running());
129 std::cout
<< "attached out" << std::endl
;
135 BOOST_AUTO_TEST_CASE(detached
, *boost::unit_test::timeout(5))
137 std::cerr
<< "detached" << std::endl
;
139 using boost::unit_test::framework::master_test_suite
;
148 master_test_suite().argv
[1],
149 bp::args
+={"--launch-detached"},
161 bp::child
sub_c(pid
);
163 std::this_thread::sleep_for(std::chrono::milliseconds(50)); //just to be sure.
165 #if defined( BOOST_POSIX_API )
166 BOOST_CHECK(kill(sub_c
.id(), 0) == 0);
168 BOOST_CHECK(sub_c
.running());
171 BOOST_REQUIRE_NO_THROW(g
.terminate());
174 std::this_thread::sleep_for(std::chrono::milliseconds(50)); //just to be sure.
176 #if defined( BOOST_POSIX_API )
177 bool still_runs
= kill(sub_c
.id(), 0) == 0;
179 bool still_runs
= sub_c
.running();
182 BOOST_CHECK(still_runs
);
186 BOOST_CHECK(!c
.running());
190 std::cerr
<< "detached out" << std::endl
;