annotate tests/0010/run-test.sh @ 251:a6c9a1c68646

Detect when we've run out of per-file space on insert() and batchinsert(). Exposed by Lute Music/frames1 dataset, we previously corrupted the trackTable and then got a segfault. This happened because the fileTable and trackTable were mmap()ed next to each other, by coincidence, and the lack of overflow checking on the fileTable meant that continued insertion scribbled over the trackTable, which was twice as big (because it has to be at least one memory page in size). The root cause of all this is the --size creation argument, which needs to be split into --nfiles, --datasize and --dimensions, so that the size of all the tables can be computed accurately. No test case yet, because my /bin/sh is currently pointing to dash, which gets about as far as line 6 of run-tests.sh before giving up. (We need either to fix bashisms or to run /bin/bash explicitly.)
author mas01cr
date Mon, 31 Mar 2008 11:52:59 +0000
parents 8ef2efe604c9
children fe4dc39b2dd7
rev   line source
mas01cr@69 1 #! /bin/sh
mas01cr@69 2
mas01cr@69 3 . ../test-utils.sh
mas01cr@69 4
mas01cr@69 5 if [ -f testdb ]; then rm -f testdb; fi
mas01cr@69 6
mas01cr@69 7 ${AUDIODB} -d testdb -N
mas01cr@69 8
mas01cr@69 9 intstring 2 > testfeature01
mas01cr@69 10 floatstring 0 1 >> testfeature01
mas01cr@69 11 intstring 2 > testfeature10
mas01cr@69 12 floatstring 1 0 >> testfeature10
mas01cr@69 13
mas01cr@69 14 ${AUDIODB} -d testdb -I -f testfeature01
mas01cr@69 15 ${AUDIODB} -d testdb -I -f testfeature10
mas01cr@69 16
mas01cr@69 17 # sequence queries require L2NORM
mas01cr@69 18 ${AUDIODB} -d testdb -L
mas01cr@69 19
mas01cr@69 20 echo "query point (0.0,0.5)"
mas01cr@69 21 intstring 2 > testquery
mas01cr@69 22 floatstring 0 0.5 >> testquery
mas01cr@69 23
mas01cr@69 24 ${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
mas01cr@69 25 echo testfeature01 1 > test-expected-output
mas01cr@69 26 echo testfeature10 1 >> test-expected-output
mas01cr@69 27 cmp testoutput test-expected-output
mas01cr@69 28 ${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -R 5 > testoutput
mas01cr@69 29 echo testfeature01 1 > test-expected-output
mas01cr@69 30 cmp testoutput test-expected-output
mas01cr@69 31
mas01cr@69 32 echo "query point (0.5,0.0)"
mas01cr@69 33 intstring 2 > testquery
mas01cr@69 34 floatstring 0.5 0 >> testquery
mas01cr@69 35
mas01cr@69 36 # FIXME: because there's only one point in each track (and the query),
mas01cr@69 37 # the ordering is essentially database order. We need these test
mas01cr@69 38 # cases anyway because we need to test non-segfaulting, non-empty
mas01cr@69 39 # results...
mas01cr@69 40
mas01cr@69 41 ${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -R 5 > testoutput
mas01cr@69 42 echo testfeature01 1 > test-expected-output
mas01cr@69 43 echo testfeature10 1 >> test-expected-output
mas01cr@69 44 cmp testoutput test-expected-output
mas01cr@69 45 ${AUDIODB} -d testdb -Q sequence -l 1 -f testquery -r 1 -R 5 > testoutput
mas01cr@69 46 echo testfeature01 1 > test-expected-output
mas01cr@69 47 cmp testoutput test-expected-output
mas01cr@69 48
mas01cr@69 49 exit 104