Add a test to verify that processes get the right pgrps in pipelines

This commit is contained in:
ridiculousfish 2019-12-08 13:28:30 -08:00
parent d47541a3d7
commit 92a16921bf
2 changed files with 34 additions and 0 deletions

View file

@ -52,6 +52,8 @@ static void print_pid_then_sleep() {
usleep(1000000 / .5); //.5 secs
}
static void print_pgrp() { fprintf(stdout, "%d\n", getpgrp()); }
int main(int argc, char *argv[]) {
if (argc <= 1) {
fprintf(stderr, "No commands given.\n");
@ -68,6 +70,8 @@ int main(int argc, char *argv[]) {
print_stdout_stderr();
} else if (!strcmp(argv[i], "print_pid_then_sleep")) {
print_pid_then_sleep();
} else if (!strcmp(argv[i], "print_pgrp")) {
print_pgrp();
} else {
fprintf(stderr, "%s: Unknown command: %s\n", argv[0], argv[i]);
return EXIT_FAILURE;

View file

@ -0,0 +1,30 @@
# RUN: env fth=%fish_test_helper %fish %s
# Ensure that lots of nested jobs all end up in the same pgroup.
function save_pgroup -a var_name
$fth print_pgrp | read -g $var_name
end
# Here everything should live in the pgroup of the first fish_test_helper.
$fth print_pgrp | read -g global_group | save_pgroup g1 | begin; save_pgroup g2; end
[ "$global_group" -eq "$g1" ] && [ "$g1" -eq "$g2" ]
and echo "All pgroups agreed"
or echo "Pgroups disagreed. Should be in $global_group but found $g1 and $g2"
# CHECK: All pgroups agreed
# Here everything should live in fish's pgroup.
# Unfortunately we don't know what fish's pgroup is (it may not be fish's pid).
# So run it twice and verify that everything agrees; this implies that it could
# not have used any of the pids of the child procs.
function nothing ; end
nothing | $fth print_pgrp | read -g a0 | save_pgroup a1 | begin; save_pgroup a2; end
nothing | $fth print_pgrp | read -g b0 | save_pgroup b1 | begin; save_pgroup b2; end
[ "$a0" -eq "$a1" ] && [ "$a1" -eq "$a2" ] \
&& [ "$b0" -eq "$b1" ] && [ "$b1" -eq "$b2" ] \
&& [ "$a0" -eq "$b0" ]
and echo "All pgroups agreed"
or echo "Pgroups disagreed. Found $a0 $a1 $a2, and $b0 $b1 $b2"
# CHECK: All pgroups agreed