about summary refs log tree commit homepage
path: root/t
diff options
context:
space:
mode:
authorThiago Jung Bauermann <bauermann@kolabnow.com>2022-06-10 12:39:18 -0300
committerEric Wong <e@80x24.org>2022-06-11 00:21:46 +0000
commit5593489d9c3ce22b1942f35c7ebb0e06fcf2bfa8 (patch)
tree33555e33f679fac416a7b8e5340898eab9b3cb26 /t
parent60848de2194f0c518bd660860e9458dd765d0a3e (diff)
downloadpublic-inbox-5593489d9c3ce22b1942f35c7ebb0e06fcf2bfa8.tar.gz
In the container used to build packages of the GNU Guix distribution, PID 1
runs as the same user as the test so this spawn that should fail actually
succeeds.

Fix the problem by going through different PIDs and picking one that
either doesn't exist or we aren't allowed to signal.
Diffstat (limited to 't')
-rw-r--r--t/spawn.t13
1 files changed, 12 insertions, 1 deletions
diff --git a/t/spawn.t b/t/spawn.t
index 6168c1f6..5fc99a2a 100644
--- a/t/spawn.t
+++ b/t/spawn.t
@@ -24,7 +24,18 @@ SKIP: {
         is(waitpid($pid, 0), $pid, 'waitpid succeeds on spawned process');
         is($?, 0, 'true exited successfully');
         pipe(my ($r, $w)) or BAIL_OUT;
-        $pid = eval { spawn(['true'], undef, { pgid => 1, 2 => $w }) };
+
+        # Find invalid PID to try to join its process group.
+        my $wrong_pgid = 1;
+        for (my $i=0x7fffffff; $i >= 2; $i--) {
+                if (kill(0, $i) == 0) {
+                        $wrong_pgid = $i;
+                        last;
+                }
+        }
+
+        # Test spawn behavior when it can't join the requested process group.
+        $pid = eval { spawn(['true'], undef, { pgid => $wrong_pgid, 2 => $w }) };
         close $w;
         my $err = do { local $/; <$r> };
         # diag "$err ($@)";