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 test_expect_success \
16 "$1" \
17 'git-mktag <tag.sig 2>message ||
18 egrep -q -f expect.pat message'
19}
20
21###########################################################
22# first create a commit, so we have a valid object/type
23# for the tag.
24echo Hello >A
25git-update-index --add A
26git-commit -m "Initial commit"
27head=$(git-rev-parse --verify HEAD)
28
29############################################################
30# 1. length check
31
32cat >tag.sig <<EOF
33too short for a tag
34EOF
35
36cat >expect.pat <<EOF
37^error: .*size wrong.*$
38EOF
39
40check_verify_failure 'Tag object length check'
41
42############################################################
43# 2. object line label check
44
45cat >tag.sig <<EOF
46xxxxxx 139e9b33986b1c2670fff52c5067603117b3e895
47type tag
48tag mytag
49EOF
50
51cat >expect.pat <<EOF
52^error: char0: .*"object "$
53EOF
54
55check_verify_failure '"object" line label check'
56
57############################################################
58# 3. object line SHA1 check
59
60cat >tag.sig <<EOF
61object zz9e9b33986b1c2670fff52c5067603117b3e895
62type tag
63tag mytag
64EOF
65
66cat >expect.pat <<EOF
67^error: char7: .*SHA1 hash$
68EOF
69
70check_verify_failure '"object" line SHA1 check'
71
72############################################################
73# 4. type line label check
74
75cat >tag.sig <<EOF
76object 779e9b33986b1c2670fff52c5067603117b3e895
77xxxx tag
78tag mytag
79EOF
80
81cat >expect.pat <<EOF
82^error: char47: .*"[\]ntype "$
83EOF
84
85check_verify_failure '"type" line label check'
86
87############################################################
88# 5. type line eol check
89
90echo "object 779e9b33986b1c2670fff52c5067603117b3e895" >tag.sig
91printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
92
93cat >expect.pat <<EOF
94^error: char48: .*"[\]n"$
95EOF
96
97check_verify_failure '"type" line eol check'
98
99############################################################
100# 6. tag line label check #1
101
102cat >tag.sig <<EOF
103object 779e9b33986b1c2670fff52c5067603117b3e895
104type tag
105xxx mytag
106EOF
107
108cat >expect.pat <<EOF
109^error: char57: no "tag " found$
110EOF
111
112check_verify_failure '"tag" line label check #1'
113
114############################################################
115# 7. tag line label check #2
116
117cat >tag.sig <<EOF
118object 779e9b33986b1c2670fff52c5067603117b3e895
119type taggggggggggggggggggggggggggggggg
120tag
121EOF
122
123cat >expect.pat <<EOF
124^error: char87: no "tag " found$
125EOF
126
127check_verify_failure '"tag" line label check #2'
128
129############################################################
130# 8. type line type-name length check
131
132cat >tag.sig <<EOF
133object 779e9b33986b1c2670fff52c5067603117b3e895
134type taggggggggggggggggggggggggggggggg
135tag mytag
136EOF
137
138cat >expect.pat <<EOF
139^error: char53: type too long$
140EOF
141
142check_verify_failure '"type" line type-name length check'
143
144############################################################
145# 9. verify object (SHA1/type) check
146
147cat >tag.sig <<EOF
148object 779e9b33986b1c2670fff52c5067603117b3e895
149type tagggg
150tag mytag
151EOF
152
153cat >expect.pat <<EOF
154^error: char7: could not verify object.*$
155EOF
156
157check_verify_failure 'verify object (SHA1/type) check'
158
159############################################################
160# 10. verify tag-name check
161
162cat >tag.sig <<EOF
163object $head
164type commit
165tag my tag
166EOF
167
168cat >expect.pat <<EOF
169^error: char67: could not verify tag name$
170EOF
171
172check_verify_failure 'verify tag-name check'
173
174############################################################
175# 11. tagger line lable check #1
176
177cat >tag.sig <<EOF
178object $head
179type commit
180tag mytag
181EOF
182
183cat >expect.pat <<EOF
184^error: char70: could not find "tagger"$
185EOF
186
187check_verify_failure '"tagger" line label check #1'
188
189############################################################
190# 12. tagger line lable check #2
191
192cat >tag.sig <<EOF
193object $head
194type commit
195tag mytag
196tagger
197EOF
198
199cat >expect.pat <<EOF
200^error: char70: could not find "tagger"$
201EOF
202
203check_verify_failure '"tagger" line label check #2'
204
205############################################################
206# 13. create valid tag
207
208cat >tag.sig <<EOF
209object $head
210type commit
211tag mytag
212tagger another@example.com
213EOF
214
215test_expect_success \
216 'create valid tag' \
217 'git-mktag <tag.sig >.git/refs/tags/mytag 2>message'
218
219############################################################
220# 14. check mytag
221
222test_expect_success \
223 'check mytag' \
224 'git-tag -l | grep mytag'
225
226
227test_done