]> Sergey Matveev's repositories - public-inbox.git/blobdiff - t/init.t
init+convert: create non-existing directory hierarchies
[public-inbox.git] / t / init.t
index 94c6184ed891a3760c0f102ad3fdbc44c9683dd2..dba59231c71ed245b7dde33bc523f1aac377f721 100644 (file)
--- a/t/init.t
+++ b/t/init.t
@@ -49,11 +49,36 @@ sub quiet_fail {
        ok(unlink("$cfgfile.lock"),
                '-init did not unlink lock on failure');
 }
+{
+       my $env = { PI_DIR => "$tmpdir/.public-inbox/" };
+       my $rdr = { 2 => \(my $err = '') };
+       my $cmd = [ '-init', 'alist', "$tmpdir/a\nlist",
+                  qw(http://example.com/alist alist@example.com) ];
+       ok(!run_script($cmd, $env, $rdr),
+               'public-inbox-init rejects LF in inboxdir');
+       like($err, qr/`\\n' not allowed in `/s, 'reported \\n');
+       is_deeply([glob("$tmpdir/.public-inbox/pi-init-*")], [],
+               'no junk files left behind');
+
+       # "git init" does this, too
+       $cmd = [ '-init', 'deep-non-existent', "$tmpdir/a/b/c/d",
+                  qw(http://example.com/abcd abcd@example.com) ];
+       $err = '';
+       ok(run_script($cmd, $env, $rdr), 'initializes non-existent hierarchy');
+       ok(-d "$tmpdir/a/b/c/d", 'directory created');
+       open my $fh, '>', "$tmpdir/d" or BAIL_OUT "open: $!";
+       close $fh;
+       $cmd = [ '-init', 'd-f-conflict', "$tmpdir/d/f/conflict",
+                  qw(http://example.com/conflict onflict@example.com) ];
+       ok(!run_script($cmd, $env, $rdr), 'fails on D/F conflict');
+}
 
 SKIP: {
        require_mods(qw(DBD::SQLite Search::Xapian::WritableDatabase), 2);
        require_git(2.6, 1) or skip "git 2.6+ required", 2;
+       use_ok 'PublicInbox::Msgmap';
        local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
+       local $ENV{PI_EMERGENCY} = "$tmpdir/.public-inbox/emergency";
        my $cfgfile = "$ENV{PI_DIR}/config";
        my $cmd = [ '-init', '-V2', 'v2list', "$tmpdir/v2list",
                   qw(http://example.com/v2list v2list@example.com) ];
@@ -82,6 +107,20 @@ SKIP: {
                my $ibx = PublicInbox::Inbox->new({ inboxdir => $dir });
                is(PublicInbox::Admin::detect_indexlevel($ibx), $lvl,
                        'detected expected level w/o config');
+               ok(!$ibx->{-skip_docdata}, 'docdata written by default');
+       }
+       for my $v (1, 2) {
+               my $name = "v$v-skip-docdata";
+               my $dir = "$tmpdir/$name";
+               $cmd = [ '-init', $name, "-V$v", '--skip-docdata',
+                       $dir, "http://example.com/$name",
+                       "$name\@example.com" ];
+               ok(run_script($cmd), "-init -V$v --skip-docdata");
+               my $ibx = PublicInbox::Inbox->new({ inboxdir => $dir });
+               is(PublicInbox::Admin::detect_indexlevel($ibx), 'full',
+                       "detected default indexlevel -V$v");
+               ok($ibx->{-skip_docdata}, "docdata skip set -V$v");
+               ok($ibx->search->has_threadid, 'has_threadid flag set on new inbox');
        }
 
        # loop for idempotency
@@ -93,12 +132,40 @@ SKIP: {
                is_deeply($gits, ["$tmpdir/skip1/git/1.git"], 'skip OK');
        }
 
-
        $cmd = [ '-init', '-V2', '--skip-epoch=2', 'skip2', "$tmpdir/skip2",
                   qw(http://example.com/skip2 skip2@example.com) ];
        ok(run_script($cmd), "--skip-epoch 2");
        my $gits = [ glob("$tmpdir/skip2/git/*.git") ];
        is_deeply($gits, ["$tmpdir/skip2/git/2.git"], 'skipping 2 works, too');
+
+       xsys(qw(git config), "--file=$ENV{PI_DIR}/config",
+                       'publicinboxmda.spamcheck', 'none') == 0 or
+                       BAIL_OUT "git config $?";
+       my $addr = 'skip3@example.com';
+       $cmd = [ qw(-init -V2 -Lbasic --skip-artnum=12 skip3), "$tmpdir/skip3",
+                  qw(http://example.com/skip3), $addr ];
+       ok(run_script($cmd), '--skip-artnum -V2');
+       my $env = { ORIGINAL_RECIPIENT => $addr };
+       my $mid = 'skip-artnum@example.com';
+       my $msg = "Message-ID: <$mid>\n\n";
+       my $rdr = { 0 => \$msg, 2 => \(my $err = '')  };
+       ok(run_script([qw(-mda --no-precheck)], $env, $rdr), 'deliver V1');
+       diag "err=$err" if $err;
+       my $mm = PublicInbox::Msgmap->new_file("$tmpdir/skip3/msgmap.sqlite3");
+       my $n = $mm->num_for($mid);
+       is($n, 13, 'V2 NNTP article numbers skipped via --skip-artnum');
+
+       $addr = 'skip4@example.com';
+       $env = { ORIGINAL_RECIPIENT => $addr };
+       $cmd = [ qw(-init -V1 --skip-artnum 12 -Lmedium skip4), "$tmpdir/skip4",
+                  qw(http://example.com/skip4), $addr ];
+       ok(run_script($cmd), '--skip-artnum -V1');
+       $err = '';
+       ok(run_script([qw(-mda --no-precheck)], $env, $rdr), 'deliver V1');
+       diag "err=$err" if $err;
+       $mm = PublicInbox::Msgmap->new("$tmpdir/skip4");
+       $n = $mm->num_for($mid);
+       is($n, 13, 'V1 NNTP article numbers skipped via --skip-artnum');
 }
 
 done_testing();