X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fv2mirror.t;h=665a4d594f93e445f07cd96fa9a73595e2763ca2;hb=1ed1a566c7d300ab8afb604b2e7c939299318005;hp=2bb3238b3388d00e8157d4bde4c44908da7b9881;hpb=dc489bfd4b4c659b7ebb166ab540b4e767e51aaa;p=public-inbox.git
diff --git a/t/v2mirror.t b/t/v2mirror.t
index 2bb3238b..665a4d59 100644
--- a/t/v2mirror.t
+++ b/t/v2mirror.t
@@ -1,19 +1,17 @@
# Copyright (C) 2018-2021 all contributors
# License: AGPL-3.0+
use strict;
-use warnings;
-use Test::More;
+use v5.10.1;
use PublicInbox::TestCommon;
-use File::Path qw(remove_tree);
+use File::Path qw(remove_tree make_path);
use Cwd qw(abs_path);
require_git(2.6);
+require_cmd('curl');
local $ENV{HOME} = abs_path('t');
# Integration tests for HTTP cloning + mirroring
require_mods(qw(Plack::Util Plack::Builder
HTTP::Date HTTP::Status Search::Xapian DBD::SQLite));
-use IO::Socket;
-use POSIX qw(dup2);
use_ok 'PublicInbox::V2Writable';
use PublicInbox::InboxWritable;
use PublicInbox::Eml;
@@ -100,8 +98,9 @@ $ibx->cleanup;
my @new_epochs;
my $fetch_each_epoch = sub {
my %before = map { $_ => 1 } glob("$tmpdir/m/git/*");
- run_script([qw(-fetch -q)], undef, {-C => "$tmpdir/m"}) or
+ run_script([qw(-fetch --exit-code -q)], undef, {-C => "$tmpdir/m"}) or
xbail '-fetch fail';
+ is($?, 0, '--exit-code 0 after fetch updated');
my @after = grep { !$before{$_} } glob("$tmpdir/m/git/*");
push @new_epochs, @after;
};
@@ -230,10 +229,41 @@ EOF
is(scalar($mset->items), 0, 'large message not re-indexed');
}
ok(scalar(@new_epochs), 'new epochs were created and fetched');
+for my $d (@new_epochs) {
+ is(xqx(['git', "--git-dir=$d", 'config', qw(include.path)]),
+ "../../all.git/config\n",
+ 'include.path set');
+}
+
+if ('test read-only epoch dirs') {
+ my @git = ('git', "--git-dir=$new_epochs[0]");
+ my $get_objs = [@git,
+ qw(cat-file --buffer --batch-check --batch-all-objects)];
+ my $before = [sort xqx($get_objs)];
+
+ remove_tree(map { "$new_epochs[0]/$_" } qw(objects refs/heads));
+ chmod(0555, $new_epochs[0]) or xbail "chmod: $!";
+
+ # force a refetch
+ unlink("$tmpdir/m/manifest.js.gz") or xbail "unlink: $!";
+
+ run_script([qw(-fetch -q)], undef, {-C => "$tmpdir/m"}) or
+ xbail '-fetch failed';
+
+ ok(!-d "$new_epochs[0]/objects", 'no objects after fetch to R/O dir');
+
+ chmod(0755, $new_epochs[0]) or xbail "chmod: $!";
+ mkdir("$new_epochs[0]/objects") or xbail "mkdir: $!";
+ mkdir("$new_epochs[0]/refs/heads") or xbail "mkdir: $!";
+
+ my $err = '';
+ run_script([qw(-fetch -q)], undef, {-C => "$tmpdir/m", 2 => \$err}) or
+ xbail '-fetch failed '.$err;
+ is_deeply([ sort xqx($get_objs) ], $before,
+ 'fetch restored objects once GIT_DIR became writable');
+}
ok($td->kill, 'killed httpd');
$td->join;
-done_testing();
-
-1;
+done_testing;