aboutsummaryrefslogtreecommitdiffhomepage
path: root/performance-test/perf-test-lib.sh
diff options
context:
space:
mode:
authorGravatar David Bremner <bremner@debian.org>2012-11-17 12:28:15 -0400
committerGravatar David Bremner <bremner@debian.org>2012-11-26 08:39:21 -0400
commit7beeb8c88a014ecbc53d8241f10683b3c4c16228 (patch)
treeccd4592417e741447cf97904bab1fd8888f78948 /performance-test/perf-test-lib.sh
parent20b7e0ff2f12e612dee00efc6ff1634aae8172a4 (diff)
test: initial performance testing infrastructure
This is not near as fancy as as the unit tests, on the theory that the code should typically be crashing when performance tuning. Nonetheless, there is plenty of room for improvement. Several more of the pieces of the test infrastructure (e.g. the option parsing) could be factored out into test/test-lib-common.sh
Diffstat (limited to 'performance-test/perf-test-lib.sh')
-rw-r--r--performance-test/perf-test-lib.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/performance-test/perf-test-lib.sh b/performance-test/perf-test-lib.sh
new file mode 100644
index 00000000..80ec1eb0
--- /dev/null
+++ b/performance-test/perf-test-lib.sh
@@ -0,0 +1,67 @@
+. ./version.sh
+
+. ../test/test-lib-common.sh
+
+set -e
+
+if ! test -x ../notmuch
+then
+ echo >&2 'You do not seem to have built notmuch yet.'
+ exit 1
+fi
+
+add_email_corpus ()
+{
+ rm -rf ${MAIL_DIR}
+
+ case "$1" in
+ --small)
+ arg="mail/enron/bailey-s"
+ ;;
+ --medium)
+ arg="mail/notmuch-archive"
+ ;;
+ *)
+ arg=mail
+ esac
+
+ if command -v pixz > /dev/null; then
+ XZ=pixz
+ else
+ XZ=xz
+ fi
+
+ printf "Unpacking corpus\n"
+ tar --checkpoint=.5000 --extract --strip-components=1 \
+ --directory ${TMP_DIRECTORY} \
+ --use-compress-program ${XZ} \
+ --file ../download/notmuch-email-corpus-${PERFTEST_VERSION}.tar.xz \
+ notmuch-email-corpus/"$arg"
+
+ printf "\n"
+}
+
+print_header () {
+ printf "[v%4s] Wall(s)\tUsr(s)\tSys(s)\tRes(K)\tIn\tOut\n" \
+ ${PERFTEST_VERSION}
+}
+
+time_run () {
+ printf "%-22s" "$1"
+ if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
+ if ! eval >&3 "/usr/bin/time -f '%e\t%U\t%S\t%M\t%I\t%O' $2" ; then
+ test_failure=$(($test_failure + 1))
+ fi
+}
+
+time_done () {
+ if [ "$test_failure" = "0" ]; then
+ rm -rf "$remove_tmp"
+ exit 0
+ else
+ exit 1
+ fi
+}
+
+cd -P "$test" || error "Cannot setup test environment"
+test_failure=0