summaryrefslogtreecommitdiffstats
path: root/src/subprocess_test.cc
diff options
context:
space:
mode:
authorNicolas Despres <nicolas.despres@gmail.com>2014-04-16 08:05:25 (GMT)
committerNicolas Despres <nicolas.despres@gmail.com>2015-04-24 14:40:03 (GMT)
commitb4bc5cf7c924be251a5c8abdfca58f47c3f5c185 (patch)
treead8fd16c3285fb8582734148663b8ce18d7cc77c /src/subprocess_test.cc
parentb2b8f3a12d3323c4273aa63460f482d6f7f03211 (diff)
downloadNinja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.zip
Ninja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.tar.gz
Ninja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.tar.bz2
Allow SIGTERM for interruption.
Default signal sent by many other programs (mainly kill(1)) to gently terminates another one is SIGTERM.
Diffstat (limited to 'src/subprocess_test.cc')
-rw-r--r--src/subprocess_test.cc26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/subprocess_test.cc b/src/subprocess_test.cc
index 1838c43..07cc52f 100644
--- a/src/subprocess_test.cc
+++ b/src/subprocess_test.cc
@@ -98,6 +98,30 @@ TEST_F(SubprocessTest, InterruptParent) {
ASSERT_FALSE("We should have been interrupted");
}
+TEST_F(SubprocessTest, InterruptChildWithSigTerm) {
+ Subprocess* subproc = subprocs_.Add("kill -TERM $$");
+ ASSERT_NE((Subprocess *) 0, subproc);
+
+ while (!subproc->Done()) {
+ subprocs_.DoWork();
+ }
+
+ EXPECT_EQ(ExitInterrupted, subproc->Finish());
+}
+
+TEST_F(SubprocessTest, InterruptParentWithSigTerm) {
+ Subprocess* subproc = subprocs_.Add("kill -TERM $PPID ; sleep 1");
+ ASSERT_NE((Subprocess *) 0, subproc);
+
+ while (!subproc->Done()) {
+ bool interrupted = subprocs_.DoWork();
+ if (interrupted)
+ return;
+ }
+
+ ASSERT_FALSE("We should have been interrupted");
+}
+
// A shell command to check if the current process is connected to a terminal.
// This is different from having stdin/stdout/stderr be a terminal. (For
// instance consider the command "yes < /dev/null > /dev/null 2>&1".
@@ -221,7 +245,7 @@ TEST_F(SubprocessTest, SetWithLots) {
}
ASSERT_EQ(kNumProcs, subprocs_.finished_.size());
}
-#endif // !__APPLE__ && !_WIN32
+#endif // !__APPLE__ && !_WIN32
// TODO: this test could work on Windows, just not sure how to simply
// read stdin.