3 a5feed5f 2022-12-26 stsp # Copyright (c) 2022 Mikhail Pchelin <misha@freebsd.org>
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.
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.
17 a5feed5f 2022-12-26 stsp . ../cmdline/common.sh
18 a5feed5f 2022-12-26 stsp . ./common.sh
20 9bd4acdb 2022-12-27 op dummy_commit="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
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`
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
30 9bd4acdb 2022-12-27 op echo -n "0041ERR object $dummy_commit not found" \
31 9bd4acdb 2022-12-27 op > $testroot/stdout.expected
33 9bd4acdb 2022-12-27 op echo "gotsh: object $dummy_commit not found" \
34 9bd4acdb 2022-12-27 op > $testroot/stderr.expected
36 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 112
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"
44 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
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"
52 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
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`
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
63 a5feed5f 2022-12-26 stsp echo -n "00000028ERR unexpected flush packet received" \
64 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
66 a5feed5f 2022-12-26 stsp echo "gotsh: unexpected flush packet received" \
67 a5feed5f 2022-12-26 stsp > $testroot/stderr.expected
69 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
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"
77 a5feed5f 2022-12-26 stsp cmp -s $testroot/stderr $testroot/stderr.expected
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"
85 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
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`
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
96 96afb0d6 2023-01-21 stsp echo -n '006c0000000000000000000000000000000000000000 ' \
97 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
98 96afb0d6 2023-01-21 stsp printf "capabilities^{}\0" >> $testroot/stdout.expected
99 96afb0d6 2023-01-21 stsp echo -n " agent=got/${GOT_VERSION_STR} ofs-delta side-band-64k" \
100 96afb0d6 2023-01-21 stsp >> $testroot/stdout.expected
101 96afb0d6 2023-01-21 stsp echo -n '00000018ERR packet too short' >> $testroot/stdout.expected
103 96afb0d6 2023-01-21 stsp echo "gotsh: packet too short" > $testroot/stderr.expected
105 96afb0d6 2023-01-21 stsp cmp -s $testroot/stdout.expected $testroot/stdout
107 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
108 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
109 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
113 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
115 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
116 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
117 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
118 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
121 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
124 a5feed5f 2022-12-26 stsp # Pkt-len too small
125 a5feed5f 2022-12-26 stsp test_request_bad_length_small() {
126 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_small`
128 9bd4acdb 2022-12-27 op echo "0002want $dummy_commit multi_ack side-band-64k ofs-delta" \
129 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
130 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
132 96afb0d6 2023-01-21 stsp echo -n '006c0000000000000000000000000000000000000000 ' \
133 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
134 96afb0d6 2023-01-21 stsp printf "capabilities^{}\0" >> $testroot/stdout.expected
135 96afb0d6 2023-01-21 stsp echo -n " agent=got/${GOT_VERSION_STR} ofs-delta side-band-64k" \
136 96afb0d6 2023-01-21 stsp >> $testroot/stdout.expected
137 96afb0d6 2023-01-21 stsp echo -n '00000018ERR packet too short' >> $testroot/stdout.expected
139 96afb0d6 2023-01-21 stsp echo "gotsh: packet too short" > $testroot/stderr.expected
141 96afb0d6 2023-01-21 stsp cmp -s $testroot/stdout.expected $testroot/stdout
143 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
144 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
145 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
149 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
151 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
152 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
153 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
154 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
157 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
160 a5feed5f 2022-12-26 stsp # Pkt-len too large
161 a5feed5f 2022-12-26 stsp test_request_bad_length_large() {
162 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_length_large`
164 9bd4acdb 2022-12-27 op echo "ffffwant $dummy_commit multi_ack side-band-64k ofs-delta" \
165 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
166 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
168 96afb0d6 2023-01-21 stsp echo -n '006c0000000000000000000000000000000000000000 ' \
169 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
170 96afb0d6 2023-01-21 stsp printf "capabilities^{}\0" >> $testroot/stdout.expected
171 96afb0d6 2023-01-21 stsp echo -n " agent=got/${GOT_VERSION_STR} ofs-delta side-band-64k" \
172 96afb0d6 2023-01-21 stsp >> $testroot/stdout.expected
173 96afb0d6 2023-01-21 stsp echo -n '0000001eERR unexpected end of file' \
174 96afb0d6 2023-01-21 stsp >> $testroot/stdout.expected
176 96afb0d6 2023-01-21 stsp echo "gotsh: unexpected end of file" > $testroot/stderr.expected
178 96afb0d6 2023-01-21 stsp cmp -s $testroot/stdout.expected $testroot/stdout
180 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
181 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
182 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
186 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
188 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
189 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
190 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
191 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
194 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
197 a5feed5f 2022-12-26 stsp # Unknown feature
198 a5feed5f 2022-12-26 stsp test_request_bad_capabilities() {
199 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_capabilities`
201 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
202 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/test-repo' \
203 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
205 a5feed5f 2022-12-26 stsp echo -n "00000025ERR unexpected want-line received" \
206 a5feed5f 2022-12-26 stsp > $testroot/stdout.expected
208 a5feed5f 2022-12-26 stsp echo "gotsh: unexpected want-line received" > $testroot/stderr.expected
210 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout 0 108
212 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
213 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
214 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
218 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
220 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
221 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
222 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
223 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
226 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
229 a5feed5f 2022-12-26 stsp # Unknown repository
230 a5feed5f 2022-12-26 stsp test_request_bad_repository() {
231 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_repository`
233 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
234 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack '/XXXX-XXXX' \
235 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
237 a5feed5f 2022-12-26 stsp echo -n "001fERR no git repository found" > $testroot/stdout.expected
239 a5feed5f 2022-12-26 stsp echo "gotsh: no git repository found" > $testroot/stderr.expected
241 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout
243 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
244 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
245 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
249 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
251 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
252 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
253 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
254 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
257 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
261 a5feed5f 2022-12-26 stsp # Repository with name of 255 symbols
262 a5feed5f 2022-12-26 stsp test_request_bad_large_repo_name() {
263 a5feed5f 2022-12-26 stsp local testroot=`test_init test_request_bad_large_repo_name`
265 9bd4acdb 2022-12-27 op # build a string of 255 "A": 63 "A" four times plus tree more "A"
266 9bd4acdb 2022-12-27 op local a=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
267 9bd4acdb 2022-12-27 op local repo_name="AAA$a$a$a$a"
269 9bd4acdb 2022-12-27 op echo "0054want $dummy_commit aaaaaaaaa bbbbbbbbbbbbb ccccccccc" \
270 9bd4acdb 2022-12-27 op | ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack "/$repo_name" \
271 9bd4acdb 2022-12-27 op > $testroot/stdout 2>$testroot/stderr
273 a5feed5f 2022-12-26 stsp echo -n "0018ERR buffer too small" > $testroot/stdout.expected
275 a5feed5f 2022-12-26 stsp echo "gotsh: buffer too small" > $testroot/stderr.expected
277 9bd4acdb 2022-12-27 op cmp -s $testroot/stdout.expected $testroot/stdout
279 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
280 a5feed5f 2022-12-26 stsp echo "unexpected stdout" >&2
281 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
285 9bd4acdb 2022-12-27 op cmp -s $testroot/stderr.expected $testroot/stderr
287 a5feed5f 2022-12-26 stsp if [ $ret -ne 0 ]; then
288 a5feed5f 2022-12-26 stsp echo "unexpected stderr" >&2
289 9bd4acdb 2022-12-27 op diff -u $testroot/stderr.expected $testroot/stderr
290 a5feed5f 2022-12-26 stsp test_done "$testroot" "1"
293 a5feed5f 2022-12-26 stsp test_done "$testroot" "$ret"
296 87724ba0 2023-01-22 op test_request_bad_no_repo() {
297 87724ba0 2023-01-22 op local testroot=`test_init test_request_bad_no_repo`
299 87724ba0 2023-01-22 op for i in `seq 10`; do
300 87724ba0 2023-01-22 op ssh ${GOTD_DEVUSER}@127.0.0.1 git-upload-pack \
301 87724ba0 2023-01-22 op >/dev/null 2>/dev/null </dev/null
304 87724ba0 2023-01-22 op # should still be able to clone; the repo is empty however
305 87724ba0 2023-01-22 op got clone -q ${GOTD_TEST_REPO_URL} $testroot/repo-clone \
306 87724ba0 2023-01-22 op 2> $testroot/stderr
307 87724ba0 2023-01-22 op cat <<EOF > $testroot/stderr.expected
308 87724ba0 2023-01-22 op got-fetch-pack: could not find any branches to fetch
309 87724ba0 2023-01-22 op got: could not find any branches to fetch
312 87724ba0 2023-01-22 op if ! cmp -s "$testroot/stderr.expected" "$testroot/stderr"; then
313 87724ba0 2023-01-22 op echo "got clone failed for unexpected reason" >&2
314 87724ba0 2023-01-22 op diff -u "$testroot/stderr.expected" "$testroot/stderr"
315 87724ba0 2023-01-22 op test_done "$testroot" 1
319 87724ba0 2023-01-22 op test_done "$testroot" 0
322 a5feed5f 2022-12-26 stsp test_parseargs "$@"
323 a5feed5f 2022-12-26 stsp run_test test_request_bad_commit
324 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_zero
325 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_empty
326 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_small
327 a5feed5f 2022-12-26 stsp run_test test_request_bad_length_large
328 a5feed5f 2022-12-26 stsp run_test test_request_bad_capabilities
329 a5feed5f 2022-12-26 stsp run_test test_request_bad_repository
330 a5feed5f 2022-12-26 stsp run_test test_request_bad_large_repo_name
331 87724ba0 2023-01-22 op run_test test_request_bad_no_repo