X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fadmin.t;h=fbfcd6d3e99666138fd28d4e055464a1e75693b5;hb=af0b0fb7a454470a32c452119d0392e0dedb3fe1;hp=3790c9e2e20a2248e22c259e63b027bc346244e6;hpb=0b1de991a099b5e8b9a9e3e85b5eaaacc9362dbb;p=public-inbox.git diff --git a/t/admin.t b/t/admin.t index 3790c9e2..fbfcd6d3 100644 --- a/t/admin.t +++ b/t/admin.t @@ -1,27 +1,29 @@ -# Copyright (C) 2019 all contributors +# Copyright (C) 2019-2021 all contributors # License: AGPL-3.0+ use strict; use warnings; use Test::More; -use File::Temp qw(tempdir); -use_ok 'PublicInbox::Admin', qw(resolve_repo_dir); -my $tmpdir = tempdir('pi-admin.XXXXXX', TMPDIR => 1, CLEANUP => 1); +use PublicInbox::TestCommon; +use PublicInbox::Import; +use_ok 'PublicInbox::Admin'; +my ($tmpdir, $for_destroy) = tmpdir(); my $git_dir = "$tmpdir/v1"; my $v2_dir = "$tmpdir/v2"; my ($res, $err, $v); -is(0, system(qw(git init -q --bare), $git_dir), 'git init v1'); +PublicInbox::Import::init_bare($git_dir); +*resolve_inboxdir = \&PublicInbox::Admin::resolve_inboxdir; # v1 -is(resolve_repo_dir($git_dir), $git_dir, 'top-level GIT_DIR resolved'); -is(resolve_repo_dir("$git_dir/objects"), $git_dir, 'GIT_DIR/objects resolved'); +is(resolve_inboxdir($git_dir), $git_dir, 'top-level GIT_DIR resolved'); +is(resolve_inboxdir("$git_dir/objects"), $git_dir, 'GIT_DIR/objects resolved'); ok(chdir($git_dir), 'chdir GIT_DIR works'); -is(resolve_repo_dir(), $git_dir, 'resolve_repo_dir works in GIT_DIR'); +is(resolve_inboxdir(), $git_dir, 'resolve_inboxdir works in GIT_DIR'); ok(chdir("$git_dir/objects"), 'chdir GIT_DIR/objects works'); -is(resolve_repo_dir(), $git_dir, 'resolve_repo_dir works in GIT_DIR'); -$res = resolve_repo_dir(undef, \$v); +is(resolve_inboxdir(), $git_dir, 'resolve_inboxdir works in GIT_DIR'); +$res = resolve_inboxdir(undef, \$v); is($v, 1, 'version 1 detected'); is($res, $git_dir, 'detects directory along with version'); @@ -35,13 +37,13 @@ SKIP: { ok(chdir($no_vcs_dir), 'chdir to a non-inbox'); open STDERR, '>&', $null or die "redirect stderr to /dev/null: $!"; - $res = eval { resolve_repo_dir() }; + $res = eval { resolve_inboxdir() }; open STDERR, '>&', $olderr or die "restore stderr: $!"; is($res, undef, 'fails inside non-version-controlled dir'); ok(chdir($tmpdir), 'back to test-specific $tmpdir'); open STDERR, '>&', $null or die "redirect stderr to /dev/null: $!"; - $res = eval { resolve_repo_dir($no_vcs_dir) }; + $res = eval { resolve_inboxdir($no_vcs_dir) }; $err = $@; open STDERR, '>&', $olderr or die "restore stderr: $!"; is($res, undef, 'fails on non-version-controlled dir'); @@ -56,7 +58,7 @@ SKIP: { use_ok 'PublicInbox::V2Writable'; use_ok 'PublicInbox::Inbox'; my $ibx = PublicInbox::Inbox->new({ - mainrepo => $v2_dir, + inboxdir => $v2_dir, name => 'test-v2writable', version => 2, -primary_address => 'test@example.com', @@ -65,16 +67,43 @@ SKIP: { PublicInbox::V2Writable->new($ibx, 1)->idx_init; ok(-e "$v2_dir/inbox.lock", 'exists'); - is(resolve_repo_dir($v2_dir), $v2_dir, - 'resolve_repo_dir works on v2_dir'); - ok(chdir($v2_dir), 'chdir v2_dir OK'); - is(resolve_repo_dir(), $v2_dir, 'resolve_repo_dir works inside v2_dir'); - $res = resolve_repo_dir(undef, \$v); + is(resolve_inboxdir($v2_dir), $v2_dir, + 'resolve_inboxdir works on v2_dir'); + chdir($v2_dir) or BAIL_OUT "chdir v2_dir: $!"; + is(resolve_inboxdir(), $v2_dir, 'resolve_inboxdir works inside v2_dir'); + $res = resolve_inboxdir(undef, \$v); is($v, 2, 'version 2 detected'); is($res, $v2_dir, 'detects directory along with version'); # TODO: should work from inside Xapian dirs, and git dirs, here... + PublicInbox::Import::init_bare("$v2_dir/git/0.git"); + my $objdir = "$v2_dir/git/0.git/objects"; + is($v2_dir, resolve_inboxdir($objdir, \$v), 'at $objdir'); + is($v, 2, 'version 2 detected at $objdir'); + chdir($objdir) or BAIL_OUT "chdir objdir: $!"; + is(resolve_inboxdir(undef, \$v), $v2_dir, 'inside $objdir'); + is($v, 2, 'version 2 detected inside $objdir'); +} + +chdir '/' or BAIL_OUT "chdir: $!"; + +my @pairs = ( + '1g' => 1024 ** 3, + 666 => 666, + '1500K' => 1500 * 1024, + '15m' => 15 * (1024 ** 2), +); + +while (@pairs) { + my ($in, $out) = splice(@pairs, 0, 2); + my $orig = $in; + ok(PublicInbox::Admin::parse_unsigned(\$in), "parse_unsigned $orig"); + is($in, $out, "got $orig => ($in == $out)"); +} + +for my $v ('', 'bogus', '1p', '1gig') { + ok(!PublicInbox::Admin::parse_unsigned(\$v), + "parse_unsigned rejects $v"); } -chdir '/'; done_testing();