]> git.saurik.com Git - apt.git/blob - test/integration/test-apt-key
test: Fix apt-key tests to work with current gpg 2.1
[apt.git] / test / integration / test-apt-key
1 #!/bin/sh
2 set -e
3
4 # apt-key is a shell script, so relatively prune to be effected by 'crazy' things:
5 # confuses config parser as there exists no way of escaping " currently.
6 #TMPDIR="$(mktemp -d)/This is \"fü\$\$ing cràzy\", \$(man man | head -n1 | cut -d' ' -f 1)\$!"
7 # gpg doesn't like | in path names – documented e.g. in the man gpg2 --agent-program
8 #TMPDIR="$(mktemp -d)/This is fü\$\$ing cràzy, \$(man man | head -n1 | cut -d' ' -f 1)\$!"
9 TMPDIR_ADD="This is fü\$\$ing cràzy, \$(apt -v)\$!"
10
11 TESTDIR="$(readlink -f "$(dirname "$0")")"
12 . "$TESTDIR/framework"
13
14 setupenvironment
15 configarchitecture 'amd64'
16
17 # start from a clean plate again
18 cleanplate() {
19 rm -rf rootdir/etc/apt/trusted.gpg.d/ rootdir/etc/apt/trusted.gpg
20 mkdir rootdir/etc/apt/trusted.gpg.d/
21 }
22
23 echo 'APT::Key::ArchiveKeyring "./keys/joesixpack.pub";
24 APT::Key::RemovedKeys "./keys/rexexpired.pub";' > rootdir/etc/apt/apt.conf.d/aptkey.conf
25
26 testrun() {
27 cleanplate
28 ln -sf "${TMPWORKINGDIRECTORY}/keys/joesixpack.pub" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
29
30 msgtest 'Check that paths in list output are not' 'double-slashed'
31 aptkey list 2>&1 | grep -q '//' && msgfail || msgpass
32
33 msgtest 'Check that paths in finger output are not' 'double-slashed'
34 aptkey finger 2>&1 | grep -q '//' && msgfail || msgpass
35 testaptkeys 'Joe Sixpack'
36
37 testsuccessequal 'gpg: key DBAC8DAE: "Joe Sixpack (APT Testcases Dummy) <joe@example.org>" not changed
38 gpg: Total number processed: 1
39 gpg: unchanged: 1' aptkey --fakeroot update
40
41 testaptkeys 'Joe Sixpack'
42 testfailure test -e rootdir/etc/apt/trusted.gpg
43
44 testsuccess aptkey --fakeroot add ./keys/rexexpired.pub
45 msgtest 'Check if trusted.gpg is created with permissions set to' '0644'
46 if [ "$(stat -c '%a' rootdir/etc/apt/trusted.gpg )" = '644' ]; then
47 msgpass
48 else
49 msgfail
50 fi
51
52 testaptkeys 'Rex Expired' 'Joe Sixpack'
53
54 msgtest 'Check that Sixpack key can be' 'exported'
55 aptkey export 'Sixpack' > aptkey.export
56 aptkey --keyring rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg exportall > aptkey.exportall
57 testsuccess --nomsg cmp aptkey.export aptkey.exportall
58 testsuccess test -s aptkey.export
59 testsuccess test -s aptkey.exportall
60
61 msgtest 'Execute update again to trigger removal of' 'Rex Expired key'
62 testsuccess --nomsg aptkey --fakeroot update
63
64 testaptkeys 'Joe Sixpack'
65
66 msgtest "Try to remove a key which exists, but isn't in the" 'forced keyring'
67 testsuccess --nomsg aptkey --fakeroot --keyring rootdir/etc/apt/trusted.gpg del DBAC8DAE
68
69 testaptkeys 'Joe Sixpack'
70
71 testsuccess aptkey --fakeroot del DBAC8DAE
72 testempty aptkey list
73
74 msgtest 'Test key removal with' 'lowercase key ID' #keylength somewhere between 8byte and short
75 cleanplate
76 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
77 testsuccess --nomsg aptkey --fakeroot del d141dbac8dae
78 testempty aptkey list
79
80 msgtest 'Test key removal with' 'single key in real file'
81 cleanplate
82 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
83 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
84 testempty aptkey list
85 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
86 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
87
88 msgtest 'Test key removal with' 'long key ID'
89 cleanplate
90 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
91 testsuccess --nomsg aptkey --fakeroot del 5A90D141DBAC8DAE
92 testempty aptkey list
93 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
94 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
95
96 msgtest 'Test key removal with' 'fingerprint'
97 cleanplate
98 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
99 testsuccess --nomsg aptkey --fakeroot del 34A8E9D18DB320F367E8EAA05A90D141DBAC8DAE
100 testempty aptkey list
101 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
102 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
103
104 msgtest 'Test key removal with' 'single key in softlink'
105 cleanplate
106 ln -s "$(readlink -f ./keys/joesixpack.pub)" rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
107 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
108 testempty aptkey list
109 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
110 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
111
112 cleanplate
113 testsuccess aptkey --fakeroot add ./keys/joesixpack.pub
114 ln -sf "$(readlink -f ./keys/marvinparanoid.pub)" "./keys/marvin paránöid.pub"
115 testsuccess aptkey --fakeroot add "./keys/marvin paránöid.pub"
116 testaptkeys 'Joe Sixpack' 'Marvin Paranoid'
117 cp -a rootdir/etc/apt/trusted.gpg keys/testcase-multikey.pub # store for reuse
118
119 msgtest 'Test key removal with' 'multi key in real file'
120 cleanplate
121 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
122 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
123 testaptkeys 'Marvin Paranoid'
124 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
125
126 msgtest 'Test key removal with' 'multi key in softlink'
127 cleanplate
128 ln -s "$(readlink -f ./keys/testcase-multikey.pub)" rootdir/etc/apt/trusted.gpg.d/multikey.gpg
129 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
130 testaptkeys 'Marvin Paranoid'
131 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
132 testfailure test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg
133 testsuccess test -L rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
134
135 msgtest 'Test key removal with' 'multiple files including key'
136 cleanplate
137 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
138 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
139 testsuccess --nomsg aptkey --fakeroot del DBAC8DAE
140 testaptkeys 'Marvin Paranoid'
141 testfailure test -e rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
142 testsuccess cmp keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg~
143 testsuccess cmp keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg~
144
145 cleanplate
146 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
147 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
148 testaptkeys 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
149 msgtest 'Test merge-back of' 'added keys'
150 testsuccess --nomsg aptkey adv --batch --yes --import keys/rexexpired.pub
151 testaptkeys 'Rex Expired' 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
152
153 msgtest 'Test merge-back of' 'removed keys'
154 testsuccess --nomsg aptkey adv --batch --yes --delete-keys 27CE74F9
155 testaptkeys 'Joe Sixpack' 'Joe Sixpack' 'Marvin Paranoid'
156
157 msgtest 'Test merge-back of' 'removed duplicate keys'
158 testsuccess --nomsg aptkey adv --batch --yes --delete-keys DBAC8DAE
159 testaptkeys 'Marvin Paranoid'
160
161 cleanplate
162 cp -a keys/joesixpack.pub rootdir/etc/apt/trusted.gpg.d/joesixpack.gpg
163 cp -a keys/testcase-multikey.pub rootdir/etc/apt/trusted.gpg.d/multikey.gpg
164 msgtest 'Test signing a file' 'with a key'
165 echo 'Verify me. This is my signature.' > signature
166 testsuccess --nomsg aptkey --quiet --keyring keys/marvinparanoid.pub --secret-keyring keys/marvinparanoid.sec --readonly \
167 adv --batch --yes --default-key 'Marvin' --armor --detach-sign --sign --output signature.gpg signature
168 testsuccess test -s signature.gpg -a -s signature
169
170
171 for GPGV in '' 'gpgv' 'gpgv2'; do
172 echo "APT::Key::GPGVCommand \"$GPGV\";" > rootdir/etc/apt/apt.conf.d/00gpgvcmd
173
174 msgtest 'Test verify a file' 'with all keys'
175 testsuccess --nomsg aptkey --quiet --readonly verify signature.gpg signature
176
177 msgtest 'Test verify a file' 'with good keyring'
178 testsuccess --nomsg aptkey --quiet --readonly --keyring keys/testcase-multikey.pub verify signature.gpg signature
179
180 msgtest 'Test fail verify a file' 'with bad keyring'
181 testfailure --nomsg aptkey --quiet --readonly --keyring keys/joesixpack.pub verify signature.gpg signature
182
183 msgtest 'Test fail verify a file' 'with non-existing keyring'
184 testfailure --nomsg aptkey --quiet --readonly --keyring keys/does-not-exist.pub verify signature.gpg signature
185 testfailure test -e keys/does-not-exist.pub
186
187 # note: this isn't how apts gpgv method implements keyid for verify
188 msgtest 'Test verify a file' 'with good keyid'
189 testsuccess --nomsg aptkey --quiet --readonly --keyid 'Paranoid' verify signature.gpg signature
190
191 msgtest 'Test fail verify a file' 'with bad keyid'
192 testfailure --nomsg aptkey --quiet --readonly --keyid 'Sixpack' verify signature.gpg signature
193
194 msgtest 'Test fail verify a file' 'with non-existing keyid'
195 testfailure --nomsg aptkey --quiet --readonly --keyid 'Kalnischkies' verify signature.gpg signature
196
197 msgtest 'Test verify fails on' 'bad file'
198 echo 'lalalalala' > signature2
199 testfailure --nomsg aptkey --quiet --readonly verify signature.gpg signature2
200 done
201 }
202
203 setupgpgcommand() {
204 echo "APT::Key::GPGCommand \"$1\";" > rootdir/etc/apt/apt.conf.d/00gpgcmd
205 msgmsg 'Force tests to be run with' "$1"
206 testsuccess aptkey --readonly adv --version
207 cp rootdir/tmp/testsuccess.output aptkey.version
208 testsuccess grep "^gpg (GnuPG) $2\." aptkey.version
209 }
210
211 # run with default (whatever this is)
212 testrun
213 # run with …
214 setupgpgcommand 'gpg' '1'
215 testrun
216 setupgpgcommand 'gpg2' '2'
217 testrun