File: close-after-write.t

package info (click to toggle)
liblog-dispatch-perl 2.71-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 560 kB
  • sloc: perl: 1,457; sh: 24; makefile: 2
file content (99 lines) | stat: -rw-r--r-- 2,453 bytes parent folder | download | duplicates (3)
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
use strict;
use warnings FATAL => 'all';

use Test::More 0.88;

use File::Spec;
use File::Temp qw( tempdir );
use Log::Dispatch;

my $dir = tempdir( CLEANUP => 1 );

# test that the same handle is returned if close-on-write is not set...

{
    my $logger = Log::Dispatch->new(
        outputs => [
            [
                'File',
                min_level => 'debug',
                newline   => 1,
                name      => 'no_caw',
                filename  => File::Spec->catfile( $dir, 'no_caw.log' ),
                close_after_write => 0,
            ],
            [
                'File',
                min_level         => 'debug',
                newline           => 1,
                name              => 'caw',
                filename          => File::Spec->catfile( $dir, 'caw.log' ),
                close_after_write => 1,
            ],
        ],
    );

    ok(
        $logger->output('no_caw')->{fh},
        'no_caw output has created a fh before first write'
    );
    ok(
        !$logger->output('caw')->{fh},
        'caw output has not created a fh before first write'
    );

    $logger->log( level => 'info', message => 'first message' );
    is(
        _slurp( $logger->output('no_caw')->{filename} ),
        "first message\n",
        'first line from no_caw output'
    );
    is(
        _slurp( $logger->output('caw')->{filename} ),
        "first message\n",
        'first line from caw output'
    );

    my %handle = (
        no_caw => $logger->output('no_caw')->{fh},
        caw    => $logger->output('caw')->{fh},
    );

    $logger->log( level => 'info', message => 'second message' );

    is(
        _slurp( $logger->output('no_caw')->{filename} ),
        "first message\nsecond message\n",
        'full content from no_caw output'
    );
    is(
        _slurp( $logger->output('caw')->{filename} ),
        "first message\nsecond message\n",
        'full content from caw output'
    );

    # check the filehandles again...
    is(
        $logger->output('no_caw')->{fh},
        $handle{no_caw},
        'handle has not changed when not using CAW'
    );
    is(
        $logger->output('caw')->{fh},
        undef,
        'handle is deleted when using CAW'
    );
}

done_testing();

sub _slurp {
    open my $fh, '<', $_[0]
        or die "Cannot read $_[0]: $!";
    my $s = do {
        local $/ = undef;
        <$fh>;
    };
    close $fh or die $!;
    return $s;
}