public-inbox.git  about / heads / tags
an "archives first" approach to mailing lists
blob 1e83e3834dfe7f2c1b215628974c025e0c0f36f3 1885 bytes (raw)
$ git show HEAD:t/lei-store-fail.t	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
#!perl -w
# Copyright (C) all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
# ensure we detect errors in lei/store
use v5.12;
use PublicInbox::TestCommon;
use autodie qw(pipe open close seek);
use Fcntl qw(SEEK_SET);
use File::Path qw(remove_tree);

my $start_home = $ENV{HOME}; # bug guard
my $utf8_oid = '9bf1002c49eb075df47247b74d69bcd555e23422';
test_lei(sub {
	lei_ok qw(import -q t/plack-qp.eml); # start the store
	ok(!lei(qw(blob --mail), $utf8_oid), 't/utf8.eml not imported, yet');

	my $opt;
	pipe($opt->{0}, my $in_w);
	open $opt->{1}, '+>', undef;
	open $opt->{2}, '+>', undef;
	$opt->{-CLOFORK} = [ $in_w ];
	my $cmd = [ qw(lei import -q -F mboxrd) ];
	my $tp = start_script($cmd, undef, $opt);
	close $opt->{0};
	$in_w->autoflush(1);
	print $in_w <<EOM or xbail "print: $!";
From k\@y Fri Oct  2 00:00:00 1993
From: <k\@example.com>
Date: Sat, 02 Oct 2010 00:00:00 +0000
Subject: hi
Message-ID: <0\@t>

will this save?
EOM
	# import another message w/ delay while mboxrd import is still running
	lei_ok qw(import -q --commit-delay=300 t/utf8.eml);
	lei_ok qw(blob --mail), $utf8_oid,
		\'blob immediately available despite --commit-delay';
	lei_ok qw(q m:testmessage@example.com);
	is($lei_out, "[null]\n", 'delayed commit is unindexed');

	# make immediate ->sto_barrier_request fail from mboxrd import:
	remove_tree("$ENV{HOME}/.local/share/lei/store");
	# subsequent lei commands are undefined behavior,
	# but we need to make sure the current lei command fails:

	close $in_w; # should trigger ->done
	$tp->join;
	isnt($?, 0, 'lei import -F mboxrd error code set on failure');
	is(-s $opt->{1}, 0, 'nothing in stdout');
	isnt(-s $opt->{2}, 0, 'stderr not empty');
	seek($opt->{2}, 0, SEEK_SET);
	my @err = readline($opt->{2});
	ok(grep(!/^#/, @err), 'noted error in stderr') or diag "@err";
});

done_testing;

git clone https://public-inbox.org/public-inbox.git
git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git