1
use Test::Simple tests => 17;
3
my $LOG = 't/fixtures/light.postgres.log.bz2';
4
my $SYSLOG = 't/fixtures/pg-syslog.1.bz2';
5
my $BIN = 't/fixtures/light.postgres.bin';
6
my $ANON = 't/fixtures/anonymize.log';
7
my $JSON = 't/out.json';
9
my $WEEKDAYLOG = 't/fixtures/weeknumber.log';
11
`rm -rf t/test_incr/ 2>/dev/null`;
13
my $ret = `perl pgbadger --help`;
14
ok( $? == 0, "Inline help");
16
$ret = `perl pgbadger -q -o - $LOG`;
17
ok( $? == 0 && length($ret) > 0, "Light log report to stdout");
20
$ret = `perl pgbadger -q --outdir '.' $LOG`;
21
ok( $? == 0 && -e "out.html", "Light log report to HTML");
23
$ret = `perl pgbadger -q -o $BIN $LOG`;
24
ok( $? == 0 && -e "$BIN", "Light log to binary");
27
$ret = `perl pgbadger -q -o $JSON --format binary $BIN`;
28
$ret = `cat $JSON | perl -pe 's/.*"select":([1-9]+),.*/\$1/'`;
29
ok( $? == 0 && $ret > 0, "From binary to JSON");
32
$ret = `perl pgbadger -q -O t/test_incr -I --extra-files $LOG`;
33
ok( $? == 0 && -e "t/test_incr/2017/09/06/index.html"
34
&& -e "t/test_incr/2017/week-37/index.html", "Incremental mode report");
35
$ret = `grep 'src="../../../.*/bootstrap.min.js"' t/test_incr/2017/09/06/index.html`;
36
ok( $? == 0 && substr($ret, 32, 14) eq 'src="../../../', "Ressources files in incremental mode");
39
$ret = `bunzip2 -c $LOG | perl pgbadger -q -o $JSON -`;
40
$ret = `cat $JSON | perl -pe 's/.*"select":([1-9]+),.*/\$1/'`;
41
ok( $? == 0 && $ret > 0, "Light log from STDIN");
43
$ret = `perl pgbadger -q --outdir '.' -o $TEXT -o $JSON -o - -x json $LOG > t/ret.json`;
44
my $ret2 = `stat --printf='%s' t/ret.json $TEXT $JSON`;
47
ok( $? == 0 && $ret2 eq '13486915883134869', "Multiple output format '$ret2' = '13486915883134869'");
49
`perl pgbadger -q -o /tmp/syslog.html $SYSLOG`;
50
$ret = `perl pgbadger -q -o - $SYSLOG`;
51
ok( $? == 0 && (length($ret) >= 23995), "syslog report to stdout: " . length($ret));
53
$ret = `perl pgbadger -q -f stderr -o /tmp/report$$.txt t/fixtures/stmt_type.log`;
54
$ret = `grep -E "^(SELECT|INSERT|UPDATE|DELETE|COPY|CTE|DDL|TCL|CURSOR)" /tmp/report$$.txt > /tmp/stmt_type.out`;
55
$ret = `diff t/exp/stmt_type.out /tmp/stmt_type.out`;
56
ok( $? == 0 && ($ret eq ''), "statement type");
58
$ret = `grep "forêt & océan" /tmp/report$$.txt |wc -l`;
60
ok( $? == 0 && ($ret eq '7'), "French encoding");
62
$ret = `grep "камень & почка" /tmp/report$$.txt | wc -l`;
64
ok( $? == 0 && ($ret eq '7'), "Cyrillic encoding");
66
`cp /tmp/report$$.txt titi.txt`;
67
`rm /tmp/report$$.txt`;
69
# Test CSV and anonymization only if Text::CSV_XS is installed
70
`perl -MText::CSV_XS -e 1 2>/dev/null`;
73
$ret = `perl pgbadger -m 1000 -q -f csv --anonymize -o /tmp/report$$.txt $ANON`;
74
$ret = `grep "11111111" /tmp/report$$.txt | wc -l`;
76
ok( $? == 0 && ($ret eq '0'), "Anonymization #1");
77
$ret = `grep "'r','p','v','f','m'" /tmp/report$$.txt | wc -l`;
79
ok( $? == 0 && ($ret eq '0'), "Anonymization #2");
80
$ret = `grep "x255044" /tmp/report$$.txt | wc -l`;
82
ok( $? == 0 && ($ret eq '0'), "Anonymization #3");
86
$ret = `perl pgbadger -q -f csv --anonymize -o /tmp/report$$.txt $SYSLOG`;
87
$ret = `grep "aid = 62643" /tmp/report$$.txt | wc -l`;
89
ok( $? == 0 && ($ret eq '0'), "Anonymization #1");
90
$ret = `grep "tid = 1;" /tmp/report$$.txt | wc -l`;
92
ok( $? == 0 && ($ret eq '0'), "Anonymization #2");
93
$ret = `grep "8, 1, 27361, 529, CURRENT_TIMESTAMP" /tmp/report$$.txt | wc -l`;
95
ok( $? == 0 && ($ret eq '0'), "Anonymization #3");
98
my $incr_outdir = "/tmp/pgbadger_data_tmp";
100
$ret = `perl pgbadger -q --iso-week-number -X -I -O $incr_outdir -f csv $WEEKDAYLOG && ls $incr_outdir/2021/ | grep -E '(week-27|week-53)' | wc -l`;
103
ok( $? == 0 && $ret eq '2');
104
# Remove files generated during the tests
109
`rm -rf t/test_incr/`;
111
`rm /tmp/report$$.txt`;
112
`rm /tmp/stmt_type.out`;
113
`rm -rf $incr_outdir`;