Blame


1 a5feed5f 2022-12-26 stsp #!/bin/sh
2 a5feed5f 2022-12-26 stsp #
3 a5feed5f 2022-12-26 stsp # Copyright (c) 2022 Mikhail Pchelin <misha@freebsd.org>
4 a5feed5f 2022-12-26 stsp #
5 a5feed5f 2022-12-26 stsp # Permission to use, copy, modify, and distribute this software for any
6 a5feed5f 2022-12-26 stsp # purpose with or without fee is hereby granted, provided that the above
7 a5feed5f 2022-12-26 stsp # copyright notice and this permission notice appear in all copies.
8 a5feed5f 2022-12-26 stsp #
9 a5feed5f 2022-12-26 stsp # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 a5feed5f 2022-12-26 stsp # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 a5feed5f 2022-12-26 stsp # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 a5feed5f 2022-12-26 stsp # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 a5feed5f 2022-12-26 stsp # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 a5feed5f 2022-12-26 stsp # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 a5feed5f 2022-12-26 stsp # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 a5feed5f 2022-12-26 stsp
17 a5feed5f 2022-12-26 stsp . ../cmdline/common.sh
18 a5feed5f 2022-12-26 stsp . ./common.sh
19 a5feed5f 2022-12-26 stsp
20 9bd4acdb 2022-12-27 op dummy_commit="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
21 9bd4acdb 2022-12-27 op
22 a5feed5f 2022-12-26 stsp # Non-existent commit
23 a5feed5f 2022-12-26 stsp test_request_bad_commit() {
24 a5feed5f 2022-12-26 stsp local testroot=`test_init request_bad_commit`
25 a5feed5f 2022-12-26 stsp
26 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit multi_ack side-band-64k ofs-delta" \
27 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
28 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
29 a5feed5f 2022-12-26 stsp
30 9bd4acdb 2022-12-27 op echo -n "0041ERR object $dummy_commit not found" \
31 9bd4acdb 2022-12-27 op > $testroot/stdout.expected
32 a5feed5f 2022-12-26 stsp
33 9bd4acdb 2022-12-27 op echo "gotsh: object $dummy_commit not found" \
34 9bd4acdb 2022-12-27 op > $testroot/stderr.expected
35 a5feed5f 2022-12-26 stsp
36 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 112
37 a5feed5f 2022-12-26 stsp ret=$?
38 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
39 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
40 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
41 a5feed5f 2022-12-26 stsp return 1
42 a5feed5f 2022-12-26 stsp fi
43 a5feed5f 2022-12-26 stsp
44 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
45 a5feed5f 2022-12-26 stsp ret=$?
46 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
47 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
48 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
49 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
50 a5feed5f 2022-12-26 stsp return 1
51 a5feed5f 2022-12-26 stsp fi
52 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
53 a5feed5f 2022-12-26 stsp }
54 a5feed5f 2022-12-26 stsp
55 a5feed5f 2022-12-26 stsp # Zero pkt-len (as flush packet with payload)
56 a5feed5f 2022-12-26 stsp test_request_bad_length_zero() {
57 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_zero`
58 a5feed5f 2022-12-26 stsp
59 9bd4acdb 2022-12-27 op echo "0000want $dummy_commit multi_ack side-band-64k ofs-delta" \
60 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
61 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
62 a5feed5f 2022-12-26 stsp
63 a5feed5f 2022-12-26 stsp echo -n "00000028ERR unexpected flush packet received" \
64 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
65 a5feed5f 2022-12-26 stsp
66 a5feed5f 2022-12-26 stsp echo "gotsh: unexpected flush packet received" \
67 a5feed5f 2022-12-26 stsp > $testroot/stderr.expected
68 a5feed5f 2022-12-26 stsp
69 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
70 a5feed5f 2022-12-26 stsp ret=$?
71 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
72 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
73 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
74 a5feed5f 2022-12-26 stsp return 1
75 a5feed5f 2022-12-26 stsp fi
76 a5feed5f 2022-12-26 stsp
77 a5feed5f 2022-12-26 stsp cmp -s $testroot/stderr $testroot/stderr.expected
78 a5feed5f 2022-12-26 stsp ret=$?
79 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
80 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
81 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
82 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
83 a5feed5f 2022-12-26 stsp return 1
84 a5feed5f 2022-12-26 stsp fi
85 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
86 a5feed5f 2022-12-26 stsp }
87 a5feed5f 2022-12-26 stsp
88 a5feed5f 2022-12-26 stsp # 0004 (empty)
89 a5feed5f 2022-12-26 stsp test_request_bad_length_empty() {
90 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_empty`
91 a5feed5f 2022-12-26 stsp
92 9bd4acdb 2022-12-27 op echo "0004want $dummy_commit multi_ack side-band-64k ofs-delta" \
93 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
94 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
95 a5feed5f 2022-12-26 stsp
96 9bd4acdb 2022-12-27 op printf "00000008NAK\n0021ERR read: Bad file descriptor" \
97 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
98 a5feed5f 2022-12-26 stsp
99 a5feed5f 2022-12-26 stsp echo "gotsh: read: Bad file descriptor" > $testroot/stderr.expected
100 a5feed5f 2022-12-26 stsp
101 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
102 a5feed5f 2022-12-26 stsp ret=$?
103 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
104 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
105 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
106 a5feed5f 2022-12-26 stsp return 1
107 a5feed5f 2022-12-26 stsp fi
108 a5feed5f 2022-12-26 stsp
109 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
110 a5feed5f 2022-12-26 stsp ret=$?
111 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
112 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
113 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
114 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
115 a5feed5f 2022-12-26 stsp return 1
116 a5feed5f 2022-12-26 stsp fi
117 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
118 a5feed5f 2022-12-26 stsp }
119 a5feed5f 2022-12-26 stsp
120 a5feed5f 2022-12-26 stsp # Pkt-len too small
121 a5feed5f 2022-12-26 stsp test_request_bad_length_small() {
122 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_small`
123 a5feed5f 2022-12-26 stsp
124 9bd4acdb 2022-12-27 op echo "0002want $dummy_commit multi_ack side-band-64k ofs-delta" \
125 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
126 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
127 a5feed5f 2022-12-26 stsp
128 9bd4acdb 2022-12-27 op printf "00000008NAK\n0021ERR read: Bad file descriptor" \
129 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
130 a5feed5f 2022-12-26 stsp
131 a5feed5f 2022-12-26 stsp echo "gotsh: read: Bad file descriptor" > $testroot/stderr.expected
132 a5feed5f 2022-12-26 stsp
133 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
134 a5feed5f 2022-12-26 stsp ret=$?
135 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
136 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
137 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
138 a5feed5f 2022-12-26 stsp return 1
139 a5feed5f 2022-12-26 stsp fi
140 a5feed5f 2022-12-26 stsp
141 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
142 a5feed5f 2022-12-26 stsp ret=$?
143 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
144 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
145 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
146 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
147 a5feed5f 2022-12-26 stsp return 1
148 a5feed5f 2022-12-26 stsp fi
149 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
150 a5feed5f 2022-12-26 stsp }
151 9bd4acdb 2022-12-27 op
152 a5feed5f 2022-12-26 stsp # Pkt-len too large
153 a5feed5f 2022-12-26 stsp test_request_bad_length_large() {
154 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_large`
155 a5feed5f 2022-12-26 stsp
156 9bd4acdb 2022-12-27 op echo "ffffwant $dummy_commit multi_ack side-band-64k ofs-delta" \
157 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
158 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
159 a5feed5f 2022-12-26 stsp
160 9bd4acdb 2022-12-27 op printf "00000008NAK\n0021ERR read: Bad file descriptor" \
161 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
162 a5feed5f 2022-12-26 stsp
163 a5feed5f 2022-12-26 stsp echo "gotsh: read: Bad file descriptor" > $testroot/stderr.expected
164 a5feed5f 2022-12-26 stsp
165 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
166 a5feed5f 2022-12-26 stsp ret=$?
167 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
168 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
169 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
170 a5feed5f 2022-12-26 stsp return 1
171 a5feed5f 2022-12-26 stsp fi
172 a5feed5f 2022-12-26 stsp
173 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
174 a5feed5f 2022-12-26 stsp ret=$?
175 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
176 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
177 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
178 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
179 a5feed5f 2022-12-26 stsp return 1
180 a5feed5f 2022-12-26 stsp fi
181 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
182 a5feed5f 2022-12-26 stsp }
183 a5feed5f 2022-12-26 stsp
184 a5feed5f 2022-12-26 stsp # Unknown feature
185 a5feed5f 2022-12-26 stsp test_request_bad_capabilities() {
186 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_capabilities`
187 a5feed5f 2022-12-26 stsp
188 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
189 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
190 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
191 a5feed5f 2022-12-26 stsp
192 a5feed5f 2022-12-26 stsp echo -n "00000025ERR unexpected want-line received" \
193 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
194 a5feed5f 2022-12-26 stsp
195 a5feed5f 2022-12-26 stsp echo "gotsh: unexpected want-line received" > $testroot/stderr.expected
196 a5feed5f 2022-12-26 stsp
197 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
198 a5feed5f 2022-12-26 stsp ret=$?
199 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
200 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
201 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
202 a5feed5f 2022-12-26 stsp return 1
203 a5feed5f 2022-12-26 stsp fi
204 a5feed5f 2022-12-26 stsp
205 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
206 a5feed5f 2022-12-26 stsp ret=$?
207 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
208 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
209 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
210 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
211 a5feed5f 2022-12-26 stsp return 1
212 a5feed5f 2022-12-26 stsp fi
213 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
214 a5feed5f 2022-12-26 stsp }
215 a5feed5f 2022-12-26 stsp
216 a5feed5f 2022-12-26 stsp # Unknown repository
217 a5feed5f 2022-12-26 stsp test_request_bad_repository() {
218 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_repository`
219 a5feed5f 2022-12-26 stsp
220 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
221 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/XXXX-XXXX' \
222 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
223 a5feed5f 2022-12-26 stsp
224 a5feed5f 2022-12-26 stsp echo -n "001fERR no git repository found" > $testroot/stdout.expected
225 a5feed5f 2022-12-26 stsp
226 a5feed5f 2022-12-26 stsp echo "gotsh: no git repository found" > $testroot/stderr.expected
227 a5feed5f 2022-12-26 stsp
228 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout
229 a5feed5f 2022-12-26 stsp ret=$?
230 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
231 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
232 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
233 a5feed5f 2022-12-26 stsp return 1
234 a5feed5f 2022-12-26 stsp fi
235 a5feed5f 2022-12-26 stsp
236 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
237 a5feed5f 2022-12-26 stsp ret=$?
238 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
239 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
240 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
241 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
242 a5feed5f 2022-12-26 stsp return 1
243 a5feed5f 2022-12-26 stsp fi
244 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
245 a5feed5f 2022-12-26 stsp
246 a5feed5f 2022-12-26 stsp }
247 a5feed5f 2022-12-26 stsp
248 a5feed5f 2022-12-26 stsp # Repository with name of 255 symbols
249 a5feed5f 2022-12-26 stsp test_request_bad_large_repo_name() {
250 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_large_repo_name`
251 a5feed5f 2022-12-26 stsp
252 9bd4acdb 2022-12-27 op # build a string of 255 "A": 63 "A" four times plus tree more "A"
253 9bd4acdb 2022-12-27 op local a=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
254 9bd4acdb 2022-12-27 op local repo_name="AAA$a$a$a$a"
255 a5feed5f 2022-12-26 stsp
256 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
257 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack "/$repo_name" \
258 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
259 9bd4acdb 2022-12-27 op
260 a5feed5f 2022-12-26 stsp echo -n "0018ERR buffer too small" > $testroot/stdout.expected
261 a5feed5f 2022-12-26 stsp
262 a5feed5f 2022-12-26 stsp echo "gotsh: buffer too small" > $testroot/stderr.expected
263 a5feed5f 2022-12-26 stsp
264 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout
265 a5feed5f 2022-12-26 stsp ret=$?
266 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
267 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
268 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
269 a5feed5f 2022-12-26 stsp return 1
270 a5feed5f 2022-12-26 stsp fi
271 a5feed5f 2022-12-26 stsp
272 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
273 a5feed5f 2022-12-26 stsp ret=$?
274 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
275 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
276 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
277 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
278 a5feed5f 2022-12-26 stsp return 1
279 a5feed5f 2022-12-26 stsp fi
280 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
281 a5feed5f 2022-12-26 stsp }
282 9bd4acdb 2022-12-27 op
283 a5feed5f 2022-12-26 stsp test_parseargs "$@"
284 a5feed5f 2022-12-26 stsp run_test test_request_bad_commit
285 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_zero
286 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_empty
287 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_small
288 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_large
289 a5feed5f 2022-12-26 stsp run_test test_request_bad_capabilities
290 a5feed5f 2022-12-26 stsp run_test test_request_bad_repository
291 a5feed5f 2022-12-26 stsp run_test test_request_bad_large_repo_name