diff options
author | Eric Wong <e@80x24.org> | 2021-01-13 19:06:24 -1200 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-01-15 00:19:07 +0000 |
commit | f49d6a9ac8ff542c625e909798ef0947df45f34e (patch) | |
tree | e0623d0650944220dfa324273ec927dd23c56901 /t | |
parent | c7b789a770bbe9bbc262af850d863dee4efe8371 (diff) | |
download | public-inbox-f49d6a9ac8ff542c625e909798ef0947df45f34e.tar.gz |
Most writes to stdout aren't atomic and we need locking to prevent workers from interleaving and corrupting JSON output. The one case stdout won't require locking is if it's pointed to a regular file with O_APPEND; as POSIX O_APPEND semantics guarantees atomicity.
Diffstat (limited to 't')
-rw-r--r-- | t/lei_overview.t | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/t/lei_overview.t b/t/lei_overview.t new file mode 100644 index 00000000..896cc01a --- /dev/null +++ b/t/lei_overview.t @@ -0,0 +1,33 @@ +#!perl -w +# Copyright (C) 2021 all contributors <meta@public-inbox.org> +# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> +use strict; +use v5.10.1; +use Test::More; +use PublicInbox::TestCommon; +use POSIX qw(_exit); +require_ok 'PublicInbox::LeiOverview'; + +my $ovv = bless {}, 'PublicInbox::LeiOverview'; +$ovv->ovv_out_lk_init; +my $lock_path = $ovv->{lock_path}; +ok(-f $lock_path, 'lock init'); +undef $ovv; +ok(!-f $lock_path, 'lock DESTROY'); + +$ovv = bless {}, 'PublicInbox::LeiOverview'; +$ovv->ovv_out_lk_init; +$lock_path = $ovv->{lock_path}; +ok(-f $lock_path, 'lock init #2'); +my $pid = fork // BAIL_OUT "fork $!"; +if ($pid == 0) { + undef $ovv; + _exit(0); +} +is(waitpid($pid, 0), $pid, 'child exited'); +is($?, 0, 'no error in child process'); +ok(-f $lock_path, 'lock was not destroyed by child'); +undef $ovv; +ok(!-f $lock_path, 'lock DESTROY #2'); + +done_testing; |