1#!/bin/sh
2#
3#
4
5test_description='git mktag: tag object verify test'
6
7. ./test-lib.sh
8
9###########################################################
10# check the tag.sig file, expecting verify_tag() to fail,
11# and checking that the error message matches the pattern
12# given in the expect.pat file.
13
14check_verify_failure () {
15 expect="$2"
16 test_expect_success "$1" '
17 ( test_must_fail git mktag <tag.sig 2>message ) &&
18 grep "$expect" message
19 '
20}
21
22###########################################################
23# first create a commit, so we have a valid object/type
24# for the tag.
25test_expect_success 'setup' '
26 echo Hello >A &&
27 git update-index --add A &&
28 git commit -m "Initial commit" &&
29 head=$(git rev-parse --verify HEAD)
30'
31
32############################################################
33# 1. length check
34
35cat >tag.sig <<EOF
36too short for a tag
37EOF
38
39check_verify_failure 'Tag object length check' \
40 '^error: .*size wrong.*$'
41
42############################################################
43# 2. object line label check
44
45cat >tag.sig <<EOF
46xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895
47type tag
48tag mytag
49tagger . <> 0 +0000
50
51EOF
52
53check_verify_failure '"object" line label check' '^error: char0: .*"object "$'
54
55############################################################
56# 3. object line SHA1 check
57
58cat >tag.sig <<EOF
59object zz9e9b33986b1c2670fff52c5067603117b3e895
60type tag
61tag mytag
62tagger . <> 0 +0000
63
64EOF
65
66check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$'
67
68############################################################
69# 4. type line label check
70
71cat >tag.sig <<EOF
72object 779e9b33986b1c2670fff52c5067603117b3e895
73xxxx tag
74tag mytag
75tagger . <> 0 +0000
76
77EOF
78
79check_verify_failure '"type" line label check' '^error: char47: .*"\\ntype "$'
80
81############################################################
82# 5. type line eol check
83
84echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
85printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
86
87check_verify_failure '"type" line eol check' '^error: char48: .*"\\n"$'
88
89############################################################
90# 6. tag line label check #1
91
92cat >tag.sig <<EOF
93object 779e9b33986b1c2670fff52c5067603117b3e895
94type tag
95xxx mytag
96tagger . <> 0 +0000
97
98EOF
99
100check_verify_failure '"tag" line label check #1' \
101 '^error: char57: no "tag " found$'
102
103############################################################
104# 7. tag line label check #2
105
106cat >tag.sig <<EOF
107object 779e9b33986b1c2670fff52c5067603117b3e895
108type taggggggggggggggggggggggggggggggg
109tag
110EOF
111
112check_verify_failure '"tag" line label check #2' \
113 '^error: char87: no "tag " found$'
114
115############################################################
116# 8. type line type-name length check
117
118cat >tag.sig <<EOF
119object 779e9b33986b1c2670fff52c5067603117b3e895
120type taggggggggggggggggggggggggggggggg
121tag mytag
122EOF
123
124check_verify_failure '"type" line type-name length check' \
125 '^error: char53: type too long$'
126
127############################################################
128# 9. verify object (SHA1/type) check
129
130cat >tag.sig <<EOF
131object 779e9b33986b1c2670fff52c5067603117b3e895
132type tagggg
133tag mytag
134tagger . <> 0 +0000
135
136EOF
137
138check_verify_failure 'verify object (SHA1/type) check' \
139 '^error: char7: could not verify object.*$'
140
141############################################################
142# 10. verify tag-name check
143
144cat >tag.sig <<EOF
145object $head
146type commit
147tag my tag
148tagger . <> 0 +0000
149
150EOF
151
152check_verify_failure 'verify tag-name check' \
153 '^error: char67: could not verify tag name$'
154
155############################################################
156# 11. tagger line label check #1
157
158cat >tag.sig <<EOF
159object $head
160type commit
161tag mytag
162
163This is filler
164EOF
165
166check_verify_failure '"tagger" line label check #1' \
167 '^error: char70: could not find "tagger "$'
168
169############################################################
170# 12. tagger line label check #2
171
172cat >tag.sig <<EOF
173object $head
174type commit
175tag mytag
176tagger
177
178This is filler
179EOF
180
181check_verify_failure '"tagger" line label check #2' \
182 '^error: char70: could not find "tagger "$'
183
184############################################################
185# 13. disallow missing tag author name
186
187cat >tag.sig <<EOF
188object $head
189type commit
190tag mytag
191tagger <> 0 +0000
192
193This is filler
194EOF
195
196check_verify_failure 'disallow missing tag author name' \
197 '^error: char77: missing tagger name$'
198
199############################################################
200# 14. disallow missing tag author name
201
202cat >tag.sig <<EOF
203object $head
204type commit
205tag mytag
206tagger T A Gger <
207 > 0 +0000
208
209EOF
210
211check_verify_failure 'disallow malformed tagger' \
212 '^error: char77: malformed tagger field$'
213
214############################################################
215# 15. allow empty tag email
216
217cat >tag.sig <<EOF
218object $head
219type commit
220tag mytag
221tagger T A Gger <> 0 +0000
222
223EOF
224
225test_expect_success \
226 'allow empty tag email' \
227 'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
228
229############################################################
230# 16. disallow spaces in tag email
231
232cat >tag.sig <<EOF
233object $head
234type commit
235tag mytag
236tagger T A Gger <tag ger@example.com> 0 +0000
237
238EOF
239
240check_verify_failure 'disallow spaces in tag email' \
241 '^error: char77: malformed tagger field$'
242
243############################################################
244# 17. disallow missing tag timestamp
245
246tr '_' ' ' >tag.sig <<EOF
247object $head
248type commit
249tag mytag
250tagger T A Gger <tagger@example.com>__
251
252EOF
253
254check_verify_failure 'disallow missing tag timestamp' \
255 '^error: char107: missing tag timestamp$'
256
257############################################################
258# 18. detect invalid tag timestamp1
259
260cat >tag.sig <<EOF
261object $head
262type commit
263tag mytag
264tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
265
266EOF
267
268check_verify_failure 'detect invalid tag timestamp1' \
269 '^error: char107: missing tag timestamp$'
270
271############################################################
272# 19. detect invalid tag timestamp2
273
274cat >tag.sig <<EOF
275object $head
276type commit
277tag mytag
278tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500
279
280EOF
281
282check_verify_failure 'detect invalid tag timestamp2' \
283 '^error: char111: malformed tag timestamp$'
284
285############################################################
286# 20. detect invalid tag timezone1
287
288cat >tag.sig <<EOF
289object $head
290type commit
291tag mytag
292tagger T A Gger <tagger@example.com> 1206478233 GMT
293
294EOF
295
296check_verify_failure 'detect invalid tag timezone1' \
297 '^error: char118: malformed tag timezone$'
298
299############################################################
300# 21. detect invalid tag timezone2
301
302cat >tag.sig <<EOF
303object $head
304type commit
305tag mytag
306tagger T A Gger <tagger@example.com> 1206478233 + 30
307
308EOF
309
310check_verify_failure 'detect invalid tag timezone2' \
311 '^error: char118: malformed tag timezone$'
312
313############################################################
314# 22. detect invalid tag timezone3
315
316cat >tag.sig <<EOF
317object $head
318type commit
319tag mytag
320tagger T A Gger <tagger@example.com> 1206478233 -1430
321
322EOF
323
324check_verify_failure 'detect invalid tag timezone3' \
325 '^error: char118: malformed tag timezone$'
326
327############################################################
328# 23. detect invalid header entry
329
330cat >tag.sig <<EOF
331object $head
332type commit
333tag mytag
334tagger T A Gger <tagger@example.com> 1206478233 -0500
335this line should not be here
336
337EOF
338
339check_verify_failure 'detect invalid header entry' \
340 '^error: char124: trailing garbage in tag header$'
341
342############################################################
343# 24. create valid tag
344
345cat >tag.sig <<EOF
346object $head
347type commit
348tag mytag
349tagger T A Gger <tagger@example.com> 1206478233 -0500
350
351EOF
352
353test_expect_success \
354 'create valid tag' \
355 'git mktag <tag.sig >.git/refs/tags/mytag 2>message'
356
357############################################################
358# 25. check mytag
359
360test_expect_success \
361 'check mytag' \
362 'git tag -l | grep mytag'
363
364
365test_done