user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH] t/lei-import: skip strace for restricted systems
@ 2023-11-10 22:26  7% Eric Wong
  0 siblings, 0 replies; 1+ results
From: Eric Wong @ 2023-11-10 22:26 UTC (permalink / raw)
  To: meta

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)),

^ permalink raw reply related	[relevance 7%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2023-11-10 22:26  7% [PATCH] t/lei-import: skip strace for restricted systems Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).