8a27400754b1af10aae1a2140f733b706c201f5b
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.
25echo Hello >A
26git update-index --add A
27git-commit -m "Initial commit"
28head=$(git rev-parse --verify HEAD)
29
30############################################################
31# 1. length check
32
33cat >tag.sig <<EOF
34too short for a tag
35EOF
36
37check_verify_failure 'Tag object length check' \
38 '^error: .*size wrong.*$'
39
40############################################################
41# 2. object line label check
42
43cat >tag.sig <<EOF
44xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895
45type tag
46tag mytag
47tagger . <> 0 +0000
48
49EOF
50
51check_verify_failure '"object" line label check' '^error: char0: .*"object "$'
52
53############################################################
54# 3. object line SHA1 check
55
56cat >tag.sig <<EOF
57object zz9e9b33986b1c2670fff52c5067603117b3e895
58type tag
59tag mytag
60tagger . <> 0 +0000
61
62EOF
63
64check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$'
65
66############################################################
67# 4. type line label check
68
69cat >tag.sig <<EOF
70object 779e9b33986b1c2670fff52c5067603117b3e895
71xxxx tag
72tag mytag
73tagger . <> 0 +0000
74
75EOF
76
77check_verify_failure '"type" line label check' '^error: char47: .*"\\ntype "$'
78
79############################################################
80# 5. type line eol check
81
82echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
83printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
84
85check_verify_failure '"type" line eol check' '^error: char48: .*"\\n"$'
86
87############################################################
88# 6. tag line label check #1
89
90cat >tag.sig <<EOF
91object 779e9b33986b1c2670fff52c5067603117b3e895
92type tag
93xxx mytag
94tagger . <> 0 +0000
95
96EOF
97
98check_verify_failure '"tag" line label check #1' \
99 '^error: char57: no "tag " found$'
100
101############################################################
102# 7. tag line label check #2
103
104cat >tag.sig <<EOF
105object 779e9b33986b1c2670fff52c5067603117b3e895
106type taggggggggggggggggggggggggggggggg
107tag
108EOF
109
110check_verify_failure '"tag" line label check #2' \
111 '^error: char87: no "tag " found$'
112
113############################################################
114# 8. type line type-name length check
115
116cat >tag.sig <<EOF
117object 779e9b33986b1c2670fff52c5067603117b3e895
118type taggggggggggggggggggggggggggggggg
119tag mytag
120EOF
121
122check_verify_failure '"type" line type-name length check' \
123 '^error: char53: type too long$'
124
125############################################################
126# 9. verify object (SHA1/type) check
127
128cat >tag.sig <<EOF
129object 779e9b33986b1c2670fff52c5067603117b3e895
130type tagggg
131tag mytag
132tagger . <> 0 +0000
133
134EOF
135
136check_verify_failure 'verify object (SHA1/type) check' \
137 '^error: char7: could not verify object.*$'
138
139############################################################
140# 10. verify tag-name check
141
142cat >tag.sig <<EOF
143object $head
144type commit
145tag my tag
146tagger . <> 0 +0000
147
148EOF
149
150check_verify_failure 'verify tag-name check' \
151 '^error: char67: could not verify tag name$'
152
153############################################################
154# 11. tagger line label check #1
155
156cat >tag.sig <<EOF
157object $head
158type commit
159tag mytag
160
161This is filler
162EOF
163
164check_verify_failure '"tagger" line label check #1' \
165 '^error: char70: could not find "tagger "$'
166
167############################################################
168# 12. tagger line label check #2
169
170cat >tag.sig <<EOF
171object $head
172type commit
173tag mytag
174tagger
175
176This is filler
177EOF
178
179check_verify_failure '"tagger" line label check #2' \
180 '^error: char70: could not find "tagger "$'
181
182############################################################
183# 13. detect missing tag author name
184
185cat >tag.sig <<EOF
186object $head
187type commit
188tag mytag
189tagger <> 0 +0000
190
191This is filler
192EOF
193
194check_verify_failure 'detect missing tag author name' \
195 '^error: char77: missing tagger name$'
196
197############################################################
198# 14. detect missing tag author name
199
200cat >tag.sig <<EOF
201object $head
202type commit
203tag mytag
204tagger T A Gger <
205 > 0 +0000
206
207EOF
208
209check_verify_failure 'detect malformed tagger' \
210 '^error: char77: malformed tagger$'
211
212############################################################
213# 15. allow empty tag email
214
215cat >tag.sig <<EOF
216object $head
217type commit
218tag mytag
219tagger T A Gger <> 0 +0000
220
221EOF
222
223test_expect_success \
224 'allow empty tag email' \
225 'git-mktag <tag.sig >.git/refs/tags/mytag 2>message'
226
227############################################################
228# 16. detect missing tag timestamp
229
230cat >tag.sig <<EOF
231object $head
232type commit
233tag mytag
234tagger T A Gger <tagger@example.com>
235
236EOF
237
238check_verify_failure 'detect missing tag timestamp' \
239 '^error: char107: malformed tag timestamp$'
240
241############################################################
242# 17. detect invalid tag timestamp
243
244cat >tag.sig <<EOF
245object $head
246type commit
247tag mytag
248tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
249
250EOF
251
252check_verify_failure 'detect invalid tag timestamp' \
253 '^error: char108: malformed tag timestamp$'
254
255############################################################
256# 18. detect invalid tag timezone
257
258cat >tag.sig <<EOF
259object $head
260type commit
261tag mytag
262tagger T A Gger <tagger@example.com> 1206478233 GMT
263
264EOF
265
266check_verify_failure 'detect invalid tag timezone' \
267 '^error: char118: malformed tag timezone$'
268
269############################################################
270# 19. detect invalid header entry
271
272cat >tag.sig <<EOF
273object $head
274type commit
275tag mytag
276tagger T A Gger <tagger@example.com> 1206478233 -0500
277this line should not be here
278
279EOF
280
281check_verify_failure 'detect invalid header entry' \
282 '^error: char124: trailing garbage in tag header$'
283
284############################################################
285# 20. create valid tag
286
287cat >tag.sig <<EOF
288object $head
289type commit
290tag mytag
291tagger T A Gger <tagger@example.com> 1206478233 -0500
292
293EOF
294
295test_expect_success \
296 'create valid tag' \
297 'git-mktag <tag.sig >.git/refs/tags/mytag 2>message'
298
299############################################################
300# 21. check mytag
301
302test_expect_success \
303 'check mytag' \
304 'git-tag -l | grep mytag'
305
306
307test_done