unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: david@tethera.net
To: notmuch@notmuchmail.org
Cc: David Bremner <bremner@debian.org>
Subject: [PATCH 2/2] test: initial performance testing infrastructure.
Date: Sat, 17 Nov 2012 17:37:14 -0400	[thread overview]
Message-ID: <1353188234-29666-3-git-send-email-david@tethera.net> (raw)
In-Reply-To: <1353188234-29666-1-git-send-email-david@tethera.net>

From: David Bremner <bremner@debian.org>

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
---
 Makefile                                           |    3 +-
 performance-test/.gitignore                        |    2 ++
 performance-test/Makefile                          |    7 ++++
 performance-test/Makefile.local                    |   28 +++++++++++++++
 performance-test/README                            |   26 ++++++++++++++
 performance-test/basic                             |   12 +++++++
 performance-test/download/.gitignore               |    2 ++
 .../download/mail-corpus-0.1.mbox.sha256           |    1 +
 performance-test/notmuch-perf-test                 |   25 ++++++++++++++
 performance-test/perf-test-lib.sh                  |   36 ++++++++++++++++++++
 10 files changed, 141 insertions(+), 1 deletion(-)
 create mode 100644 performance-test/.gitignore
 create mode 100644 performance-test/Makefile
 create mode 100644 performance-test/Makefile.local
 create mode 100644 performance-test/README
 create mode 100755 performance-test/basic
 create mode 100644 performance-test/download/.gitignore
 create mode 100644 performance-test/download/mail-corpus-0.1.mbox.sha256
 create mode 100755 performance-test/notmuch-perf-test
 create mode 100644 performance-test/perf-test-lib.sh

diff --git a/Makefile b/Makefile
index bb9c316..5decbea 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,8 @@
 all:
 
 # List all subdirectories here. Each contains its own Makefile.local
-subdirs = compat completion emacs lib man parse-time-string util test
+subdirs := compat completion emacs lib man parse-time-string
+subdirs := $(subdirs) performance-test util test
 
 # We make all targets depend on the Makefiles themselves.
 global_deps = Makefile Makefile.config Makefile.local \
diff --git a/performance-test/.gitignore b/performance-test/.gitignore
new file mode 100644
index 0000000..e757e8d
--- /dev/null
+++ b/performance-test/.gitignore
@@ -0,0 +1,2 @@
+corpus/*
+tmp.*/
diff --git a/performance-test/Makefile b/performance-test/Makefile
new file mode 100644
index 0000000..de492a7
--- /dev/null
+++ b/performance-test/Makefile
@@ -0,0 +1,7 @@
+# See Makefile.local for the list of files to be compiled in this
+# directory.
+all:
+	$(MAKE) -C .. all
+
+.DEFAULT:
+	$(MAKE) -C .. $@
diff --git a/performance-test/Makefile.local b/performance-test/Makefile.local
new file mode 100644
index 0000000..b38bbbd
--- /dev/null
+++ b/performance-test/Makefile.local
@@ -0,0 +1,28 @@
+# -*- makefile -*-
+
+dir := performance-test
+
+PERFTEST_VERSION := 0.1
+
+MBNAME := mail-corpus-$(PERFTEST_VERSION).mbox
+GZFILE := $(CURDIR)/$(dir)/download/$(MBNAME).gz
+MBFILE := $(CURDIR)/$(dir)/download/$(MBNAME)
+MBDIR :=  $(CURDIR)/$(dir)/corpus
+SHA256FILE := $(dir)/download/mail-corpus-$(PERFTEST_VERSION).sha256
+TEST_SCRIPT := $(dir)/notmuch-perf-test
+
+perf-test: setup-perf-test all
+	$(TEST_SCRIPT) $(OPTIONS)
+
+setup-perf-test: $(MBFILE)
+	mb2md -s $(MBFILE) -d $(MBDIR)
+
+$(GZFILE):
+	wget -O $@ http://notmuchmail.org/releases/$(MBNAME).gz
+
+$(MBFILE): $(GZFILE)
+	gunzip -c $(GZFILE) > $(MBFILE)
+	sha256sum -c $(MBFILE).sha256
+
+CLEAN := $(CLEAN) $(dir)/tmp.*
+DISTCLEAN := $(DISTCLEAN) $(GZFILE) $(MBFILE) $(dir)/corpus
diff --git a/performance-test/README b/performance-test/README
new file mode 100644
index 0000000..d22438a
--- /dev/null
+++ b/performance-test/README
@@ -0,0 +1,26 @@
+Pre-requisites
+--------------
+
+In addition to having notmuch, you need:
+
+- mb2md
+- gnu time
+- wget
+- sha256sum
+
+Getting set up to run tests:
+----------------------------
+
+% make setup-perf-test
+
+This requires a net connection to download the test corpus.
+
+Running tests
+-------------
+
+The easiest way to run performance tests is to say "make perf-test", (or
+simply run the notmuch-perf-test script). Either command will run all
+available performance tests.
+
+Alternately, you can run a specific subset of tests by simply invoking
+one of the executable scripts in this directory, (such as ./basic).
diff --git a/performance-test/basic b/performance-test/basic
new file mode 100755
index 0000000..16b7d03
--- /dev/null
+++ b/performance-test/basic
@@ -0,0 +1,12 @@
+
+. ./perf-test-lib.sh
+
+add_email_corpus
+
+time_run 'initial notmuch new' 'notmuch new'
+time_run 'second notmuch new' 'notmuch new'
+time_run 'dump *' 'notmuch dump > tags.out'
+time_run 'restore *' 'notmuch restore < tags.out'
+time_run 'tag * +new_tag' "notmuch tag +new_tag '*'"
+
+time_done
diff --git a/performance-test/download/.gitignore b/performance-test/download/.gitignore
new file mode 100644
index 0000000..b08aedd
--- /dev/null
+++ b/performance-test/download/.gitignore
@@ -0,0 +1,2 @@
+*.mbox.gz
+*.mbox
diff --git a/performance-test/download/mail-corpus-0.1.mbox.sha256 b/performance-test/download/mail-corpus-0.1.mbox.sha256
new file mode 100644
index 0000000..85354c0
--- /dev/null
+++ b/performance-test/download/mail-corpus-0.1.mbox.sha256
@@ -0,0 +1 @@
+ed1163e6e331691d60af8f599866a5d16fa0bbc38793407227fd4b2381494b4b  performance-test/download/mail-corpus-0.1.mbox
diff --git a/performance-test/notmuch-perf-test b/performance-test/notmuch-perf-test
new file mode 100755
index 0000000..1bea345
--- /dev/null
+++ b/performance-test/notmuch-perf-test
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+# Run tests
+#
+# Copyright (c) 2005 Junio C Hamano
+#
+# Adapted from a Makefile to a shell script by Carl Worth (2010)
+
+if [ ${BASH_VERSINFO[0]} -lt 4 ]; then
+    echo "Error: The notmuch test suite requires a bash version >= 4.0"
+    echo "due to use of associative arrays within the test suite."
+    echo "Please try again with a newer bash (or help us fix the"
+    echo "test suite to be more portable). Thanks."
+    exit 1
+fi
+
+cd $(dirname "$0")
+
+TESTS="
+  basic
+"
+
+for test in $TESTS; do
+    ./$test "$@"
+done
diff --git a/performance-test/perf-test-lib.sh b/performance-test/perf-test-lib.sh
new file mode 100644
index 0000000..0447852
--- /dev/null
+++ b/performance-test/perf-test-lib.sh
@@ -0,0 +1,36 @@
+
+. ../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}
+    cp -a $TEST_DIRECTORY/corpus ${MAIL_DIR}
+}
+
+time_run () {
+    printf "%-25s" "$1"
+    if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi
+    if ! eval >&3 "/usr/bin/time -f '%e %U %S' $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
-- 
1.7.10.4

  parent reply	other threads:[~2012-11-17 21:41 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-17 21:37 initial attempt at performance testing suite for notmuch david
2012-11-17 21:37 ` [PATCH 1/2] test: factor out part of test-lib.sh into test-lib-common.sh david
2012-11-17 21:37 ` david [this message]
2012-11-20  2:23 ` david
2012-11-20  2:23   ` [PATCH 2/2] test: initial performance testing infrastructure david

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1353188234-29666-3-git-send-email-david@tethera.net \
    --to=david@tethera.net \
    --cc=bremner@debian.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).