+Notmuch 0.33 (UNRELEASED)
+=========================
+
+Vim
+---
+
+Respect excluded tags when showing a thread.
+
Notmuch 0.32.1 (UNRELEASED)
===========================
- xz. Some speedup can be gotten by installing "pixz", but this is
probably only worthwhile if you are debugging the tests.
- valgrind (for the memory tests)
+- perf (optional, for more fine-grained timing)
Getting set up to run tests:
----------------------------
--small / --medium / --large Choose corpus size.
--debug Enable debugging. In particular don't delete
- temporary directories.
+ temporary directories.
+--perf Run perf record in place of /usr/bin/time. Perf output can be
+ found in a log directory.
+--call-graph {fp,lbr,dwarf} Call graph option for perf record. Default is 'lbr'.
When using the make targets, you can pass arguments to all test
scripts by defining the make variable OPTIONS.
+Log Directory
+-------------
+
+The memory tests, and the time tests when option '--perf' is given
+save their output in a directory named as follows
+
+ log.$test_name-$corpus_size-$timestamp
+
+These directories are removed by "make clean".
+
Writing tests
-------------
. $(dirname "$0")/version.sh || exit 1
+debug=""
corpus_size=large
+perf_callgraph=lbr
+use_perf=0
while test "$#" -ne 0
do
debug=t;
shift
;;
+ -p|--perf)
+ use_perf=1;
+ shift
+ ;;
+ -c|--call-graph)
+ shift
+ perf_callgraph=$1
+ shift
+ ;;
-s|--small)
corpus_size=small;
shift
fi
}
+make_log_dir () {
+ local timestamp=$(date +%Y%m%dT%H%M%S)
+ log_dir=${TEST_DIRECTORY}/log.$(basename $0)-$corpus_size-${timestamp}
+ mkdir -p "${log_dir}"
+}
+
time_start ()
{
add_email_corpus
+ if [[ "$use_perf" = 1 ]]; then
+ make_log_dir
+ fi
+
print_header
notmuch_new_with_cache time_run
{
add_email_corpus
- local timestamp=$(date +%Y%m%dT%H%M%S)
- log_dir="${TEST_DIRECTORY}/log.$(basename $0)-$corpus_size-${timestamp}"
- mkdir -p ${log_dir}
+ make_log_dir
notmuch_new_with_cache memory_run
}
printf " %-22s" "$1"
test_count=$(($test_count+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/%O' $2" ; then
+ if [[ "$use_perf" = 1 ]]; then
+ command_str="perf record --call-graph=${perf_callgraph} -o ${log_dir}/${test_count}.perf $2"
+ else
+ command_str="/usr/bin/time -f '%e\t%U\t%S\t%M\t%I/%O' $2"
+ fi
+
+ if ! eval >&3 "$command_str" ; then
test_failure=$(($test_failure + 1))
return 1
fi
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
+test_require_emacs
add_email_corpus
# syntax errors in test-lib.el cause mysterious failures
##################################################
+test_require_emacs
add_gnupg_home
test_begin_subtest "emacs delivery of signed message"
test_description='S/MIME signature verification and decryption'
. $(dirname "$0")/test-lib.sh || exit 1
+test_require_emacs
test_require_external_prereq openssl
test_require_external_prereq gpgsm
##################################################
+test_require_emacs
add_gnupg_home
# create a test encrypted message
add_email_corpus
+test_ruby() {
+ (
+ cat <<-EOF
+ require 'notmuch'
+ db = Notmuch::Database.new('$MAIL_DIR')
+ EOF
+ cat
+ ) | $NOTMUCH_RUBY -I "$NOTMUCH_BUILDDIR/bindings/ruby"> OUTPUT
+ test_expect_equal_file EXPECTED OUTPUT
+}
+
test_begin_subtest "compare thread ids"
+notmuch search --sort=oldest-first --output=threads tag:inbox > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-@q = @db.query('tag:inbox')
-@q.sort = Notmuch::SORT_OLDEST_FIRST
-for t in @q.search_threads do
- print t.thread_id, "\n"
+q = db.query('tag:inbox')
+q.sort = Notmuch::SORT_OLDEST_FIRST
+q.search_threads.each do |t|
+ puts 'thread:%s' % t.thread_id
end
EOF
-notmuch search --sort=oldest-first --output=threads tag:inbox | sed s/^thread:// > EXPECTED
-test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "compare message ids"
+notmuch search --sort=oldest-first --output=messages tag:inbox > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-@q = @db.query('tag:inbox')
-@q.sort = Notmuch::SORT_OLDEST_FIRST
-for m in @q.search_messages do
- print m.message_id, "\n"
+q = db.query('tag:inbox')
+q.sort = Notmuch::SORT_OLDEST_FIRST
+q.search_messages.each do |m|
+ puts 'id:%s' % m.message_id
end
EOF
-notmuch search --sort=oldest-first --output=messages tag:inbox | sed s/^id:// > EXPECTED
-test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "get non-existent file"
+echo nil > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-result = @db.find_message_by_filename('i-dont-exist')
-print (result == nil)
+p db.find_message_by_filename('i-dont-exist')
EOF
-test_expect_equal "$(cat OUTPUT)" "true"
test_begin_subtest "count messages"
+notmuch count --output=messages tag:inbox > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-@q = @db.query('tag:inbox')
-print @q.count_messages(),"\n"
+puts db.query('tag:inbox').count_messages()
EOF
-notmuch count --output=messages tag:inbox > EXPECTED
-test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "count threads"
+notmuch count --output=threads tag:inbox > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-@q = @db.query('tag:inbox')
-print @q.count_threads(),"\n"
+puts db.query('tag:inbox').count_threads()
EOF
-notmuch count --output=threads tag:inbox > EXPECTED
-test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "get all tags"
+notmuch search --output=tags '*' > EXPECTED
test_ruby <<"EOF"
-require 'notmuch'
-$maildir = ENV['MAIL_DIR']
-if not $maildir then
- abort('environment variable MAIL_DIR must be set')
-end
-@db = Notmuch::Database.new($maildir)
-@t = @db.all_tags()
-for tag in @t do
- print tag,"\n"
+db.all_tags.each do |tag|
+ puts tag
end
EOF
-notmuch search --output=tags '*' > EXPECTED
-test_expect_equal_file EXPECTED OUTPUT
test_done
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-show.expected-output
+test_require_emacs
add_email_corpus
test_begin_subtest "Hiding Original Message region at beginning of a message"
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-tree.expected-output
+test_require_emacs
add_email_corpus
test_begin_subtest "Basic notmuch-tree view in emacs"
test_description="emacs forwarding"
. $(dirname "$0")/test-lib.sh || exit 1
+test_require_emacs
+
test_begin_subtest "Forward setting the correct references header"
# Check that, when forwarding a message, the new message has
# a References-header pointing to the original (forwarded) message.
# for reproducibility
unset EMAIL
+unset NAME
+
+test_require_emacs () {
+ test_require_external_prereq emacs
+ test_require_external_prereq ${TEST_EMACSCLIENT}
+ test_require_external_prereq dtach
+}
add_gnupg_home ()
{
exec 1>&6 2>&7 # Restore stdout and stderr
inside_subtest=
+ # test_emacs may update missing external prerequisites
+ test_check_missing_external_prereqs_ "$test_subtest_name" && return
+
# Report success/failure.
result=$(cat OUTPUT)
if [ "$result" = t ]
pw = pwd.getpwuid(os.getuid())
user = pw.pw_name
name = pw.pw_gecos.partition(",")[0]
-fqdn = socket.getfqdn()
+fqdn = socket.getaddrinfo(socket.gethostname(), 0, 0, socket.SOCK_STREAM, 0, socket.AI_CANONNAME)[0][3]
for l in sys.stdin:
- l = l.replace(user, "USERNAME").replace(fqdn, "FQDN").replace(".(none)","").replace(name, "USER_FULL_NAME")
+ if user:
+ l = l.replace(user, "USERNAME")
+ if fqdn:
+ l = l.replace(fqdn, "FQDN").replace(".(none)","")
+ if name:
+ l = l.replace(name, "USER_FULL_NAME")
sys.stdout.write(l)
'
}
test_run_ "$1"
run_ret="$?"
# test_run_ may update missing external prerequisites
- test_check_missing_external_prereqs_ "$@" ||
+ test_check_missing_external_prereqs_ "$test_subtest_name" ||
if [ "$run_ret" = 0 -a "$eval_ret" = 0 ]
then
test_ok_
test_run_ "$2"
run_ret="$?"
# test_run_ may update missing external prerequisites,
- test_check_missing_external_prereqs_ "$@" ||
+ test_check_missing_external_prereqs_ "$test_subtest_name" ||
if [ "$run_ret" = 0 -a "$eval_ret" = "$1" ]
then
test_ok_
$NOTMUCH_PYTHON -B - > OUTPUT
}
-test_ruby() {
- MAIL_DIR=$MAIL_DIR $NOTMUCH_RUBY -I "$NOTMUCH_BUILDDIR/bindings/ruby"> OUTPUT
-}
-
test_C () {
local exec_file test_file
exec_file="test${test_count}"
$curbuf.render do |b|
q = $curbuf.query(get_cur_view)
q.sort = Notmuch::SORT_OLDEST_FIRST
+ $exclude_tags.each { |t|
+ q.add_tag_exclude(t)
+ }
msgs = q.search_messages
msgs.each do |msg|
m = Mail.read(msg.filename)