X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Finit.t;h=460c83f3dd604e2c2f48cc91cfbd7dc425aee416;hb=41fa2087a511d56b4f44271d8ba62675b449bc07;hp=dba59231c71ed245b7dde33bc523f1aac377f721;hpb=4c2bdcca098792bf1c7fb19d7779d05c436a2f78;p=public-inbox.git
diff --git a/t/init.t b/t/init.t
index dba59231..460c83f3 100644
--- a/t/init.t
+++ b/t/init.t
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 all contributors
+# Copyright (C) 2014-2021 all contributors
# License: AGPL-3.0+
use strict;
use warnings;
@@ -6,7 +6,6 @@ use Test::More;
use PublicInbox::Config;
use PublicInbox::TestCommon;
use PublicInbox::Admin;
-use File::Basename;
my ($tmpdir, $for_destroy) = tmpdir();
sub quiet_fail {
my ($cmd, $msg) = @_;
@@ -48,6 +47,40 @@ sub quiet_fail {
is($? >> 8, 255, 'got expected exit code on lock failure');
ok(unlink("$cfgfile.lock"),
'-init did not unlink lock on failure');
+
+ my @init_args = ('i', "$tmpdir/i",
+ qw(http://example.com/i i@example.com));
+ $cmd = [ qw(-init -c .bogus=val), @init_args ];
+ quiet_fail($cmd, 'invalid -c KEY=VALUE fails');
+ $cmd = [ qw(-init -c .bogus=val), @init_args ];
+ quiet_fail($cmd, '-c KEY-only fails');
+ $cmd = [ qw(-init -c address=clist@example.com), @init_args ];
+ quiet_fail($cmd, '-c address=CONFLICTING-VALUE fails');
+
+ $cmd = [ qw(-init -c no=problem -c no=problemo), @init_args ];
+ ok(run_script($cmd), '-c KEY=VALUE runs');
+ my $env = { GIT_CONFIG => "$ENV{PI_DIR}/config" };
+ chomp(my @v = xqx([qw(git config --get-all publicinbox.i.no)], $env));
+ is_deeply(\@v, [ qw(problem problemo) ]) or xbail(\@v);
+
+ ok(run_script($cmd), '-c KEY=VALUE runs idempotently');
+ chomp(my @v2 = xqx([qw(git config --get-all publicinbox.i.no)], $env));
+ is_deeply(\@v, \@v2, 'nothing repeated') or xbail(\@v2);
+
+ ok(run_script([@$cmd, '-c', 'no=more']), '-c KEY=VALUE addendum');
+ chomp(@v = xqx([qw(git config --get-all publicinbox.i.no)], $env));
+ is_deeply(\@v, [ qw(problem problemo more) ]) or xbail(\@v);
+
+
+ ok(run_script([@$cmd, '-c', 'no=problem']), '-c KEY=VALUE repeated');
+ chomp(@v = xqx([qw(git config --get-all publicinbox.i.no)], $env));
+ is_deeply(\@v, [ qw(problem problemo more) ]) or xbail(\@v);
+
+ ok(run_script([@$cmd, '-c', 'address=j@example.com']),
+ '-c KEY=VALUE address');
+ chomp(@v = xqx([qw(git config --get-all publicinbox.i.address)], $env));
+ is_deeply(\@v, [ qw(i@example.com j@example.com) ],
+ 'extra address added via -c KEY=VALUE');
}
{
my $env = { PI_DIR => "$tmpdir/.public-inbox/" };
@@ -64,8 +97,17 @@ sub quiet_fail {
$cmd = [ '-init', 'deep-non-existent', "$tmpdir/a/b/c/d",
qw(http://example.com/abcd abcd@example.com) ];
$err = '';
+ my $umask = umask(022) // xbail "umask: $!";
ok(run_script($cmd, $env, $rdr), 'initializes non-existent hierarchy');
+ umask($umask) // xbail "umask: $!";
ok(-d "$tmpdir/a/b/c/d", 'directory created');
+ my $desc = "$tmpdir/a/b/c/d/description";
+ is(PublicInbox::Git::try_cat($desc),
+ "public inbox for abcd\@example.com\n", 'description set');
+ my $mode = (stat($desc))[2];
+ is(sprintf('0%03o', $mode & 0777), '0644',
+ 'description respects umask');
+
open my $fh, '>', "$tmpdir/d" or BAIL_OUT "open: $!";
close $fh;
$cmd = [ '-init', 'd-f-conflict', "$tmpdir/d/f/conflict",
@@ -74,7 +116,7 @@ sub quiet_fail {
}
SKIP: {
- require_mods(qw(DBD::SQLite Search::Xapian::WritableDatabase), 2);
+ require_mods(qw(DBD::SQLite Search::Xapian), 2);
require_git(2.6, 1) or skip "git 2.6+ required", 2;
use_ok 'PublicInbox::Msgmap';
local $ENV{PI_DIR} = "$tmpdir/.public-inbox/";
@@ -163,7 +205,8 @@ SKIP: {
$err = '';
ok(run_script([qw(-mda --no-precheck)], $env, $rdr), 'deliver V1');
diag "err=$err" if $err;
- $mm = PublicInbox::Msgmap->new("$tmpdir/skip4");
+ $mm = PublicInbox::Msgmap->new_file(
+ "$tmpdir/skip4/public-inbox/msgmap.sqlite3");
$n = $mm->num_for($mid);
is($n, 13, 'V1 NNTP article numbers skipped via --skip-artnum');
}