From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-3.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 7C54B1FC0B for ; Sat, 6 Feb 2021 12:18:45 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 09/17] t/tests: split out setup_public_inboxes sub Date: Sat, 6 Feb 2021 12:18:36 +0000 Message-Id: <20210206121844.10979-10-e@80x24.org> In-Reply-To: <20210206121844.10979-1-e@80x24.org> References: <20210206121844.10979-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We'll probably use this in many more existing places and likely change non-lei tests to use it. --- MANIFEST | 3 +++ Makefile.PL | 3 +++ lib/PublicInbox/TestCommon.pm | 50 +++++++++++++++++++++++++++++++++-- t/home1/.gitignore | 5 ++++ t/home1/Makefile | 7 +++++ t/home1/README | 8 ++++++ t/lei-externals.t | 35 ++---------------------- 7 files changed, 76 insertions(+), 35 deletions(-) create mode 100644 t/home1/.gitignore create mode 100644 t/home1/Makefile create mode 100644 t/home1/README diff --git a/MANIFEST b/MANIFEST index c7fe4fb5..000834cc 100644 --- a/MANIFEST +++ b/MANIFEST @@ -328,6 +328,9 @@ t/git.fast-import-data t/git.t t/gzip_filter.t t/hl_mod.t +t/home1/.gitignore +t/home1/Makefile +t/home1/README t/html_index.t t/httpd-corner.psgi t/httpd-corner.t diff --git a/Makefile.PL b/Makefile.PL index b9e0a8cd..68545573 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -172,6 +172,9 @@ WriteMakefile( # ExtUtils::MakeMaker # this file won't run w/o it... }, MAN3PODS => \%man3, + clean => { + FILES => 't/home1/setup* t/home1/t* t/home1/.public-inbox' + }, ); sub MY::postamble { diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 2b78731b..bb2cd7e6 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -13,7 +13,7 @@ our @EXPORT; BEGIN { @EXPORT = qw(tmpdir tcp_server tcp_connect require_git require_mods run_script start_script key2sub xsys xsys_e xqx eml_load tick - have_xapian_compact json_utf8 + have_xapian_compact json_utf8 setup_public_inboxes test_lei $lei $lei_out $lei_err $lei_opt); require Test::More; my @methods = grep(!/\W/, @Test::More::EXPORT); @@ -498,7 +498,53 @@ EOM ok(!kill(0, $daemon_pid), "$t daemon stopped after oneshot"); } }; # SKIP if missing git 2.6+ || Xapian || SQLite || json -} +} # /test_lei + +# returns the pathname to a ~/.public-inbox/config in scalar context, +# ($test_home, $pi_config_pathname) in list context +sub setup_public_inboxes () { + my $test_home = "t/home1"; + my $pi_config = "$test_home/.public-inbox/config"; + my $stamp = "$test_home/setup-stamp"; + my @ret = ($test_home, $pi_config); + return @ret if -f $stamp; + + require PublicInbox::Lock; + my $lk = bless { lock_path => "$test_home/setup.lock" }, + 'PublicInbox::Lock'; + my $end = $lk->lock_for_scope; + return @ret if -f $stamp; + + require PublicInbox::InboxWritable; + local $ENV{PI_CONFIG} = $pi_config; + for my $V (1, 2) { + run_script([qw(-init), "-V$V", "t$V", + '--newsgroup', "t.$V", + "$test_home/t$V", "http://example.com/t$V", + "t$V\@example.com" ]) or BAIL_OUT "init v$V"; + } + my $cfg = PublicInbox::Config->new; + my $seen = 0; + $cfg->each_inbox(sub { + my ($ibx) = @_; + my $im = PublicInbox::InboxWritable->new($ibx)->importer(0); + my $V = $ibx->version; + my @eml = (glob('t/*.eml'), 't/data/0001.patch'); + for (@eml) { + next if $_ eq 't/psgi_v2-old.eml'; # dup mid + $im->add(eml_load($_)) or BAIL_OUT "v$V add $_"; + $seen++; + } + $im->done; + if ($V == 1) { + run_script(['-index', $ibx->{inboxdir}]) or + BAIL_OUT 'index v1'; + } + }); + $seen or BAIL_OUT 'no imports'; + open my $fh, '>', $stamp or BAIL_OUT "open $stamp: $!"; + @ret; +}; package PublicInboxTestProcess; use strict; diff --git a/t/home1/.gitignore b/t/home1/.gitignore new file mode 100644 index 00000000..b97d81e6 --- /dev/null +++ b/t/home1/.gitignore @@ -0,0 +1,5 @@ +/.public-inbox +/t1 +/t2 +/setup.lock +/setup-stamp diff --git a/t/home1/Makefile b/t/home1/Makefile new file mode 100644 index 00000000..9d4895dc --- /dev/null +++ b/t/home1/Makefile @@ -0,0 +1,7 @@ +all :: + +help :: + @cat README + +clean :: + $(RM) -rf t1 t2 .public-inbox setup-stamp setup-lock diff --git a/t/home1/README b/t/home1/README new file mode 100644 index 00000000..1ba87891 --- /dev/null +++ b/t/home1/README @@ -0,0 +1,8 @@ +This directory is for read-only test inboxes and will be shared +between various tests. + +See setup_publicinboxes() in lib/PublicInbox/TestCommon.pm. + +It is versioned (currently "1" in "home1") and will be renamed +"home2" and so forth if the data created by setup_publicinboxes() +changes. diff --git a/t/lei-externals.t b/t/lei-externals.t index 739f779d..f2cb09b4 100644 --- a/t/lei-externals.t +++ b/t/lei-externals.t @@ -9,37 +9,6 @@ my @onions = qw(http://hjrcffqmbrq6wope.onion/meta/ http://czquwvybam4bgbro.onion/meta/ http://ou63pmih66umazou.onion/meta/); -# TODO share this across tests, it takes ~300ms -my $setup_publicinboxes = sub { - my ($home) = @_; - use PublicInbox::InboxWritable; - for my $V (1, 2) { - run_script([qw(-init), "-V$V", "t$V", - '--newsgroup', "t.$V", - "$home/t$V", "http://example.com/t$V", - "t$V\@example.com" ]) or BAIL_OUT "init v$V"; - } - my $cfg = PublicInbox::Config->new; - my $seen = 0; - $cfg->each_inbox(sub { - my ($ibx) = @_; - my $im = PublicInbox::InboxWritable->new($ibx)->importer(0); - my $V = $ibx->version; - my @eml = (glob('t/*.eml'), 't/data/0001.patch'); - for (@eml) { - next if $_ eq 't/psgi_v2-old.eml'; # dup mid - $im->add(eml_load($_)) or BAIL_OUT "v$V add $_"; - $seen++; - } - $im->done; - if ($V == 1) { - run_script(['-index', $ibx->{inboxdir}]) or - BAIL_OUT 'index v1'; - } - }); - $seen || BAIL_OUT 'no imports'; -}; - my $test_external_remote = sub { my ($url, $k) = @_; SKIP: { @@ -59,9 +28,9 @@ SKIP: { } # /SKIP }; # /sub +my ($ro_home, $cfg_path) = setup_public_inboxes; test_lei(sub { my $home = $ENV{HOME}; - $setup_publicinboxes->($home); my $config_file = "$home/.config/lei/config"; my $store_dir = "$home/.local/share/lei"; ok($lei->('ls-external'), 'ls-external works'); @@ -73,7 +42,7 @@ test_lei(sub { "fails on non-existent dir"); ok($lei->('ls-external'), 'ls-external works after add failure'); is($lei_out.$lei_err, '', 'ls-external still has no output'); - my $cfg = PublicInbox::Config->new; + my $cfg = PublicInbox::Config->new($cfg_path); $cfg->each_inbox(sub { my ($ibx) = @_; ok($lei->(qw(add-external -q), $ibx->{inboxdir}),