]> Sergey Matveev's repositories - public-inbox.git/commitdiff
t/spawn: Find invalid PID to try to join its process group
authorThiago Jung Bauermann <bauermann@kolabnow.com>
Fri, 10 Jun 2022 15:39:18 +0000 (12:39 -0300)
committerEric Wong <e@80x24.org>
Sat, 11 Jun 2022 00:21:46 +0000 (00:21 +0000)
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.

t/spawn.t

index 6168c1f6171c83919efefa91d7194a5a8b069c1b..5fc99a2a101c8c2c83466e515a84bba471b9546e 100644 (file)
--- 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;
        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 ($@)";
        close $w;
        my $err = do { local $/; <$r> };
        # diag "$err ($@)";