Commit | Line | Data |
---|---|---|
1479465f GJ |
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(); |