You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
3.5 KiB
192 lines
3.5 KiB
#!/bin/sh |
|
|
|
test_description="Test the svn importer's input handling routines. |
|
|
|
These tests exercise the line_buffer library, but their real purpose |
|
is to check the assumptions that library makes of the platform's input |
|
routines. Processes engaged in bi-directional communication would |
|
hang if fread or fgets is too greedy. |
|
|
|
While at it, check that input of newlines and null bytes are handled |
|
correctly. |
|
" |
|
. ./test-lib.sh |
|
|
|
test -n "$GIT_REMOTE_SVN_TEST_BIG_FILES" && test_set_prereq EXPENSIVE |
|
|
|
generate_tens_of_lines () { |
|
tens=$1 && |
|
line=$2 && |
|
|
|
i=0 && |
|
while test $i -lt "$tens" |
|
do |
|
for j in a b c d e f g h i j |
|
do |
|
echo "$line" |
|
done && |
|
: $((i = $i + 1)) || |
|
return |
|
done |
|
} |
|
|
|
long_read_test () { |
|
: each line is 10 bytes, including newline && |
|
line=abcdefghi && |
|
echo "$line" >expect && |
|
|
|
if ! test_declared_prereq PIPE |
|
then |
|
echo >&4 "long_read_test: need to declare PIPE prerequisite" |
|
return 127 |
|
fi && |
|
tens_of_lines=$(($1 / 100 + 1)) && |
|
lines=$(($tens_of_lines * 10)) && |
|
readsize=$((($lines - 1) * 10 + 3)) && |
|
copysize=7 && |
|
rm -f input && |
|
mkfifo input && |
|
{ |
|
( |
|
generate_tens_of_lines $tens_of_lines "$line" && |
|
exec sleep 100 |
|
) >input & |
|
} && |
|
test-line-buffer input <<-EOF >output && |
|
binary $readsize |
|
copy $copysize |
|
EOF |
|
kill $! && |
|
test_line_count = $lines output && |
|
tail -n 1 <output >actual && |
|
test_cmp expect actual |
|
} |
|
|
|
test_expect_success 'setup: have pipes?' ' |
|
rm -f frob && |
|
if mkfifo frob |
|
then |
|
test_set_prereq PIPE |
|
fi |
|
' |
|
|
|
test_expect_success 'hello world' ' |
|
echo ">HELLO" >expect && |
|
test-line-buffer <<-\EOF >actual && |
|
binary 6 |
|
HELLO |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success PIPE '0-length read, no input available' ' |
|
printf ">" >expect && |
|
rm -f input && |
|
mkfifo input && |
|
{ |
|
sleep 100 >input & |
|
} && |
|
test-line-buffer input <<-\EOF >actual && |
|
binary 0 |
|
copy 0 |
|
EOF |
|
kill $! && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success '0-length read, send along greeting' ' |
|
echo ">HELLO" >expect && |
|
test-line-buffer <<-\EOF >actual && |
|
binary 0 |
|
copy 6 |
|
HELLO |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success PIPE '1-byte read, no input available' ' |
|
printf ">%s" ab >expect && |
|
rm -f input && |
|
mkfifo input && |
|
{ |
|
( |
|
printf "%s" a && |
|
printf "%s" b && |
|
exec sleep 100 |
|
) >input & |
|
} && |
|
test-line-buffer input <<-\EOF >actual && |
|
binary 1 |
|
copy 1 |
|
EOF |
|
kill $! && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success PIPE 'long read (around 8192 bytes)' ' |
|
long_read_test 8192 |
|
' |
|
|
|
test_expect_success PIPE,EXPENSIVE 'longer read (around 65536 bytes)' ' |
|
long_read_test 65536 |
|
' |
|
|
|
test_expect_success 'read from file descriptor' ' |
|
rm -f input && |
|
echo hello >expect && |
|
echo hello >input && |
|
echo copy 6 | |
|
test-line-buffer "&4" 4<input >actual && |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'skip, copy null byte' ' |
|
echo Q | q_to_nul >expect && |
|
q_to_nul <<-\EOF | test-line-buffer >actual && |
|
skip 2 |
|
Q |
|
copy 2 |
|
Q |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'read null byte' ' |
|
echo ">QhelloQ" | q_to_nul >expect && |
|
q_to_nul <<-\EOF | test-line-buffer >actual && |
|
binary 8 |
|
QhelloQ |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'long reads are truncated' ' |
|
echo ">foo" >expect && |
|
test-line-buffer <<-\EOF >actual && |
|
binary 5 |
|
foo |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'long copies are truncated' ' |
|
printf "%s\n" ">" foo >expect && |
|
test-line-buffer <<-\EOF >actual && |
|
binary 1 |
|
|
|
copy 5 |
|
foo |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_expect_success 'long binary reads are truncated' ' |
|
echo ">foo" >expect && |
|
test-line-buffer <<-\EOF >actual && |
|
binary 5 |
|
foo |
|
EOF |
|
test_cmp expect actual |
|
' |
|
|
|
test_done
|
|
|