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 13/29] t/edit: switch to use run_script
  2019-11-15  9:50  7% [PATCH 00/29] speed up tests by preloading Eric Wong
@ 2019-11-15  9:50  3% ` Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2019-11-15  9:50 UTC (permalink / raw)
  To: meta

Perl parsing is slow, and run_script default behavior allows
this to speed up t/edit.t by over 100% in my case.
---
 t/edit.t | 65 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 32 insertions(+), 33 deletions(-)

diff --git a/t/edit.t b/t/edit.t
index 5cb66a65..09e0cddd 100644
--- a/t/edit.t
+++ b/t/edit.t
@@ -12,14 +12,12 @@ require PublicInbox::InboxWritable;
 require PublicInbox::Config;
 use PublicInbox::MID qw(mid_clean);
 
-my @mods = qw(IPC::Run DBI DBD::SQLite);
+my @mods = qw(DBI DBD::SQLite);
 foreach my $mod (@mods) {
 	eval "require $mod";
 	plan skip_all => "missing $mod for $0" if $@;
 };
-IPC::Run->import(qw(run));
 
-my $cmd_pfx = 'blib/script/public-inbox';
 my $tmpdir = tempdir('pi-edit-XXXXXX', TMPDIR => 1, CLEANUP => 1);
 my $inboxdir = "$tmpdir/v2";
 my $ibx = PublicInbox::Inbox->new({
@@ -42,12 +40,13 @@ ok($im->add($mime), 'add message to be edited');
 $im->done;
 my ($in, $out, $err, $cmd, $cur, $t);
 my $git = PublicInbox::Git->new("$ibx->{inboxdir}/git/0.git");
+my $opt = { 0 => \$in, 1 => \$out, 2 => \$err };
 
 $t = '-F FILE'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/boolean prefix/bool pfx/'";
-	$cmd = [ "$cmd_pfx-edit", "-F$file", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t edit OK");
+	$cmd = [ '-edit', "-F$file", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t edit OK");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->header('Subject'), qr/bool pfx/, "$t message edited");
 	like($out, qr/[a-f0-9]{40}/, "$t shows commit on success");
@@ -56,8 +55,8 @@ $t = '-F FILE'; {
 $t = '-m MESSAGE_ID'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/bool pfx/boolean prefix/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t edit OK");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t edit OK");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->header('Subject'), qr/boolean prefix/, "$t message edited");
 	like($out, qr/[a-f0-9]{40}/, "$t shows commit on success");
@@ -67,8 +66,8 @@ $t = 'no-op -m MESSAGE_ID'; {
 	$in = $out = $err = '';
 	my $before = $git->qx(qw(rev-parse HEAD));
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/bool pfx/boolean prefix/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds");
 	my $prev = $cur;
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	is_deeply($cur, $prev, "$t makes no change");
@@ -82,10 +81,9 @@ $t = 'no-op -m MESSAGE_ID'; {
 $t = 'no-op -m MESSAGE_ID w/Status: header'; { # because mutt does it
 	$in = $out = $err = '';
 	my $before = $git->qx(qw(rev-parse HEAD));
-	local $ENV{MAIL_EDITOR} =
-			"$^X -i -p -e 's/^Subject:.*/Status: RO\\n\$&/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds");
+	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^Subject:.*/Status: RO\\n\$&/'";
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds");
 	my $prev = $cur;
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	is_deeply($cur, $prev, "$t makes no change");
@@ -99,10 +97,9 @@ $t = 'no-op -m MESSAGE_ID w/Status: header'; { # because mutt does it
 
 $t = '-m MESSAGE_ID can change Received: headers'; {
 	$in = $out = $err = '';
-	local $ENV{MAIL_EDITOR} =
-			"$^X -i -p -e 's/^Subject:.*/Received: x\\n\$&/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds");
+	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^Subject:.*/Received: x\\n\$&/'";
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->header('Subject'), qr/boolean prefix/,
 		"$t does not change Subject");
@@ -112,16 +109,16 @@ $t = '-m MESSAGE_ID can change Received: headers'; {
 $t = '-m miss'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/boolean/FAIL/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid-miss", $inboxdir ];
-	ok(!run($cmd, \$in, \$out, \$err), "$t fails on invalid MID");
+	$cmd = [ '-edit', "-m$mid-miss", $inboxdir ];
+	ok(!run_script($cmd, undef, $opt), "$t fails on invalid MID");
 	like($err, qr/No message found/, "$t shows error");
 }
 
 $t = 'non-interactive editor failure'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 'END { exit 1 }'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(!run($cmd, \$in, \$out, \$err), "$t detected");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(!run_script($cmd, undef, $opt), "$t detected");
 	like($err, qr/END \{ exit 1 \}' failed:/, "$t shows error");
 }
 
@@ -132,9 +129,11 @@ $t = 'mailEditor set in config'; {
 			"$^X -i -p -e 's/boolean prefix/bool pfx/'");
 	is($rc, 0, 'set publicinbox.mailEditor');
 	local $ENV{MAIL_EDITOR};
+	delete $ENV{MAIL_EDITOR};
+	delete local $ENV{MAIL_EDITOR};
 	local $ENV{GIT_EDITOR} = 'echo should not run';
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t edited message");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t edited message");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->header('Subject'), qr/bool pfx/, "$t message edited");
 	unlike($out, qr/should not run/, 'did not run GIT_EDITOR');
@@ -143,21 +142,21 @@ $t = 'mailEditor set in config'; {
 $t = '--raw and mbox escaping'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^\$/\\nFrom not mbox\\n/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", '--raw', $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds");
+	$cmd = [ '-edit', "-m$mid", '--raw', $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->body, qr/^From not mbox/sm, 'put "From " line into body');
 
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^>From not/\$& an/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds with mbox escaping");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds with mbox escaping");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	like($cur->body, qr/^From not an mbox/sm,
 		'changed "From " line unescaped');
 
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^From not an mbox\\n//s'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", '--raw', $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds again");
+	$cmd = [ '-edit', "-m$mid", '--raw', $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds again");
 	$cur = PublicInbox::MIME->new($ibx->msg_by_mid($mid));
 	unlike($cur->body, qr/^From not an mbox/sm, "$t restored body");
 }
@@ -173,8 +172,8 @@ $t = 'reuse Message-ID'; {
 $t = 'edit ambiguous Message-ID with -m'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/bool pfx/boolean prefix/'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", $inboxdir ];
-	ok(!run($cmd, \$in, \$out, \$err), "$t fails w/o --force");
+	$cmd = [ '-edit', "-m$mid", $inboxdir ];
+	ok(!run_script($cmd, undef, $opt), "$t fails w/o --force");
 	like($err, qr/Multiple messages with different content found matching/,
 		"$t shows matches");
 	like($err, qr/GIT_DIR=.*git show/is, "$t shows git commands");
@@ -183,8 +182,8 @@ $t = 'edit ambiguous Message-ID with -m'; {
 $t .= ' and --force'; {
 	$in = $out = $err = '';
 	local $ENV{MAIL_EDITOR} = "$^X -i -p -e 's/^Subject:.*/Subject:x/i'";
-	$cmd = [ "$cmd_pfx-edit", "-m$mid", '--force', $inboxdir ];
-	ok(run($cmd, \$in, \$out, \$err), "$t succeeds");
+	$cmd = [ '-edit', "-m$mid", '--force', $inboxdir ];
+	ok(run_script($cmd, undef, $opt), "$t succeeds");
 	like($err, qr/Will edit all of them/, "$t notes all will be edited");
 	my @dump = $git->qx(qw(cat-file --batch --batch-all-objects));
 	chomp @dump;

^ permalink raw reply related	[relevance 3%]

* [PATCH 00/29] speed up tests by preloading
@ 2019-11-15  9:50  7% Eric Wong
  2019-11-15  9:50  3% ` [PATCH 13/29] t/edit: switch to use run_script Eric Wong
  0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2019-11-15  9:50 UTC (permalink / raw)
  To: meta

On my fastest system, this brings "make check" time down from
~17s to ~10s.  This also improves consistency of our test suite,
adds ENV{TAIL} support to all daemons, and removes the test-time
dependency on the IPC::Run module.

Several cleanups were necessary to limit the scope of some
references and minor bugs were found (and fixed) in preparation
for this.  Most of the changes were to explicitly pass global
variables into subs to avoid warnings.

TEST_RUN_MODE=0 can be set in the environment to restore
real-world behavior with (v)fork && execve.

Eric Wong (29):
  edit: pass global variables into subs
  edit: use OO API of File::Temp to shorten lifetime
  admin: get rid of singleton $CFG var
  index: pass global variables into subs
  init: pass global variables into subs
  mda: pass global variables into subs
  learn: pass global variables into subs
  inboxwritable: add ->cleanup method
  import: only pass Inbox object to SearchIdx->new
  xapcmd: do not fire END and DESTROY handlers in child
  spawn: which: allow embedded slash for relative path
  t/common: introduce run_script wrapper for t/cgi.t
  t/edit: switch to use run_script
  t/init: convert to using run_script
  t/purge: convert to run_script
  t/v2mirror: get rid of IPC::Run dependency
  t/mda: switch to run_script for testing
  t/mda_filter_rubylang: drop IPC::Run dependency
  doc: remove IPC::Run as a dev and test dependency
  t/v2mirror: switch to default run_mode for speedup
  t/convert-compact: convert to run_script
  t/httpd: use run_script for -init
  t/watch_maildir_v2: use run_script for -init
  t/nntpd: use run_script for -init
  t/watch_filter_rubylang: run_script for -init and -index
  t/v2mda: switch to run_script in many places
  t/indexlevels-mirror*: switch to run_script
  t/xcpdb-reshard: use run_script for -xcpdb
  t/common: start_script replaces spawn_listener

 INSTALL                          |   4 -
 ci/deps.perl                     |   1 -
 lib/PublicInbox/Admin.pm         |   9 +-
 lib/PublicInbox/Import.pm        |   4 +-
 lib/PublicInbox/InboxWritable.pm |   4 +
 lib/PublicInbox/Spawn.pm         |   2 +-
 lib/PublicInbox/Xapcmd.pm        |   5 +-
 script/public-inbox-edit         |  40 ++---
 script/public-inbox-index        |   3 +-
 script/public-inbox-init         |  27 +++-
 script/public-inbox-learn        |   8 +-
 script/public-inbox-mda          |  12 +-
 t/cgi.t                          |  16 +-
 t/common.perl                    | 248 ++++++++++++++++++++++++++++---
 t/convert-compact.t              |  18 +--
 t/edit.t                         |  65 ++++----
 t/git-http-backend.t             |  14 +-
 t/httpd-corner.t                 |  48 +++---
 t/httpd-https.t                  |  28 +---
 t/httpd-unix.t                   |  47 +++---
 t/httpd.t                        |  18 +--
 t/indexlevels-mirror.t           |  24 +--
 t/init.t                         |  85 +++++------
 t/mda.t                          |  53 ++++---
 t/mda_filter_rubylang.t          |  17 +--
 t/nntpd-tls.t                    |  29 +---
 t/nntpd-validate.t               |  27 ++--
 t/nntpd.t                        |  22 ++-
 t/perf-nntpd.t                   |  22 ++-
 t/purge.t                        |  20 +--
 t/v2mda.t                        |  38 ++---
 t/v2mirror.t                     |  55 +++----
 t/v2writable.t                   |   8 +-
 t/watch_filter_rubylang.t        |   6 +-
 t/watch_maildir_v2.t             |   4 +-
 t/www_listing.t                  |   8 +-
 t/xcpdb-reshard.t                |   5 +-
 37 files changed, 584 insertions(+), 460 deletions(-)


^ permalink raw reply	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-11-15  9:50  7% [PATCH 00/29] speed up tests by preloading Eric Wong
2019-11-15  9:50  3% ` [PATCH 13/29] t/edit: switch to use run_script 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).