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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#!/usr/bin/perl
#
# Copyright © 2016 Guillem Jover <guillem@debian.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
use strict;
use warnings;
use version;
use Test::More;
use Cwd;
use File::Path qw(make_path remove_tree);
use File::Temp qw(tempdir);
use File::Basename;
use File::Find;
use Dpkg::File;
use Dpkg::IPC;
my $srcdir = $ENV{srcdir} || '.';
my $builddir = $ENV{builddir} || '.';
my $tmpdir = 't.tmp/t-trigdeferred';
my @deferred = (
{
exitcode => 0,
original => <<'TEXT',
# Comment
# Another Comment
/root/pathname/file-trigger pkg-a pkg-b pkg-c
named-trigger pkg-1 pkg-2 pkg-3
parse-trigger pkg:a pkg+b pkg.0 0-pkg
:other-trigger -
TEXT
expected => <<'TEXT',
<T='/root/pathname/file-trigger' P='pkg-a' P='pkg-b' P='pkg-c' E>
<T='named-trigger' P='pkg-1' P='pkg-2' P='pkg-3' E>
<T='parse-trigger' P='pkg:a' P='pkg+b' P='pkg.0' P='0-pkg' E>
<T=':other-trigger' P='-' E>
TEXT
}, {
exitcode => 2,
original => <<"TEXT",
\b # invalid character
TEXT
}, {
exitcode => 2,
original => <<'TEXT',
trigger -pkg
TEXT
}, {
exitcode => 2,
original => <<'TEXT',
trigger +pkg
TEXT
}, {
exitcode => 2,
original => <<'TEXT',
trigger .pkg
TEXT
}, {
exitcode => 2,
original => <<'TEXT',
trigger :pkg
TEXT
}, {
exitcode => 2,
original => 'missing newline',
}
);
plan tests => scalar(@deferred) * 3;
# Set a known umask.
umask 0022;
sub test_trigdeferred {
my $stdout;
my $stderr;
my $admindir = "$tmpdir";
# Check triggers deferred file parsing.
make_path("$admindir/triggers");
foreach my $test (@deferred) {
file_dump("$admindir/triggers/Unincorp", $test->{original});
spawn(exec => [ "$builddir/t/c-trigdeferred", $admindir ],
nocheck => 1, to_string => \$stdout, error_to_string => \$stderr);
my $exitcode = $? >> 8;
is($exitcode, $test->{exitcode}, 'trigger deferred expected exitcode');
if ($test->{exitcode} == 0) {
is($stderr, '', 'trigger deferred expected stderr');
is($stdout, $test->{expected}, 'trigger deferred expected stdout');
} else {
isnt($stderr, '', 'trigger deferred expected stderr');
isnt($stdout, undef, 'trigger deferred expected stdout');
}
}
}
test_trigdeferred();
|