]> Sergey Matveev's repositories - public-inbox.git/commitdiff
t/tests: split out setup_public_inboxes sub
authorEric Wong <e@80x24.org>
Sat, 6 Feb 2021 12:18:36 +0000 (12:18 +0000)
committerEric Wong <e@80x24.org>
Sun, 7 Feb 2021 03:34:32 +0000 (03:34 +0000)
We'll probably use this in many more existing places
and likely change non-lei tests to use it.

MANIFEST
Makefile.PL
lib/PublicInbox/TestCommon.pm
t/home1/.gitignore [new file with mode: 0644]
t/home1/Makefile [new file with mode: 0644]
t/home1/README [new file with mode: 0644]
t/lei-externals.t

index c7fe4fb53e3b0c22ddbce89b54ec59ade52ce7f9..000834ccacf735ded8476019ba1edc1bc1a20cb8 100644 (file)
--- 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
index b9e0a8cd291e5ba65c4ac812e2efc840f7bd0aca..68545573501659a58f4cbfae0a4f514e530c6cb8 100644 (file)
@@ -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 {
index 2b78731b8e54ec877c9fdc9631afaf823b94a95e..bb2cd7e6629c5938a0ebf56d690a1cb17db5b843 100644 (file)
@@ -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 (file)
index 0000000..b97d81e
--- /dev/null
@@ -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 (file)
index 0000000..9d4895d
--- /dev/null
@@ -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 (file)
index 0000000..1ba8789
--- /dev/null
@@ -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.
index 739f779da41de2402e2c59e1ce72df21d1d78109..f2cb09b4d2e7853d0ad19e806465bebd8d239ce9 100644 (file)
@@ -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}),