dpkg (1.18.25) stretch; urgency=medium
[dpkg] / lib / dpkg / t / t-trigdeferred.t
1 #!/usr/bin/perl
2 #
3 # Copyright © 2016 Guillem Jover <guillem@debian.org>
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <https://www.gnu.org/licenses/>.
17
18 use strict;
19 use warnings;
20 use version;
21
22 use Test::More;
23 use Cwd;
24 use File::Path qw(make_path remove_tree);
25 use File::Temp qw(tempdir);
26 use File::Basename;
27 use File::Find;
28
29 use Dpkg::IPC;
30
31 my $srcdir = $ENV{srcdir} || '.';
32 my $builddir = $ENV{builddir} || '.';
33 my $tmpdir = 't.tmp/t-trigdeferred';
34
35 my @deferred = (
36 {
37 exitcode => 0,
38 original => <<'TEXT',
39
40 # Comment
41 # Another Comment
42 /root/pathname/file-trigger pkg-a pkg-b pkg-c
43 named-trigger pkg-1 pkg-2 pkg-3
44 parse-trigger pkg:a pkg+b pkg.0 0-pkg
45 :other-trigger -
46 TEXT
47 expected => <<'TEXT',
48 <T='/root/pathname/file-trigger' P='pkg-a' P='pkg-b' P='pkg-c' E>
49 <T='named-trigger' P='pkg-1' P='pkg-2' P='pkg-3' E>
50 <T='parse-trigger' P='pkg:a' P='pkg+b' P='pkg.0' P='0-pkg' E>
51 <T=':other-trigger' P='-' E>
52 TEXT
53 }, {
54 exitcode => 2,
55 original => <<"TEXT",
56 \b # invalid character
57 TEXT
58 }, {
59 exitcode => 2,
60 original => <<'TEXT',
61 trigger -pkg
62 TEXT
63 }, {
64 exitcode => 2,
65 original => <<'TEXT',
66 trigger +pkg
67 TEXT
68 }, {
69 exitcode => 2,
70 original => <<'TEXT',
71 trigger .pkg
72 TEXT
73 }, {
74 exitcode => 2,
75 original => <<'TEXT',
76 trigger :pkg
77 TEXT
78 }, {
79 exitcode => 2,
80 original => 'missing newline',
81 }
82 );
83
84 plan tests => scalar(@deferred) * 3;
85
86 # Set a known umask.
87 umask 0022;
88
89 sub make_file {
90 my ($pathname, $text) = @_;
91
92 open my $fh, '>', $pathname or die "cannot touch $pathname: $!";
93 print { $fh } $text;
94 close $fh;
95 }
96
97 sub test_trigdeferred {
98 my $stdout;
99 my $stderr;
100 my $admindir = "$tmpdir";
101
102 # Check triggers deferred file parsing.
103 make_path("$admindir/triggers");
104
105 foreach my $test (@deferred) {
106 make_file("$admindir/triggers/Unincorp", $test->{original});
107
108 spawn(exec => [ './c-trigdeferred', $admindir ],
109 nocheck => 1, to_string => \$stdout, error_to_string => \$stderr);
110 my $exitcode = $? >> 8;
111
112 is($exitcode, $test->{exitcode}, 'trigger deferred expected exitcode');
113 if ($test->{exitcode} == 0) {
114 is($stderr, '', 'trigger deferred expected stderr');
115 is($stdout, $test->{expected}, 'trigger deferred expected stdout');
116 } else {
117 isnt($stderr, '', 'trigger deferred expected stderr');
118 isnt($stdout, undef, 'trigger deferred expected stdout');
119 }
120 }
121 }
122
123 test_trigdeferred();