From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 75F051F406 for ; Fri, 10 Nov 2023 22:26:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1699655193; bh=jvQHMq4slNkDk98SdpgqZeb3dOAQ/oQ2tpz/q6lZYm0=; h=From:To:Subject:Date:From; b=RTY6mmHrt2uNizwEUQO7UTFfgw+17vLw7fGQY3nbOUW7x+V5jHEjFszcLaLo1/4gt S4ZtjE6qvxfLF5AwOhu2VmSXULRC8/S/1t6z3lscFmB6ZxZmokyVW+U1/5Jt5Ua2YD FMY7anOywo/xsNyN3VrO+gH9R2AepHGnTTE0Thsk= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] t/lei-import: skip strace for restricted systems Date: Fri, 10 Nov 2023 22:26:33 +0000 Message-ID: <20231110222633.1647654-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Systems with Yama can restrict ptrace(2) (the underlying syscall used by strace(1)) and make it difficult to test error handling via error injection. Just skip the tests on such systems since it's probably not worth the effort to start using prctl(2) to enable the test on such systems. --- lib/PublicInbox/TestCommon.pm | 18 +++++++++++++++--- t/lei-import.t | 7 +++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 46e6a538..b84886a0 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -935,13 +935,25 @@ sub cfg_new ($;@) { } our $strace_cmd; -sub strace () { +sub strace (@) { + my ($for_daemon) = @_; skip 'linux only test' if $^O ne 'linux'; + if ($for_daemon) { + my $f = '/proc/sys/kernel/yama/ptrace_scope'; + # TODO: we could fiddle with prctl in the daemon to make + # things work, but I'm not sure it's worth it... + state $ps = do { + my $fh; + CORE::open($fh, '<', $f) ? readline($fh) : 0; + }; + chomp $ps; + skip "strace unusable on daemons\n$f is `$ps' (!= 0)" if $ps; + } require_cmd('strace', 1); } -sub strace_inject () { - my $cmd = strace; +sub strace_inject (;$) { + my $cmd = strace(@_); state $ver = do { require PublicInbox::Spawn; my $v = PublicInbox::Spawn::run_qx([$cmd, '--version']); diff --git a/t/lei-import.t b/t/lei-import.t index 6ad4c97b..1edd607d 100644 --- a/t/lei-import.t +++ b/t/lei-import.t @@ -155,19 +155,18 @@ do { like($lei_out, qr/\bbin\b/, 'commit-delay eventually commits'); SKIP: { - my $strace = strace_inject; # skips if strace is old or non-Linux + my $strace = strace_inject(1); # skips if strace is old or non-Linux my $tmpdir = tmpdir; my $tr = "$tmpdir/tr"; - my $cmd = [ $strace, "-o$tr", '-f', + my $cmd = [ $strace, '-q', "-o$tr", '-f', "-P", File::Spec->rel2abs('t/plack-qp.eml'), '-e', 'inject=readv,read:error=EIO']; lei_ok qw(daemon-pid); chomp(my $daemon_pid = $lei_out); push @$cmd, '-p', $daemon_pid; - my $strace_opt = { 1 => \my $out, 2 => \my $err }; require PublicInbox::Spawn; require PublicInbox::AutoReap; - my $pid = PublicInbox::Spawn::spawn($cmd, \%ENV, $strace_opt); + my $pid = PublicInbox::Spawn::spawn($cmd, \%ENV); my $ar = PublicInbox::AutoReap->new($pid); tick; # wait for strace to attach ok(!lei(qw(import -F eml t/plack-qp.eml)),