-rw-r--r-- 6063 cdb-20251021/rts.tests raw
# Requirements:
# XFSZ is signal 25 or signal 31.
#
# Some features not tested here:
# cdbmake traps 4GB overflows.
umask 022
for SUFFIX in '' 64
do
CDB=cdb$SUFFIX
TEST=test$SUFFIX
rm -rf rts-tmp
mkdir rts-tmp
cd rts-tmp
echo "--- ${CDB}make handles simple example"
echo '+3,5:one->Hello
+3,7:two->Goodbye
' | ${CDB}make test.${CDB} test.tmp
echo $?
echo "--- ${CDB}make-12 handles simple example"
echo '
one Hello
# comment line
two Goodbye
' | ${CDB}make-12 12.${CDB} 12.tmp
echo $?
echo "--- ${CDB}make-sv handles simple example"
echo '
# Network services, Internet style
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users #Active Users
systat 11/udp users #Active Users
' | ${CDB}make-sv sv.${CDB} sv.tmp
echo $?
echo "--- ${CDB}dump handles simple examples"
${CDB}dump < test.${CDB}
echo $?
${CDB}dump < 12.${CDB}
echo $?
${CDB}dump < sv.${CDB}
echo $?
echo "--- ${CDB}test handles simple examples"
${CDB}test < test.${CDB}
echo $?
${CDB}test < 12.${CDB}
echo $?
${CDB}test < sv.${CDB}
echo $?
echo "--- ${CDB}stats handles simple examples"
${CDB}stats < test.${CDB}
echo $?
${CDB}stats < 12.${CDB}
echo $?
${CDB}stats < sv.${CDB}
echo $?
echo "--- ${CDB}get retrieves data successfully"
${CDB}get one < test.${CDB}
echo '
'$?
${CDB}get two < test.${CDB}
echo '
'$?
for i in @7 echo @9 discard sink null @11 systat users
do
${CDB}get $i/tcp < sv.${CDB}
echo '
'$?
${CDB}get $i/udp < sv.${CDB}
echo '
'$?
done
echo "--- ${CDB}get exits 100 on nonexistent data"
${CDB}get three < test.${CDB}
echo $?
${CDB}get '#Active' < sv.${CDB}
echo $?
echo "--- ${CDB}make handles repeated keys"
echo '+3,5:one->Hello
+3,7:one->Goodbye
+3,7:one->Another
' | ${CDB}make rep.${CDB} rep.tmp
echo $?
${CDB}dump < rep.${CDB}
echo $?
echo "--- ${CDB}get handles repeated keys"
${CDB}get one < rep.${CDB}
echo '
'$?
${CDB}get one 0 < rep.${CDB}
echo '
'$?
${CDB}get one 1 < rep.${CDB}
echo '
'$?
${CDB}get one 2 < rep.${CDB}
echo '
'$?
${CDB}get one 3 < rep.${CDB}
echo '
'$?
${CDB}get one 4 < rep.${CDB}
echo '
'$?
echo "--- ${CDB}make handles long keys and data"
echo '+320,320:ba483b3442e75cace82def4b5df25bfca887b41687537c21dc4b82cb4c36315e2f6a0661d1af2e05e686c4c595c16561d8c1b3fbee8a6b99c54b3d10d61948445298e97e971f85a600c88164d6b0b09
b5169a54910232db0a56938de61256721667bddc1c0a2b14f5d063ab586a87a957e87f704acb7246c5e8c25becef713a365efef79bb1f406fecee88f3261f68e239c5903e3145961eb0fbc538ff506a
->152e113d5deec3638ead782b93e1b9666d265feb5aebc840e79aa69e2cfc1a2ce4b3254b79fa73c338d22a75e67cfed4cd17b92c405e204a48f21c31cdcf7da46312dc80debfbdaf6dc39d74694a711
6d170c5fde1a81806847cf71732c7f3217a38c6234235951af7b7c1d32e62d480d7c82a63a9d94291d92767ed97dd6a6809d1eb856ce23eda20268cb53fda31c016a19fc20e80aec3bd594a3eb82a5a
' | ${CDB}make test.${CDB} test.tmp
echo $?
echo "--- ${CDB}dump handles long keys and data"
${CDB}dump < test.${CDB}
echo $?
echo "--- ${CDB}test handles long keys and data"
${CDB}test < test.${CDB}
echo $?
echo "--- ${CDB}stats handles long keys and data"
${CDB}stats < test.${CDB}
echo $?
echo "--- ${CDB}get handles long keys and data"
${CDB}get 'ba483b3442e75cace82def4b5df25bfca887b41687537c21dc4b82cb4c36315e2f6a0661d1af2e05e686c4c595c16561d8c1b3fbee8a6b99c54b3d10d61948445298e97e971f85a600c88164d6b0b09
b5169a54910232db0a56938de61256721667bddc1c0a2b14f5d063ab586a87a957e87f704acb7246c5e8c25becef713a365efef79bb1f406fecee88f3261f68e239c5903e3145961eb0fbc538ff506a
' < test.${CDB}
echo '
'$?
rm -f loop
echo "--- ${CDB}make handles unwritable tmp"
ln -s loop loop
echo '' | ${CDB}make test.${CDB} loop
echo $?
echo "--- ${CDB}make handles unmovable ${CDB}"
echo '' | ${CDB}make loop/test.${CDB} test.tmp
echo $?
echo "--- ${CDB}make handles nomem"
for x1 in 1 2 3 4 5 6 7 8 9 10
do
for x2 in 1 2 3 4 5 6 7 8 9 10
do
for x3 in 1 2 3 4 5 6 7 8 9 10
do
for x4 in 1 2 3 4 5 6 7 8 9 10
do
for x5 in 1 2 3 4 5 6 7 8 9 10
do
for x6 in 1 2 3 4 5 6 7 8 9 10
do
echo "+3,5:one->Hello"
done
done
done
done
done
done \
| (
ulimit -d 5000
${CDB}make test.${CDB} test.tmp
echo $?
)
echo "--- ${CDB}make handles full disk"
(
trap '' 25 31
echo '' | (
ulimit -f 1
${CDB}make test.${CDB} test.tmp
echo $?
)
)
case $CDB in
cdb)
echo "--- ${CDB}make rejects klen=4294967296"
echo '+4294967296' | ${CDB}make test.${CDB} test.tmp
echo $?
;;
cdb64)
echo "--- ${CDB}make rejects klen=9223372036854775808"
echo '+9223372036854775808' | ${CDB}make test.${CDB} test.tmp
echo $?
;;
esac
echo "--- ${CDB}get handles empty file"
${CDB}get foo </dev/null
echo $?
echo "--- ${CDB}dump and ${CDB}make handle random.${CDB}"
${CDB}dump < ../random.${CDB} | ${CDB}make test.${CDB} test.tmp
echo $?
cmp ../random.${CDB} test.${CDB}
echo "--- ${CDB}test handles random.${CDB}"
${CDB}test < ../random.${CDB}
echo $?
echo "--- ${CDB}stats handles random.${CDB}"
${CDB}stats < ../random.${CDB}
echo $?
echo "--- ${TEST}zero works"
${TEST}zero 5 > test.${CDB}
echo $?
${CDB}test < test.${CDB}
echo $?
echo "--- ${TEST}zero can build a database very close to 4GB"
${TEST}zero 65507 > /dev/null
echo $?
case $CDB in
cdb)
echo "--- ${TEST}zero complains if hash table passes 4GB"
${TEST}zero 65508 > /dev/null
echo $?
echo "--- ${TEST}zero complains if records pass 4GB"
${TEST}zero 66000 > /dev/null
echo $?
;;
cdb64)
echo "--- ${TEST}zero is ok with records past 4GB"
${TEST}zero 66000 > /dev/null
echo $?
;;
esac
cd ..
done
exit 0