144 lines
2.4 KiB
Bash
144 lines
2.4 KiB
Bash
|
#! /bin/sh
|
||
|
|
||
|
# tests.sh: This script will run tests for cdb.
|
||
|
# Execute with ./tests.sh ./cdb
|
||
|
# (first arg if present gives path to cdb tool to use, default is `cdb').
|
||
|
#
|
||
|
# This file is a part of tinycdb package by Michael Tokarev, mjt+cdb@corpit.ru.
|
||
|
# Public domain.
|
||
|
|
||
|
case "$1" in
|
||
|
"") cdb=cdb ;;
|
||
|
*) cdb="$1" ;;
|
||
|
esac
|
||
|
|
||
|
do_csum() {
|
||
|
echo checksum may fail if no md5sum program
|
||
|
md5sum $1 | sed -e 's|[ ].*||' -e 'y|[ABCDEF]|[abcdef]|'
|
||
|
}
|
||
|
|
||
|
rm -f 1.cdb 1a.cdb
|
||
|
|
||
|
echo Create simple db
|
||
|
echo "+3,4:one->here
|
||
|
+1,1:a->b
|
||
|
+1,3:b->abc
|
||
|
+3,4:one->also
|
||
|
|
||
|
" | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
do_csum 1.cdb
|
||
|
|
||
|
echo Dump simple db
|
||
|
$cdb -d 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo Stats for simple db
|
||
|
$cdb -s 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo "Query simple db (two records match)"
|
||
|
$cdb -q 1.cdb one
|
||
|
echo "
|
||
|
$?"
|
||
|
|
||
|
echo Query for non-existed key
|
||
|
$cdb -q 1.cdb none
|
||
|
echo $?
|
||
|
|
||
|
echo Doing 600 repeated records
|
||
|
(
|
||
|
for i in 0 1 2 3 4 5 ; do
|
||
|
for j in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for k in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
echo "+1,3:a->$i$j$k"
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
echo "+1,5:b->other"
|
||
|
echo
|
||
|
) | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
do_csum 1.cdb
|
||
|
echo cdb stats should show 601 record
|
||
|
$cdb -s 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo Querying key
|
||
|
$cdb -q 1.cdb b
|
||
|
echo "
|
||
|
"$?
|
||
|
|
||
|
echo Dumping and re-creating db
|
||
|
$cdb -d 1.cdb | $cdb -c 1a.cdb
|
||
|
echo $?
|
||
|
cmp 1.cdb 1a.cdb
|
||
|
|
||
|
$cdb -d -m 1.cdb | $cdb -c -m 1a.cdb
|
||
|
echo $?
|
||
|
cmp 1.cdb 1a.cdb
|
||
|
|
||
|
echo Handling large key size
|
||
|
echo "+123456789012,1:" | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo Handling large value size
|
||
|
echo "+1,123456789012:" | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo "Handling invalid input format (short file)"
|
||
|
echo "+10,10:" | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
|
||
|
echo Creating db with eol in key and value
|
||
|
echo "+2,2:a
|
||
|
->b
|
||
|
|
||
|
" | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
do_csum 1.cdb
|
||
|
|
||
|
echo Querying key-value with eol
|
||
|
$cdb -q 1.cdb "a
|
||
|
"
|
||
|
echo $?
|
||
|
|
||
|
echo Handling file size limits
|
||
|
(
|
||
|
ulimit -f 4
|
||
|
trap '' 25
|
||
|
(
|
||
|
for i in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for j in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for k in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
echo "+4,4:k$i$j$k->v$i$j$k"
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
echo
|
||
|
) | $cdb -c 1.cdb
|
||
|
echo $?
|
||
|
)
|
||
|
|
||
|
if false ; then # does not work for now, bugs in libc
|
||
|
echo Handling oom condition
|
||
|
(
|
||
|
for i0 in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for i1 in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for i2 in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for i3 in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
for i4 in 0 1 2 3 4 5 6 7 8 9 ; do
|
||
|
echo "+5,0:$i0$i1$i2$i3$i4->"
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
done
|
||
|
echo
|
||
|
) | (ulimit -v 1900; $cdb -c 1.cdb)
|
||
|
echo $?
|
||
|
fi
|
||
|
|
||
|
rm -rf 1.cdb 1a.cdb 1.cdb.tmp
|
||
|
exit 0
|