Diff below brings notmuch to 0.31. From NEWS [0]:
- notmuch now supports Emacs 27.1
- add support for moving between threads after
  notmuch-tree-from-search-thread

The test suite completes with 4 failing tests, test.log attached:

1210/1219 tests passed.
3 broken tests failed as expected.
4 tests failed.
2 tests skipped.
All tests in 1 file skipped.

I'm not sure if these failures are new. Current version in ports hangs
during 'make test' after 'Message with quote in Message-Id:'. Probably
related with Emacs 27.1. Unfortunately I don't understand these failures
and could use some help.

No issues found while using this update, in combination with neomutt, on
amd64. Python bindings have been build tested only.

[0] https://notmuchmail.org/news/release-0.31/


diff --git Makefile.inc Makefile.inc
index a1a0e2c0411..e0a6a135fce 100644
--- Makefile.inc
+++ Makefile.inc
@@ -1,6 +1,6 @@
 # $OpenBSD: Makefile.inc,v 1.2 2020/08/13 18:21:18 sthen Exp $
 
-V =                    0.30
+V =                    0.31
 DISTNAME =             notmuch-$V
 EXTRACT_SUFX =         .tar.xz
 
diff --git notmuch/distinfo notmuch/distinfo
index 6acd960833a..159d653a986 100644
--- notmuch/distinfo
+++ notmuch/distinfo
@@ -1,2 +1,2 @@
-SHA256 (notmuch-0.30.tar.xz) = Xjuqb+EdZcZ+Jq5Ii+EbMguuBOM2rMnGRiH340SQlvo=
-SIZE (notmuch-0.30.tar.xz) = 711904
+SHA256 (notmuch-0.31.tar.xz) = Vx+g4VOchmErHyssgKOY4I7P71LifvfkjPjjuE+hg5Q=
+SIZE (notmuch-0.31.tar.xz) = 713144
diff --git notmuch/patches/patch-Makefile_global 
notmuch/patches/patch-Makefile_global
index 7e12c72b2a3..dcbd72e8ea9 100644
--- notmuch/patches/patch-Makefile_global
+++ notmuch/patches/patch-Makefile_global
@@ -3,7 +3,7 @@ $OpenBSD: patch-Makefile_global,v 1.1.1.1 2020/05/15 08:58:14 
sthen Exp $
 Index: Makefile.global
 --- Makefile.global.orig
 +++ Makefile.global
-@@ -16,7 +16,7 @@ else
+@@ -17,7 +17,7 @@ else
  DATE:=$(shell date +%F)
  endif
  
diff --git notmuch/patches/patch-configure notmuch/patches/patch-configure
index c09b2e882cb..c7cd56424e9 100644
--- notmuch/patches/patch-configure
+++ notmuch/patches/patch-configure
@@ -3,7 +3,7 @@ $OpenBSD: patch-configure,v 1.4 2020/10/05 19:46:17 jca Exp $
 Index: configure
 --- configure.orig
 +++ configure
-@@ -721,9 +721,9 @@ if ! pkg-config --exists zlib; then
+@@ -702,9 +702,9 @@ if ! pkg-config --exists zlib; then
    rm -f compat/gen_zlib_pc
  fi
  
@@ -15,3 +15,12 @@ Index: configure
      printf "Yes.\n"
      have_zlib=1
      zlib_cflags=$(pkg-config --cflags zlib)
+@@ -1536,7 +1536,7 @@ EOF
+     if [ $WITH_PYTHON_DOCS = "1" ]; then
+         echo "tags.add('WITH_PYTHON')"
+     fi
+-    printf "rsti_dir = '%s'\n" $(realpath emacs)
++    printf "rsti_dir = '../emacs'"
+ } > sphinx.config
+ 
+ # Finally, after everything configured, inform the user how to continue.
diff --git notmuch/patches/patch-doc_Makefile_local 
notmuch/patches/patch-doc_Makefile_local
index 1cff4b01245..2066ec07b09 100644
--- notmuch/patches/patch-doc_Makefile_local
+++ notmuch/patches/patch-doc_Makefile_local
@@ -7,8 +7,8 @@ Index: doc/Makefile.local
  
  # You can set these variables from the command line.
  SPHINXOPTS    := -q
--SPHINXBUILD   = WITH_EMACS=${WITH_EMACS} RSTI_DIR=$(realpath emacs) 
sphinx-build
-+SPHINXBUILD   = WITH_EMACS=${WITH_EMACS} RSTI_DIR=$(realpath emacs) 
sphinx-build-3
+-SPHINXBUILD   = sphinx-build
++SPHINXBUILD   = sphinx-build-3
  DOCBUILDDIR      := $(dir)/_build
  
  # Internal variables.
diff --git notmuch/patches/patch-doc_conf_py notmuch/patches/patch-doc_conf_py
index a7eb543a19f..262f54889f9 100644
--- notmuch/patches/patch-doc_conf_py
+++ notmuch/patches/patch-doc_conf_py
@@ -3,7 +3,7 @@ $OpenBSD: patch-doc_conf_py,v 1.2 2020/08/13 18:21:19 sthen Exp 
$
 Index: doc/conf.py
 --- doc/conf.py.orig
 +++ doc/conf.py
-@@ -17,7 +17,7 @@ copyright = u'2009-2020, Carl Worth and many others'
+@@ -19,7 +19,7 @@ copyright = u'2009-2020, Carl Worth and many others'
  location = os.path.dirname(__file__)
  
  for pathdir in ['.', '..']:
diff --git notmuch/patches/patch-notmuch-new_c 
notmuch/patches/patch-notmuch-new_c
index 05b307edc36..3a9ee9de9e0 100644
--- notmuch/patches/patch-notmuch-new_c
+++ notmuch/patches/patch-notmuch-new_c
@@ -6,7 +6,7 @@ when upgrading database, back up the old db without compression 
since
 Index: notmuch-new.c
 --- notmuch-new.c.orig
 +++ notmuch-new.c
-@@ -1148,7 +1148,7 @@ notmuch_new_command (notmuch_config_t *config, int arg
+@@ -1151,7 +1151,7 @@ notmuch_new_command (notmuch_config_t *config, int arg
             * relatively small. */
  
            const char *backup_name =
@@ -15,7 +15,7 @@ Index: notmuch-new.c
                                 dot_notmuch_path,
                                 gm_time->tm_year + 1900,
                                 gm_time->tm_mon + 1,
-@@ -1160,11 +1160,11 @@ notmuch_new_command (notmuch_config_t *config, int arg
+@@ -1163,11 +1163,11 @@ notmuch_new_command (notmuch_config_t *config, int arg
            if (add_files_state.verbosity >= VERBOSITY_NORMAL) {
                printf ("Welcome to a new version of notmuch! Your database 
will now be upgraded.\n");
                printf ("This process is safe to interrupt.\n");
diff --git notmuch/patches/patch-test_T355-smime_sh 
notmuch/patches/patch-test_T355-smime_sh
deleted file mode 100644
index 314bc8d210b..00000000000
--- notmuch/patches/patch-test_T355-smime_sh
+++ /dev/null
@@ -1,17 +0,0 @@
-$OpenBSD: patch-test_T355-smime_sh,v 1.2 2020/08/13 18:21:19 sthen Exp $
-
-OpenSSL has sha1 as default fingerprint algo
-LibreSSL has md5 as default fingerprint algo
-
-Index: test/T355-smime.sh
---- test/T355-smime.sh.orig
-+++ test/T355-smime.sh
-@@ -6,7 +6,7 @@ test_description='S/MIME signature verification and de
- test_require_external_prereq openssl
- test_require_external_prereq gpgsm
- 
--FINGERPRINT=$(openssl x509 -fingerprint -in 
"$NOTMUCH_SRCDIR/test/smime/key+cert.pem" -noout | sed -e 's/^.*=//' -e s/://g)
-+FINGERPRINT=$(openssl x509 -fingerprint -sha1 -in 
"$NOTMUCH_SRCDIR/test/smime/key+cert.pem" -noout | sed -e 's/^.*=//' -e s/://g)
- 
- add_gpgsm_home
- 
diff --git notmuch/patches/patch-test_T530-upgrade_sh 
notmuch/patches/patch-test_T530-upgrade_sh
deleted file mode 100644
index ffc735de4be..00000000000
--- notmuch/patches/patch-test_T530-upgrade_sh
+++ /dev/null
@@ -1,18 +0,0 @@
-$OpenBSD: patch-test_T530-upgrade_sh,v 1.1.1.1 2020/05/15 08:58:14 sthen Exp $
-
-modify test because we don't have notmuch dump --gzip
-
-Index: test/T530-upgrade.sh
---- test/T530-upgrade.sh.orig
-+++ test/T530-upgrade.sh
-@@ -38,8 +38,8 @@ Your notmuch database has now been upgraded.
- No new mail."
- 
- test_begin_subtest "tag backup matches pre-upgrade dump"
--gunzip -c ${MAIL_DIR}/.notmuch/dump-*.gz | sort > backup-dump
--test_expect_equal_file pre-upgrade-dump backup-dump
-+<${MAIL_DIR}/.notmuch/dump-* sort > backup-dump
-+test_expect_equal_file pre-upgrade-dump backup-dump 
- 
- test_begin_subtest "folder: no longer matches in the middle of path"
- output=$(notmuch search folder:baz)
diff --git py-notmuch/distinfo py-notmuch/distinfo
index 6acd960833a..159d653a986 100644
--- py-notmuch/distinfo
+++ py-notmuch/distinfo
@@ -1,2 +1,2 @@
-SHA256 (notmuch-0.30.tar.xz) = Xjuqb+EdZcZ+Jq5Ii+EbMguuBOM2rMnGRiH340SQlvo=
-SIZE (notmuch-0.30.tar.xz) = 711904
+SHA256 (notmuch-0.31.tar.xz) = Vx+g4VOchmErHyssgKOY4I7P71LifvfkjPjjuE+hg5Q=
+SIZE (notmuch-0.31.tar.xz) = 713144
gmake -C doc/_build/texinfo info
cd bindings/python-cffi && \
        /usr/local/bin/python3.8 setup.py build --build-lib build/stage && \
        mkdir -p build/stage/tests && cp tests/*.py build/stage/tests
gmake[1]: Entering directory 
'/tmp/ports/pobj/notmuch-0.31/notmuch-0.31/doc/_build/texinfo'
gmake[1]: Nothing to be done for 'info'.
gmake[1]: Leaving directory 
'/tmp/ports/pobj/notmuch-0.31/notmuch-0.31/doc/_build/texinfo'
running build
running build_py
running build_ext
generating cffi module 'build/temp.openbsd-6.8-amd64-3.8/notmuch2._capi.c'
already up-to-date

T000-basic: Testing the test framework itself.
 PASS   success is reported like this
 PASS   test runs if prerequisite is satisfied
 PASS   tests clean up after themselves
 PASS   tests clean up even after a failure
 PASS   failure to clean up causes the test to fail
 PASS   Ensure that test output is suppressed unless the test fails
 PASS   Ensure that -v does not suppress test output
 PASS   test that mail store was created
 PASS   mail store should be empty
 PASS   NOTMUCH_CONFIG is set and points to an existing file
 PASS   PATH is set to build directory
 PASS   notmuch is compiled with debugging symbols

T010-help-test: Testing online help
 PASS   notmuch --help
 PASS   notmuch help
 PASS   notmuch --version
 PASS   notmuch --help tag
 PASS   notmuch help tag

T020-compact: Testing "notmuch compact"
 PASS   Running compact
 PASS   Compact preserves database
 PASS   Restoring Backup
 PASS   Checking restored backup

T030-config: Testing "notmuch config"
 PASS   Get string value
 PASS   Get list value
 PASS   Set string value
 PASS   Set string value again
 PASS   Set list value
 PASS   Set list value again
 PASS   Remove key
 PASS   Remove non-existent key
 PASS   List all items
 PASS   Top level --config=FILE option
 PASS   Top level --config:FILE option
 PASS   Top level --config<space>FILE option
 PASS   Top level --config=FILE option changed the right file
 PASS   Read config file through a symlink
 PASS   Write config file through a symlink
 PASS   Writing config file through symlink follows symlink
 PASS   Absolute database path returned
 PASS   Relative database path properly expanded

T040-setup: Testing "notmuch setup"
 PASS   Notmuch new without a config suggests notmuch setup
 PASS   Create a new config interactively

T050-new: Testing "notmuch new" in several variations
 PASS   No new messages
 PASS   Single new message
 PASS   Single message (full-scan)
 PASS   Multiple new messages
 PASS   Multiple new messages (full-scan)
 PASS   No new messages (non-empty DB)
 PASS   No new messages (full-scan)
 PASS   New directories
 PASS   Alternate inode order
 PASS   Message moved in
 PASS   Renamed message
 PASS   Deleted message
 PASS   Renamed directory
 PASS   Deleted directory
 PASS   New directory (at end of list)
 PASS   Deleted directory (end of list)
 PASS   New symlink to directory
 PASS   New symlink to a file
 PASS   Broken symlink aborts
 PASS   New two-level directory
 PASS   Deleted two-level directory
 PASS   One character directory at top level
 PASS   Support single-message mbox
 PASS   Skip and report non-mail files
 PASS   Ignore files and directories specified in new.ignore
 PASS   Ignore files and directories specified in new.ignore (full-scan)
 PASS   Ignore files and directories specified in new.ignore (multiple 
occurrences)
 PASS   Don't stop for ignored broken symlinks
 PASS   Ignore files and directories specified in new.ignore (regexp)
 PASS   Quiet: No new mail.
 PASS   Quiet: new, removed and renamed messages.
 PASS   Empty tags in new.tags are forbidden
 PASS   Tags starting with '-' in new.tags are forbidden
 PASS   Invalid tags set exit code
 PASS   Xapian exception: read only files
 PASS   Handle files vanishing between scandir and add_file
 PASS   reference loop does not crash
 PASS   reference loop ordered by date

T060-count: Testing "notmuch count" for messages and threads
 PASS   message count is the default for notmuch count
 PASS   message count with --output=messages
 PASS   thread count with --output=threads
 PASS   thread count is the default for notmuch search
 PASS   files count
 PASS   files count for a duplicate message-id
 PASS   count with no matching messages
 PASS   count with no matching threads
 PASS   message count is the default for batch count
 PASS   batch message count
 PASS   batch thread count
 PASS   batch message count with input file
 PASS   error message for database open
 PASS   error message from query_search_messages
 PASS   count library function is non-destructive

T070-insert: Testing "notmuch insert"
 PASS   Insert zero-length file
 PASS   Insert non-message
 PASS   Database empty so far
 PASS   Insert message
 PASS   Permissions on inserted message should be 0600
 PASS   Insert message adds default tags
 PASS   Insert duplicate message
 PASS   Duplicate message does not change tags
 PASS   Insert message, add tag
 PASS   Insert tagged world-readable message
 PASS   Permissions on inserted world-readable message should be 0644
 PASS   Insert tagged world-readable message with group-only umask
 PASS   Permissions on inserted world-readable message with funny umask should 
be 0640
 PASS   Insert message, add/remove tags
 PASS   Insert message with default tags stays in new/
 PASS   Insert message with non-maildir synced tags stays in new/
 PASS   Insert message with custom new.tags goes to cur/
 PASS   Insert message with custom new.tags actually gets the tags
 PASS   Insert message with maildir synced tags goes to cur/
 PASS   Insert message with maildir sync off goes to new/
 PASS   Insert message into folder
 PASS   Insert message into top level folder
 PASS   Insert message into folder with trailing /
 PASS   Insert message into folder, add/remove tags
 PASS   Insert message into non-existent folder
 PASS   Insert message, create folder
 PASS   Insert message, create subfolder
 PASS   Created subfolder should have permissions 0700
 PASS   Created subfolder new/ should also have permissions 0700
 PASS   Insert message, create world-readable subfolder
 PASS   Created world-readable subfolder should have permissions 0755
 PASS   Created world-readable subfolder new/ should also have permissions 0755
 PASS   Insert message, create existing subfolder
 PASS   Insert message, create invalid subfolder
 PASS   Empty tags in new.tags are forbidden
 PASS   Tags starting with '-' in new.tags are forbidden
 PASS   Invalid tags set exit code
 PASS   EXIT_FAILURE when index_file returns FILE_NOT_EMAIL
 PASS   success exit with --keep when index_file returns FILE_NOT_EMAIL
 PASS   EXIT_FAILURE when index_file returns READ_ONLY_DATABASE
 PASS   success exit with --keep when index_file returns READ_ONLY_DATABASE
 PASS   EXIT_FAILURE when index_file returns UPGRADE_REQUIRED
 PASS   success exit with --keep when index_file returns UPGRADE_REQUIRED
 PASS   EXIT_FAILURE when index_file returns PATH_ERROR
 PASS   success exit with --keep when index_file returns PATH_ERROR
 PASS   EX_TEMPFAIL when index_file returns OUT_OF_MEMORY
 PASS   success exit with --keep when index_file returns OUT_OF_MEMORY
 PASS   EX_TEMPFAIL when index_file returns XAPIAN_EXCEPTION
 PASS   success exit with --keep when index_file returns XAPIAN_EXCEPTION

T080-search: Testing "notmuch search" in several variations
 PASS   Search body
 PASS   Search by from:
 PASS   Search by to:
 PASS   Search by subject:
 PASS   Search by subject (utf-8):
 PASS   Search by id:
 PASS   Search by mid:
 PASS   Search by tag:
 PASS   Search by thread:
 PASS   Search body (phrase)
 PASS   Search by from: (address)
 PASS   Search by from: (name)
 PASS   Search by from: (name and address)
 PASS   Search by from: without prefix (name and address)
 PASS   Search by to: (address)
 PASS   Search by to: (name)
 PASS   Search by to: (name and address)
 PASS   Search by to: without prefix (name and address)
 PASS   Search by subject: (phrase)
 PASS   Search for all messages ("*")
 PASS   Search body (utf-8):
 PASS   headers do not have adjacent term positions
 PASS   parts have non-overlapping term positions
 PASS   parts do not have adjacent term positions

T090-search-output: Testing various settings for "notmuch search --output="
 PASS   --output=threads
 PASS   --output=threads --format=json
 PASS   --output=messages
 PASS   --output=messages --duplicate=1
 PASS   --output=messages --duplicate=2
 PASS   --output=messages --duplicate=3
 PASS   --output=messages --format=json
 PASS   --output=messages --format=json --duplicate=1
 PASS   --output=messages --format=json --duplicate=2
 PASS   --output=messages --format=json --duplicate=3
 PASS   --output=files
 PASS   --output=files --duplicate=1
 PASS   --output=files --format=json
 PASS   --output=files --format=json --duplicate=2
 PASS   --output=tags
 PASS   --output=tags --format=json
 PASS   sanitize output for quoted-printable line-breaks in author and subject
 PASS   search for non-existent message prints nothing
 PASS   search --format=json for non-existent message prints proper empty json

T095-address: Testing "notmuch address" in several variants
 PASS   --output=sender
 PASS   without --output
 PASS   --output=sender --format=json
 PASS   --output=recipients
 PASS   --output=sender --output=recipients
 PASS   --output=sender --output=count
 PASS   --output=recipients --output=address
 PASS   --output=sender --output=address --output=count
 PASS   --output=count --format=json
 PASS   --deduplicate=no --sort=oldest-first --output=sender
 PASS   --deduplicate=no --sort=newest-first --output=sender --output=recipients
 PASS   --deduplicate=address --output=sender --output=recipients
 PASS   --deduplicate=no --output=sender
 PASS   --deduplicate=mailbox --output=sender --output=count
 PASS   --deduplicate=address --output=sender --output=count

T100-search-by-folder: Testing "notmuch search" by folder: and path: (with 
variations)
 PASS   Single-world folder: specification (multiple results)
 PASS   Top level folder
 PASS   Two-word path to narrow results to one
 PASS   Folder search with --output=files
 PASS   After removing duplicate instance of matching path
 PASS   Folder search with --output=files part #2
 PASS   After removing duplicate instance of matching path part #2
 PASS   After rename, old path returns nothing
 PASS   After rename, new path returns result
 PASS   folder: search
 PASS   top level folder: search
 PASS   path: search
 PASS   top level path: search
 PASS   recursive path: search

T110-search-position-overlap-bug: Testing that notmuch does not overlap term 
positions
 PASS   Search for a@b.c matches
 PASS   Search for x@y.z matches
 PASS   Search for a@y.c must not match

T120-search-insufficient-from-quoting: Testing messages with unquoted . in name
 PASS   Search by first name
 PASS   Search by last name:
 PASS   Search by address:
 PASS   Search for all messages:

T130-search-limiting: Testing "notmuch search" --offset and --limit parameters
 PASS   messages: limit does the right thing
 PASS   messages: concatenation of limited searches
 PASS   messages: limit larger than result set
 PASS   messages: limit = 0
 PASS   messages: offset does the right thing
 PASS   messages: offset = 0
 PASS   messages: negative offset
 PASS   messages: negative offset
 PASS   messages: negative offset combined with limit
 PASS   messages: negative offset combined with equal limit
 PASS   messages: negative offset combined with large limit
 PASS   messages: negative offset larger then results
 PASS   threads: limit does the right thing
 PASS   threads: concatenation of limited searches
 PASS   threads: limit larger than result set
 PASS   threads: limit = 0
 PASS   threads: offset does the right thing
 PASS   threads: offset = 0
 PASS   threads: negative offset
 PASS   threads: negative offset
 PASS   threads: negative offset combined with limit
 PASS   threads: negative offset combined with equal limit
 PASS   threads: negative offset combined with large limit
 PASS   threads: negative offset larger then results

T140-excludes: Testing "notmuch search, count and show" with excludes in 
several variations
 PASS   Search, exclude "deleted" messages from search
 PASS   Search, exclude "deleted" messages from message search
 PASS   Search, exclude "deleted" messages from message search --exclude=false
 PASS   Search, exclude "deleted" messages from message search (non-existent 
exclude-tag)
 PASS   Search, exclude "deleted" messages from search, overridden
 PASS   Search, exclude "deleted" messages from threads
 PASS   Search, don't exclude "deleted" messages when --exclude=flag specified
 PASS   Search, don't exclude "deleted" messages from search if not configured
 PASS   Search, default exclusion (thread summary)
 PASS   Search, default exclusion (messages)
 PASS   Search, exclude=true (thread summary)
 PASS   Search, exclude=true (messages)
 PASS   Search, exclude=false (thread summary)
 PASS   Search, exclude=false (messages)
 PASS   Search, exclude=flag (thread summary)
 PASS   Search, exclude=flag (messages)
 PASS   Search, exclude=all (thread summary)
 PASS   Search, exclude=all (messages)
 PASS   Search, default exclusion: tag in query (thread summary)
 PASS   Search, default exclusion: tag in query (messages)
 PASS   Search, exclude=true: tag in query (thread summary)
 PASS   Search, exclude=true: tag in query (messages)
 PASS   Search, exclude=false: tag in query (thread summary)
 PASS   Search, exclude=false: tag in query (messages)
 PASS   Search, exclude=flag: tag in query (thread summary)
 PASS   Search, exclude=flag: tag in query (messages)
 PASS   Search, exclude=all: tag in query (thread summary)
 PASS   Search, exclude=all: tag in query (messages)
 PASS   Count, default exclusion (messages)
 PASS   Count, default exclusion (threads)
 PASS   Count, exclude=true (messages)
 PASS   Count, exclude=true (threads)
 PASS   Count, exclude=false (messages)
 PASS   Count, exclude=false (threads)
 PASS   Count, default exclusion: tag in query (messages)
 PASS   Count, default exclusion: tag in query (threads)
 PASS   Count, exclude=true: tag in query (messages)
 PASS   Count, exclude=true: tag in query (threads)
 PASS   Count, exclude=false: tag in query (messages)
 PASS   Count, exclude=false: tag in query (threads)
 PASS   Show, default exclusion
 PASS   Show, default exclusion (entire-thread)
 PASS   Show, exclude=true
 PASS   Show, exclude=true (entire-thread)
 PASS   Show, exclude=false
 PASS   Show, exclude=false (entire-thread)

T150-tagging: Testing "notmuch tag"
 PASS   Adding tags
 PASS   Removing tags
 PASS   No tag operations
 PASS   No query
 PASS   Redundant tagging
 PASS   Remove all
 PASS   Remove all with batch
 PASS   Remove all with a no-op
 PASS   Special characters in tags
 PASS   Tagging order
 PASS   --batch
 PASS   --input
 PASS   --batch --input
 PASS   --batch --input --remove-all
 PASS   --batch, dependence on previous line
 PASS   --batch, blank lines and comments
 PASS   --batch: checking error messages
 PASS   --batch: tags with quotes
 PASS   --batch: tags with punctuation and space
 PASS   --batch: unicode tags
 PASS   --batch: only space and % needs to be encoded.
 PASS   --batch: unicode message-ids
 PASS   Empty tag names
 PASS   Tag name beginning with -
 PASS   Xapian exception: read only files

T160-json: Testing --format=json output
 PASS   Show message: json
 PASS   Show message: json --body=true
 PASS   Show message: json --body=false
 PASS   Search message: json
 PASS   Show message: json, utf-8
 PASS   Show message: json, inline attachment filename
 PASS   Search message: json, utf-8
 PASS   Search message: json, 64-bit timestamp
 PASS   Format version: too low
 PASS   Format version: too high
 PASS   Show message: multiple filenames
 PASS   Show message: multiple filenames, format version 2

T170-sexp: Testing --format=sexp output
 PASS   Show message: sexp
 PASS   Show message: sexp --body=true
 PASS   Show message: sexp --body=false
 PASS   Search message: sexp
 PASS   Show message: sexp, utf-8
 PASS   Search message: sexp, utf-8
 PASS   Show message: sexp, inline attachment filename

T180-text: Testing --format=text output
 PASS   Show message: text
 PASS   Search message: text
 PASS   Show message: text, utf-8
 PASS   Search message: text, utf-8
 PASS   Search message tags: text0
 PASS   Compare text vs. text0 for threads
 PASS   Compare text vs. text0 for messages
 PASS   Compare text vs. text0 for files
 PASS   Compare text vs. text0 for tags

T190-multipart: Testing output of multipart message
 PASS   --format=text --part=0, full message
 PASS   --format=text --part=0 --body=false, message header
 PASS   --format=text --part=1, message body
 PASS   --format=text --part=2, multipart/mixed
 PASS   --format=text --part=3, rfc822 part
 PASS   --format=text --part=4, rfc822's multipart
 PASS   --format=text --part=5, rfc822's html part
 PASS   --format=text --include-html --part=5, rfc822's html part
 PASS   --format=text --part=6, rfc822's text part
 PASS   --format=text --part=7, inline attachment
 PASS   --format=text --part=8, plain text part
 PASS   --format=text --part=9, pgp signature (unverified)
 PASS   --format=text --part=8, no part, expect error
 PASS   --format=json --part=0, full message
 PASS   --format=json --part=1, message body
 PASS   --format=json --part=2, multipart/mixed
 PASS   --format=json --part=3, rfc822 part
 PASS   --format=json --part=4, rfc822's multipart/alternative
 PASS   --format=json --part=5, rfc822's html part
 PASS   --format=json --part=6, rfc822's text part
 PASS   --format=json --part=7, inline attachment
 PASS   --format=json --part=8, plain text part
 PASS   --format=json --part=9, pgp signature (unverified)
 PASS   --format=json --part=10, no part, expect error
 PASS   --format=raw
 PASS   --format=raw --part=0, full message
 PASS   --format=raw --part=1, message body
 PASS   --format=raw --part=2, multipart/mixed
 PASS   --format=raw --part=3, rfc822 part
 PASS   --format=raw --part=4, rfc822's multipart
 PASS   --format=raw --part=5, rfc822's html part
 PASS   --format=raw --part=6, rfc822's text part
 PASS   --format=raw --part=7, inline attachment
 PASS   --format=raw --part=8, plain text part
 PASS   --format=raw --part=9, pgp signature (unverified)
 PASS   --format=raw --part=10, no part, expect error
 PASS   --format=mbox
 PASS   --format=mbox --part=1, incompatible, expect error
 PASS   'notmuch reply' to a multipart message
 PASS   'notmuch reply' to a multipart message with json format
 PASS   'notmuch show --part' does not corrupt a part with CRLF pair
 PASS   html parts excluded by default
 PASS   html parts included
 PASS   indexes mime-type #1
 PASS   indexes mime-type #2
 PASS   indexes mime-type #3
 PASS   case of Content-Disposition doesn't matter for indexing

T200-thread-naming: Testing naming of threads with changing subject
 PASS   Initial thread name (oldest-first search)
 PASS   Initial thread name (newest-first search)
 PASS   Changed thread name (oldest-first search)
 PASS   Changed thread name (newest-first search)
 PASS   Ignore added reply prefix (Re:)
 PASS   Ignore added reply prefix (Aw:)
 PASS   Ignore added reply prefix (Vs:)
 PASS   Ignore added reply prefix (Sv:)
 PASS   Use empty subjects if necessary.
 PASS   Avoid empty subjects if possible (newest-first).
 PASS   Avoid empty subjects if possible (oldest-first).
 PASS   Test order of messages in "notmuch show"

T205-author-naming: Testing naming of authors with unusual addresses
 PASS   Add author with empty quoted real name

T210-raw: Testing notmuch show --format=raw
 PASS   Attempt to show multiple raw messages
 PASS   Show a raw message
 PASS   Show another raw message
 PASS   content, message of size 0001024
 PASS   return value, message of size 0001024
 PASS   content, message of size 0002048
 PASS   return value, message of size 0002048
 PASS   content, message of size 0004096
 PASS   return value, message of size 0004096
 PASS   content, message of size 0008192
 PASS   return value, message of size 0008192
 PASS   content, message of size 0016384
 PASS   return value, message of size 0016384
 PASS   content, message of size 0032768
 PASS   return value, message of size 0032768
 PASS   content, message of size 0065536
 PASS   return value, message of size 0065536
 PASS   content, message of size 0131072
 PASS   return value, message of size 0131072
 PASS   content, message of size 0262144
 PASS   return value, message of size 0262144
 PASS   content, message of size 0524288
 PASS   return value, message of size 0524288
 PASS   content, message of size 1048576
 PASS   return value, message of size 1048576

T220-reply: Testing "notmuch reply" in several variations
 PASS   Basic reply
 PASS   Multiple recipients
 PASS   Reply with CC
 PASS   Reply from alternate address
 PASS   Reply from address in named group list
 PASS   Support for Reply-To
 PASS   Un-munging Reply-To
 PASS   Un-munging Reply-To With Exact Match
 PASS   Un-munging Reply-To With Raw addr-spec
 PASS   Message with header of exactly 200 bytes
 PASS   From guessing: Envelope-To
 PASS   From guessing: X-Original-To
 PASS   From guessing: Delivered-To
 PASS   Reply with RFC 2047-encoded headers
 PASS   Reply with RFC 2047-encoded headers (JSON)
 PASS   Reply to a message with multiple Cc headers

T230-reply-to-sender: Testing "notmuch reply --reply-to=sender" in several 
variations
 PASS   Basic reply-to-sender
 PASS   From Us, Basic reply to message
 PASS   Multiple recipients
 PASS   From Us, Multiple TO recipients
 PASS   Reply with CC
 PASS   From Us, Reply with CC
 PASS   From Us, Reply no TO but with CC
 PASS   Reply from alternate address
 PASS   Support for Reply-To
 PASS   Support for Reply-To with multiple recipients
 PASS   Un-munging Reply-To
 PASS   Message with header of exactly 200 bytes

T240-dump-restore: Testing "notmuch dump" and "notmuch restore"
 PASS   dump header
 PASS   Dumping all tags
 PASS   Dumping all tags II
 PASS   Clearing all tags
 PASS   Clearing all tags
 PASS   Restoring original tags
 PASS   Restore with nothing to do
 PASS   Accumulate with existing tags
 PASS   Accumulate with no tags
 PASS   Accumulate with new tags
 PASS   Invalid restore invocation
 PASS   dump --output=outfile
 PASS   dump --output=outfile --
 SKIP   dump --gzip
 SKIP   dump --gzip --output=outfile
 PASS   restoring gzipped stdin
 PASS   restoring gzipped file
 PASS   dump -- from:cworth
 PASS   dump --output=outfile from:cworth
 PASS   dump --output=outfile -- from:cworth
 PASS   Check for a safe set of message-ids
 PASS   format=batch-tag, dump sanity check.
 PASS   format=batch-tag, missing newline
 PASS   format=batch-tag, # round-trip
 PASS   format=batch-tag, # blank lines and comments
 PASS   format=batch-tag, # reverse-round-trip empty tag
 PASS   restoring empty file is not an error
 PASS   file of comments and blank lines is not an error
 PASS   detect format=batch-tag with leading comments and blanks
 PASS   detect format=sup with leading comments and blanks
 PASS   format=batch-tag, round trip with strange tags
 PASS   format=batch-tag, checking encoded output
 PASS   restoring sane tags
 PASS   format=batch-tag, restore=auto
 PASS   format=sup, restore=auto
 PASS   format=batch-tag, restore=default
 PASS   format=sup, restore=default
 PASS   restore: checking error messages
 PASS   roundtripping random message-ids and tags

T250-uuencode: Testing handling of uuencoded data
 PASS   Ensure content before uu data is indexed
 PASS   Ensure uu data is not indexed
 PASS   Ensure content after uu data is indexed

T260-thread-order: Testing threading when messages received out of order
 PASS   Messages with one parent get linked in all delivery orders
 PASS   Messages with all parents get linked in all delivery orders

T270-author-order: Testing author reordering;
 PASS   Adding parent message
 PASS   Adding initial child message
 PASS   Adding second child message
 PASS   Searching when all three messages match
 PASS   Searching when two messages match
 PASS   Searching when only one message matches
 PASS   Searching when only first message matches
 PASS   Adding duplicate author
 PASS   Searching when all four messages match
 PASS   Adding non-monotonic child message
 PASS   Searching non-monotonic messages (oldest-first)
 PASS   Searching non-monotonic messages (newest-first)

T280-from-guessing: Testing From line heuristics (with multiple configured 
addresses)
 PASS   Magic from guessing (nothing to go on)
 PASS   Magic from guessing (Envelope-to:)
 PASS   Magic from guessing (X-Original-To:)
 PASS   Magic from guessing (Received: .. for ..)
 PASS   Magic from guessing (Received: domain)
 PASS   Magic from guessing (multiple Received: headers)
 PASS   Testing From line heuristics (with single configured address)
 PASS   Magic from guessing (nothing to go on)
 PASS   Magic from guessing (Envelope-to:)
 PASS   Magic from guessing (X-Original-To:)
 PASS   Magic from guessing (Received: .. for ..)
 PASS   Magic from guessing (Received: domain)

T290-long-id: Testing messages with ridiculously-long message IDs
 PASS   Referencing long ID before adding
 PASS   Adding message with long ID
 PASS   Referencing long ID after adding
 PASS   Ensure all messages were threaded together

T300-encoding: Testing encoding issues
 PASS   Message with text of unknown charset
 PASS   Search for ISO-8859-2 encoded message
 PASS   RFC 2047 encoded word with spaces
 PASS   RFC 2047 encoded words back to back
 PASS   RFC 2047 encoded words without space before or after
 PASS   Mislabeled Windows-1252 encoding

T310-emacs: Testing emacs interface
 PASS   Syntax of emacs test library
 PASS   Basic notmuch-hello view in emacs
 PASS   Saved search with 0 results
 PASS   No saved searches displayed (all with 0 results)
 PASS   Basic notmuch-search view in emacs
 PASS   Incremental parsing of search results
 PASS   Navigation of notmuch-hello to search results
 PASS   Basic notmuch-show view in emacs
 PASS   Basic notmuch-show view in emacs default indentation
 PASS   Basic notmuch-show view in emacs without indentation
 PASS   Basic notmuch-show view in emacs with fourfold indentation
 PASS   notmuch-show for message with invalid From
 PASS   Navigation of notmuch-search to thread view
 PASS   Add tag from search view
 PASS   Remove tag from search view
 PASS   Add tag (large query)
 PASS   notmuch-show: add single tag to single message
 PASS   notmuch-show: remove single tag from single message
 PASS   notmuch-show: add multiple tags to single message
 PASS   notmuch-show: remove multiple tags from single message
 PASS   Message with .. in Message-Id:
 PASS   Message with quote in Message-Id:
 PASS   Sending a message via (fake) SMTP
 PASS   Folding a long header when sending via (fake) SMTP
 PASS   Verify that sent messages are saved/searchable (via FCC)
 PASS   notmuch-fcc-dirs set to nil
 PASS   notmuch-fcc-dirs set to a string
 PASS   notmuch-fcc-dirs set to a list (with match)
 PASS   notmuch-fcc-dirs set to a list (catch-all)
 PASS   notmuch-fcc-dirs set to a list (no match)
 PASS   Reply within emacs
 PASS   Reply within emacs to a message with TAB in subject
 PASS   Reply from alternate address within emacs
 PASS   Reply from address in named group list within emacs
 PASS   Reply within emacs to a multipart/mixed message
 PASS   Reply within emacs to a multipart/alternative message
 PASS   Reply within emacs to an html-only message
 PASS   Reply within emacs to message from self
 PASS   Quote MML tags in reply
 PASS   Save attachment from within emacs using notmuch-show-save-attachments
 PASS   Save attachment from within emacs using notmuch-show-save-part
 PASS   Save 8bit attachment from within emacs using 
notmuch-show-save-attachments
 PASS   View raw message within emacs
 PASS   Hiding/showing signature in notmuch-show view
 PASS   Detection and hiding of top-post quoting of message
 PASS   Hiding message in notmuch-show view
 PASS   Hiding message with visible citation in notmuch-show view
 PASS   notmuch-show: show message headers
 PASS   notmuch-show: hide message headers
 PASS   notmuch-show: hide message headers (w/ 
notmuch-show-toggle-visibility-headers)
 PASS   notmuch-show: collapse all messages in thread
 PASS   notmuch-show: uncollapse all messages in thread
 PASS   Stashing in notmuch-show
 PASS   Stashing in notmuch-search
 PASS   notmuch-show-advance-and-archive with invisible signature
 PASS   Refresh show buffer
 PASS   Refresh modified show buffer
 PASS   Do not call notmuch for non-inlinable application/mpeg parts
 PASS   Do not call notmuch for non-inlinable audio/mpeg parts
 PASS   notmuch-hello-mode hook is called
 PASS   notmuch-hello-mode hook is not called on updates
 PASS   notmuch-hello-refresh hook is called
 PASS   notmuch-hello-refresh hook is called on updates
 PASS   Rendering HTML mail with images
 PASS   Search handles subprocess error exit codes
 PASS   Search handles subprocess warnings
 PASS   Search thread tag operations are race-free
 PASS   Search global tag operations are race-free
 PASS   Term escaping
 PASS   Sending a message calls the send message hooks

T320-emacs-large-search-buffer: Testing Emacs with large search results buffer
 PASS   Ensure that emacs doesn't drop results

T330-emacs-subject-to-filename: Testing emacs: mail subject to filename
 PASS   no patch sequence number
 PASS   patch sequence number #1
 PASS   patch sequence number #2
 PASS   patch sequence number #3
 PASS   patch sequence number #4
 PASS   patch sequence number #5
 PASS   patch sequence number #6
 PASS   patch sequence number #7
 PASS   filename #1
 PASS   filename #2
 PASS   filename #3
 PASS   filename #4
 PASS   filename #5
 PASS   filename #6
 PASS   filename #7
 PASS   filename #8
 PASS   filename #9
 PASS   patch filename #1
 PASS   patch filename #2
 PASS   patch filename #3
 PASS   patch filename #4

T340-maildir-sync: Testing maildir synchronization
 PASS   Adding 'S' flag to existing filename removes 'unread' tag
 PASS   Adding message with 'S' flag prevents 'unread' tag
 PASS   Adding message with 'S' w/o 'unread' in new.tags prevents 'unread' tag
 PASS   Adding 'replied' tag adds 'R' flag to filename
 PASS   notmuch show works with renamed file (without notmuch new)
 PASS   notmuch reply works with renamed file (without notmuch new)
 PASS   notmuch new detects no file rename after tag->flag synchronization
 PASS   When read, message moved from new to cur
 PASS   No rename should be detected by notmuch new
 PASS   Adding non-maildir tags does not move message from new to cur
 PASS   Message in cur lacking maildir info gets one on any tag change
 PASS   Message in new with maildir info is moved to cur on any tag change
 PASS   Removing 'S' flag from existing filename adds 'unread' tag
 PASS   Removing info from filename leaves tags unchanged
 PASS   Can remove unread tag from message in non-maildir directory
 PASS   Message in non-maildir directory does not get renamed
 PASS   notmuch dump/restore re-synchronizes maildir tags with flags
 PASS   Adding flags to duplicate message tags the mail
 PASS   Adding duplicate message without flags does not remove tags
 PASS   Tag changes modify flags of multiple files
 PASS   Synchronizing tag changes preserves unsupported maildir flags
 PASS   A file with non-compliant maildir info will not be renamed
 PASS   Files in new/ get default synchronized tags
 PASS   draft is valid in new.tags
 PASS   flagged is valid in new.tags
 PASS   passed is valid in new.tags
 PASS   replied is valid in new.tags

T350-crypto: Testing PGP/MIME signature verification and decryption
 PASS   emacs delivery of signed message
 PASS   signed part content-type indexing
 PASS   signature verification
 PASS   detection of modified signed contents
 PASS   corrupted pgp/mime signature
 PASS   signature verification without full user ID validity
 PASS   signature verification with signer key unavailable
 PASS   emacs delivery of encrypted message with attachment
 PASS   encrypted part content-type indexing
 PASS   decryption, --format=text
 PASS   decryption, --format=json
 PASS   decryption, --format=json, --part=4
 PASS   decrypt attachment (--part=5 --format=raw)
 PASS   decryption failure with missing key
 PASS   emacs delivery of encrypted + signed message
 PASS   decryption + signature verification
 PASS   reply to encrypted message
 PASS   Reply within emacs to an encrypted message
 PASS   signature verification with revoked key

T351-pgpmime-mangling: Testing PGP/MIME message mangling
 PASS   show 'Mixed-Up' mangled PGP/MIME message correctly
 PASS   reply to 'Mixed-Up' mangled PGP/MIME message correctly
 PASS   repaired 'Mixed-up' messages can be found with index.repaired=mixedup
 PASS   index cleartext of 'Mixed-Up' mangled PGP/MIME message
 PASS   search cleartext of 'Mixed-Up' mangled PGP/MIME message

T355-smime: Testing S/MIME signature verification and decryption
 PASS   emacs delivery of S/MIME signed message
 PASS   emacs delivery of S/MIME encrypted + signed message
 PASS   Signature verification (openssl)
 PASS   signature verification (notmuch CLI)
 PASS   Decryption and signature verification (openssl)
 PASS   Decryption (notmuch CLI)
 PASS   Cryptographic message status (encrypted+signed)
 PASS   encrypted+signed message is known to be encrypted, but signature is 
unknown
 PASS   Encrypted body is not indexed
 PASS   Reindex cleartext
 PASS   signature is now known
 PASS   Encrypted body is indexed
 PASS   index PKCS#7 SignedData message
 PASS   do not index embedded certificates from PKCS#7 SignedData
 PASS   know the MIME type of the embedded part in PKCS#7 SignedData
 PASS   PKCS#7 SignedData message is tagged 'signed'
 PASS   show contents of PKCS#7 SignedData message
 PASS   reply to PKCS#7 SignedData message with proper quoting and attribution
 PASS   show PKCS#7 SignedData outputs valid JSON
 PASS   Verify signature on PKCS#7 SignedData message
 PASS   Verify signature on PKCS#7 SignedData message signer User ID

T356-protected-headers: Testing Message decryption with protected headers
 PASS   verify protected header is not visible without decryption
 PASS   verify protected header is visible with decryption
 PASS   when no external header is present, show masked subject as null
 PASS   misplaced protected headers should not be made visible during decryption
 PASS   verify double-wrapped phony protected header is not visible when inner 
decryption fails
 PASS   cleartext phony protected headers should not be made visible when 
decryption fails
 PASS   wrapped protected headers should not be made visible during decryption
 PASS   internal headers without protected-header attribute should be skipped
 PASS   verify nested message/rfc822 protected header is visible
 PASS   show cryptographic envelope on signed mail
 PASS   verify signed protected header
 PASS   protected subject does not leak by default in replies
 PASS   protected subject is not indexed by default
 PASS   reindex message with protected header
 PASS   protected subject is indexed when cleartext is indexed
 PASS   indexed protected subject is visible in search
 PASS   indexed protected subject is not visible in reply header
 PASS   verify correct protected header when submessage exists
 PASS   verify protected header is both signed and encrypted
 PASS   verify protected header is signed even when not masked
 PASS   reindex everything, ensure headers are as expected
 PASS   when rendering protected headers, avoid rendering legacy-display part
 PASS   when replying, avoid rendering legacy-display part
 PASS   do not treat legacy-display part as body when indexing
 PASS   identify message that had a legacy display part skipped during indexing
 PASS   verify signed PKCS#7 subject (multipart-signed)
 PASS   verify signed PKCS#7 subject (multipart-signed) signer User ID
 PASS   verify signed PKCS#7 subject (onepart-signed)
 PASS   verify signed PKCS#7 subject (onepart-signed) signer User ID
 PASS   confirm signed and encrypted PKCS#7 subject (sign+enc)
 PASS   confirm signed and encrypted PKCS#7 subject (sign+enc) signer User ID
 PASS   confirm signed and encrypted PKCS#7 subject (sign+enc+legacy-disp)
 PASS   confirm signed and encrypted PKCS#7 subject (sign+enc+legacy-disp) 
signer User ID
 PASS   confirm encryption-protected PKCS#7 subject (enc+legacy-disp)

T357-index-decryption: Testing indexing decrypted mail
 PASS   emacs delivery of encrypted message
 PASS   search for unindexed cleartext
 PASS   emacs delivery of encrypted message
 PASS   emacs delivery of encrypted message, indexed cleartext
 PASS   emacs search by property for one message
 PASS   show the message body of the encrypted message
 PASS   message should go away after deletion
 PASS   message cleartext not present after insert
 PASS   stash decryption during show
 PASS   search should now find the contents
 PASS   message cleartext is present after reinserting with --decrypt=true
 PASS   delete all copies of the message
 PASS   message cleartext is present with insert --decrypt=true
 PASS   tagging all messages
 PASS   verify that tags have not changed
 PASS   reindex old messages
 PASS   reindexed encrypted message, including cleartext
 PASS   emacs search by property for both messages
 PASS   reindex in auto mode
 PASS   reindexed encrypted messages, should not have changed
 PASS   reindex without cleartext
 PASS   reindexed encrypted messages, without cleartext
 PASS   reindex using only session keys
 PASS   reindexed encrypted messages, decrypting only with session keys
 PASS   emacs search by property with both messages unindexed
 PASS   verify that tags remain without cleartext
 PASS   index cleartext without keeping session keys
 PASS   Ensure that the indexed terms are present
 PASS   show one of the messages with --decrypt=true
 PASS   Ensure that we cannot show the message with --decrypt=auto
 PASS   indexing message fails when secret key not available
 PASS   cannot find cleartext index
 PASS   cleartext index recovery on reindexing with stashed session keys
 PASS   notmuch reply should show cleartext if session key is present
 PASS   notmuch show should show cleartext if session key is present
 PASS   notmuch show should show nothing if decryption is explicitly disallowed
 PASS   purging stashed session keys should lose access to the cleartext
 PASS   and cleartext should be unrecoverable now that there are no stashed 
session keys
 PASS   verify signature without a session key stashed when --decrypt=true
 PASS   do not verify sig without a session key stashed if --decrypt=auto
 PASS   verify signature when --decrypt=stash
 PASS   verify signature with stashed session key

T358-emacs-protected-headers: Testing protected headers in emacs interface
 PASS   notmuch-search should show not unindexed protected subject header in 
emacs
 PASS   notmuch-show should not show unindexed protected subject header in 
emacs when nm-c-process-mime is nil
 PASS   notmuch-show should show protected subject header in emacs
 PASS   Reply within emacs to a message with protected headers, not leaking 
subject
 PASS   defaulting to indexing cleartext
 PASS   try reindexing protected header message
 PASS   notmuch-search should show indexed protected subject header in emacs
 PASS   don't leak protected subject during reply, even if indexed

T360-symbol-hiding: Testing exception symbol hiding
 FAIL   running test
        --- T360-symbol-hiding.1.EXPECTED       Fri Oct 16 10:49:38 2020
        +++ T360-symbol-hiding.1.OUTPUT Fri Oct 16 10:49:39 2020
        @@ -1,2 +1 @@
        -A Xapian exception occurred opening database: Couldn't stat 
'CWD/fakedb/.notmuch/xapian'
        -caught No XXXXXX database found at path 'CWD/nonexistent'
        +ld.so: symbol-test: can't load library 'lib/libnotmuch.so.0.0'
 PASS   checking output
 PASS   comparing existing to exported symbols

T370-search-folder-coherence: Testing folder tags removed and added through 
file renames remain consistent
 PASS   No new messages
 PASS   Single new message
 PASS   Add second folder for same message
 PASS   Multiple files for same message
 PASS   Test matches folder:spam
 PASS   Remove folder:spam copy of email
 PASS   No mails match the folder:spam search

T380-atomicity: Testing atomicity
 PASS   "notmuch new" is idempotent under arbitrary aborts
 PASS   detected 23>10 abort points

T390-python: Testing python bindings
 PASS   compare thread ids
 PASS   compare message ids
 PASS   get non-existent file
 PASS   get revision
 PASS   output of count matches test code
 PASS   Add ISO-8859-2 encoded message, call get_message_parts
 PASS   set and get config values
 PASS   get_configs with no match returns empty generator
 PASS   get_configs with no arguments returns all pairs
 PASS   get_configs prefix is used to match keys
 PASS   set_config with no value will unset config entries
 PASS   index message with decryption

T391-python-cffi: Testing python bindings (pytest)
 PASS   python cffi tests

T395-ruby: Testing ruby bindings
 missing prerequisites: ruby development files
 SKIP   all tests in T395-ruby

T400-hooks: Testing hooks
 PASS   pre-new is run
 PASS   post-new is run
 PASS   post-insert hook is run
 PASS   pre-new is run before post-new
 PASS   pre-new non-zero exit status (hook status)
 PASS   pre-new non-zero exit status (notmuch status)
 PASS   pre-new non-zero exit status aborts new
 PASS   post-new non-zero exit status (hook status)
 PASS   post-new non-zero exit status (notmuch status)
 PASS   post-insert hook does not affect insert status
 PASS   hook without executable permissions
 PASS   hook execution failure

T410-argument-parsing: Testing argument parsing
 PASS   sanity check
 PASS   sanity check zero values
 PASS   space instead of = between parameter name and value
 PASS   --boolean=true
 PASS   --boolean=false
 PASS   --no-boolean
 PASS   --no-flag
 PASS   test keyword arguments without value
 PASS   test keyword arguments with non-default value separated by a space
 PASS   test keyword arguments without value at the end
 PASS   test keyword arguments without value but with = (should be an error)

T420-emacs-test-functions: Testing emacs test function sanity
 PASS   emacs test function sanity

T430-emacs-address-cleaning: Testing emacs address cleaning
 PASS   notmuch-test-address-clean part 1
 PASS   notmuch-test-address-clean part 2
 PASS   notmuch-test-address-clean part 3

T440-emacs-hello: Testing emacs notmuch-hello view
 PASS   User-defined section with inbox tag
 PASS   User-defined section with empty, hidden entry
 PASS   User-defined section, unread tag filtered out
 PASS   User-defined section, different query for counts
 PASS   Empty custom tags section
 PASS   Empty custom queries section
 PASS   Column alignment for tag/queries with long names

T450-emacs-show: Testing emacs notmuch-show view
 PASS   Hiding Original Message region at beginning of a message
 PASS   Bare subject #1
 PASS   Bare subject #2
 PASS   Bare subject #3
 PASS   don't process cryptographic MIME parts
 PASS   process cryptographic MIME parts
 PASS   process cryptographic MIME parts (w/ notmuch-show-toggle-process-crypto)
 PASS   notmuch-show: don't elide non-matching messages
 PASS   notmuch-show: elide non-matching messages
 PASS   notmuch-show: elide non-matching messages (w/ 
notmuch-show-toggle-elide-non-matching)
 PASS   notmuch-show: elide non-matching messages (w/ prefix arg to 
notmuch-show)
 PASS   notmuch-show: disable indentation of thread content (w/ 
notmuch-show-toggle-thread-indentation)
 PASS   id buttonization
 PASS   Show handles subprocess errors
 PASS   text/enriched exploit mitigation
 PASS   show decrypted message
 PASS   show undecryptable message
 PASS   show encrypted message when not processing crypto

T455-emacs-charsets: Testing emacs notmuch-show charset handling
 FAIL   Text parts are decoded when rendering
        --- T455-emacs-charsets.1.EXPECTED      Fri Oct 16 10:50:09 2020
        +++ T455-emacs-charsets.1.OUTPUT        Fri Oct 16 10:50:09 2020
        @@ -1 +1 @@
        -Yen: ¥
        +Yen: ¥
nil
 FAIL   8bit text parts are decoded when rendering
        --- T455-emacs-charsets.2.EXPECTED      Fri Oct 16 10:50:10 2020
        +++ T455-emacs-charsets.2.OUTPUT        Fri Oct 16 10:50:10 2020
        @@ -1 +1 @@
        -Yen: ¥
        +Yen: ¥
nil
 PASS   HTML parts are decoded when rendering
 PASS   Text parts are not decoded when saving
 PASS   8bit text parts are not decoded when saving
 PASS   HTML parts are not decoded when saving
 PASS   Binary parts are not decoded when saving
 PASS   Text message are not decoded when viewing
 PASS   8bit text message are not decoded when viewing

T460-emacs-tree: Testing emacs tree view interface
 PASS   Basic notmuch-tree view in emacs
 PASS   Refreshed notmuch-tree view in emacs
 PASS   Tag message in notmuch tree view (display)
 PASS   Tag message in notmuch tree view (database)
 PASS   Untag message in notmuch tree view
 PASS   Untag message in notmuch tree view (database)
 PASS   Tag thread in notmuch tree view
 PASS   Tag message in notmuch tree view (database)
 PASS   Untag thread in notmuch tree view
 PASS   Untag message in notmuch tree view (database)
 PASS   Navigation of notmuch-hello to search results
 PASS   Tree view of a single thread (from search)
 PASS   Tree view of a single thread (from show)
 PASS   Message window of tree view
 PASS   Stash id
 PASS   Move to next matching message
 PASS   Move to next thread
 PASS   Move to previous thread
 PASS   Move to previous previous thread

T470-missing-headers: Testing messages with missing headers
 PASS   Search: text
 PASS   Search: json
 PASS   Show: text
 PASS   Show: json

T480-hex-escaping: Testing hex encoding and decoding
 PASS   round trip
 PASS   punctuation
 PASS   round trip newlines
 PASS   round trip 8bit chars
 PASS   round trip (in-place)
 PASS   punctuation (in-place)
 PASS   round trip newlines (in-place)
 PASS   round trip 8bit chars (in-place)

T490-parse-time-string: Testing date/time parser module
 PASS   date(1) default format without TZ code
 PASS   date(1) --rfc-2822 format
 PASS   date(1) --rfc=3339=seconds format
 PASS   Date parser tests
 PASS   Second rounding tests

T500-search-date: Testing date:since..until queries
 PASS   Absolute date range
 PASS   Absolute date range with 'same' operator
 PASS   Absolute date field
 PASS   Absolute time range with TZ

T510-thread-replies: Testing test of proper handling of in-reply-to and 
references headers
 PASS   Use References when In-Reply-To is broken
 PASS   Prefer References to dodgy In-Reply-To
 PASS   Use In-Reply-To when no References
 PASS   Use last Reference when In-Reply-To is dodgy
 PASS   Ignore garbage at the end of References
 PASS   reply to ghost
 PASS   reply to ghost (tree view)
 PASS   reply to ghost (RT)
 PASS   reply to ghost (RT/tree view)
 PASS   trusting reply-to (tree view)

T520-show: Testing "notmuch show"
 PASS   exit code for show invalid query

T550-db-features: Testing database version and feature compatibility
 PASS   future database versions abort open
 PASS   unknown 'rw' feature aborts read/write open
 PASS   unknown 'rw' feature aborts read-only open
 PASS   unknown 'w' feature aborts read/write open
 PASS   unknown 'w' feature does not abort read-only open

T560-lib-error: Testing error reporting for library
 PASS   building database
 PASS   Open null pointer
 PASS   Open relative path
 PASS   Create database in relative path
 PASS   Open nonexistent database
 PASS   create NULL path
 PASS   Create database in nonexistent directory
 PASS   Write to read-only database
 PASS   Add non-existent file
 PASS   compact, overwriting existing backup
 PASS   Xapian exception finding message
 PASS   Xapian exception getting tags
 PASS   Xapian exception creating directory
 PASS   Xapian exception searching messages
 PASS   Xapian exception counting messages

T562-lib-database: Testing notmuch_database_* API
 PASS   building database
 PASS   get status_string with closed db
 PASS   get path with closed db
 PASS   get version with closed db
 PASS   re-close a closed db
 PASS   destroy a closed db
 PASS   destroy an open db
 PASS   check a closed db for upgrade
 PASS   upgrade a closed db
 PASS   begin atomic section for a closed db
 PASS   end atomic section for a closed db
 PASS   get revision for a closed db
 PASS   get directory for a closed db
 PASS   index file with a closed db
 PASS   index file (relative path)
 PASS   index file (absolute path outside mail root)
 PASS   remove message file with a closed db
 PASS   find message by filename with a closed db
 PASS   Handle getting tags from closed database
 PASS   get config from closed database
 PASS   set config in closed database
 PASS   get indexopts from closed database
 PASS   get decryption policy from closed database
 PASS   set decryption policy with closed database

T563-lib-directory: Testing notmuch_directory_* API
 PASS   building database
 PASS   get child directories for a closed db
 PASS   get child filenames for a closed db
 PASS   delete directory document for a closed db
 PASS   get/set mtime of directory for a closed db
 PASS   get/set mtime of directory for a closed db

T564-lib-query: Testing notmuch_query_* API
 PASS   building database
 PASS   roundtrip query string with closed db
 PASS   retrieve closed db from query
 PASS   set omit_excluded on closed db
 PASS   roundtrip sort on closed db
 PASS   add tag_exclude on closed db
 PASS   search threads on closed db
 PASS   search messages on closed db
 PASS   count messages on closed db
 PASS   count threads on closed db
 PASS   destroy query with closed db

T566-lib-message: Testing API tests for notmuch_message_*
 PASS   building database
 PASS   Handle getting message-id from closed database
 PASS   Handle getting thread-id from closed database
 PASS   Handle getting header from closed database
 PASS   Handle getting replies from closed database
 PASS   Handle getting message filename from closed database
 PASS   Handle getting all message filenames from closed database
 PASS   iterate over all message filenames from closed database
 PASS   Handle getting ghost flag from closed database
 PASS   Handle getting date from closed database
 PASS   Handle getting tags from closed database
 PASS   Handle counting files from closed database
 PASS   Handle adding tag with closed database
 PASS   Handle removing tag with closed database
 PASS   Handle read maildir flag with closed database
 PASS   Handle checking maildir flag with closed db (new API)
 PASS   Handle converting maildir flags to tags with closed db
 PASS   Handle removing all tags with closed db
 PASS   Handle freezing message with closed db
 PASS   Handle thawing message with closed db
 PASS   Handle destroying message with closed db
 PASS   Handle retrieving closed db from message
 PASS   Handle reindexing message with closed db

T568-lib-thread: Testing API tests for notmuch_thread_*
 PASS   building database
 PASS   get thread-id from closed database
 PASS   get total messages with closed database
 PASS   get total files with closed database
 PASS   get top level messages with closed database
 PASS   iterate over level messages with closed database
 PASS   iterate over level messages with closed database
 PASS   iterate over replies with closed database
 PASS   iterate over all messages with closed database
 PASS   get authors from closed database
 PASS   get subject from closed database
 PASS   oldest date from closed database
 PASS   newest date from closed database
 PASS   iterate tags from closed database
 PASS   collect tags with closed database
 PASS   destroy thread with closed database

T570-revision-tracking: Testing database revision tracking
 PASS   notmuch_database_get_revision
 PASS   output of count matches test code
 PASS   modification count increases
 PASS   search succeeds with correct uuid
 PASS   uuid works as global option
 PASS   uuid works as global option II
 PASS   search fails with incorrect uuid
 PASS   show succeeds with correct uuid
 PASS   show fails with incorrect uuid
 PASS   tag succeeds with correct uuid
 PASS   tag fails with incorrect uuid
 PASS   lastmod:0.. matches everything
 PASS   lastmod:1000000.. matches nothing
 PASS   exclude one message using lastmod

T580-thread-search: Testing test of searching by thread-id
 PASS   Every message is found in exactly one thread
 PASS   roundtripping message-ids via thread-ids

T585-thread-subquery: Testing test of searching by using thread subqueries
 PASS   Basic query that matches no messages
 PASS   Same query against threads
 PASS   Mix thread and non-threads query
 PASS   Compound subquery
 PASS   Syntax/quoting error in subquery

T590-libconfig: Testing library config API
 PASS   notmuch_database_{set,get}_config
 PASS   notmuch_database_get_config_list: empty list
 FAIL   notmuch_database_get_config_list: closed db
        --- T590-libconfig.3.EXPECTED   Fri Oct 16 10:50:45 2020
        +++ T590-libconfig.3.OUTPUT     Fri Oct 16 10:50:45 2020
        @@ -1,3 +1,2 @@
         == stdout ==
        -1
         == stderr ==
/tmp/ports/pobj/notmuch-0.31/notmuch-0.31/test/test-lib.sh: line 1093: 15168 
Segmentation fault      (core dumped) ./${exec_file} "$@" >> OUTPUT.stdout 2>> 
OUTPUT.stderr
 PASS   notmuch_database_get_config_list: all pairs
 PASS   notmuch_database_get_config_list: all pairs (closed db)
 PASS   notmuch_database_get_config_list: one prefix
 PASS   dump config
 PASS   restore config

T590-thread-breakage: Testing thread breakage during reindexing
 PASS   There should be no threads initially
 PASS   There should be no ghosts initially
 PASS   One message in: one thread
 PASS   looking for 1 instance of 'apple'
 PASS   looking for 0 instance of 'banana'
 PASS   Expecting 0 ghosts(s)
 PASS   Second message in the same thread: one thread
 PASS   looking for 1 instance of 'apple'
 PASS   looking for 1 instance of 'banana'
 PASS   Expecting 0 ghosts(s)
 PASS   First message removed: still only one thread
 PASS   looking for 0 instance of 'apple'
 PASS   looking for 1 instance of 'banana'
 PASS   should be one ghost after first message removed
 PASS   First message reappears: should return to the same thread
 PASS   looking for 1 instance of 'apple'
 PASS   looking for 1 instance of 'banana'
 PASS   Expecting 0 ghosts(s)
 PASS   Removing second message: still only one thread
 PASS   looking for 1 instance of 'apple'
 PASS   looking for 0 instance of 'banana'
 BROKEN No ghosts should remain after deletion of second message
        --- T590-thread-breakage.22.expected    Fri Oct 16 10:50:47 2020
        +++ T590-thread-breakage.22.output      Fri Oct 16 10:50:47 2020
        @@ -1 +1 @@
        -0
        +1
 PASS   All messages gone: no threads
 PASS   looking for 0 instance of 'apple'
 PASS   looking for 0 instance of 'banana'
 PASS   No ghosts should remain after full thread deletion

T600-named-queries: Testing named queries
 PASS   error adding named query before initializing DB
 PASS   adding named query
 PASS   adding nested named query
 PASS   retrieve named query
 PASS   List all queries
 PASS   dump named queries
 PASS   dumping large queries
 PASS   delete named queries
 PASS   restore named queries
 PASS   search named query
 PASS   search named query with other terms
 PASS   search nested named query

T610-message-property: Testing message property API
 PASS   notmuch_message_{add,get,remove}_property
 PASS   notmuch_message_remove_all_properties
 PASS   testing string map binary search (via message properties)
 PASS   notmuch_message_get_properties: empty list
 PASS   notmuch_message_properties: one value
 PASS   notmuch_message_properties: multiple values
 PASS   notmuch_message_properties: prefix
 PASS   notmuch_message_properties: modify during iteration
 PASS   dump message properties
 PASS   dump _only_ message properties
 PASS   restore missing message property (single line)
 PASS   restore missing message property (full dump)
 PASS   restore clear extra message property
 PASS   test 'property:' queries: empty
 PASS   test 'property:' queries: single message
 PASS   msg.get_property (python)
 PASS   msg.get_properties (python)
 PASS   msg.get_properties (python, prefix)
 PASS   msg.get_properties (python, exact)

T620-lock: Testing locking
 PASS   blocking open

T630-emacs-draft: Testing Emacs Draft Handling
 PASS   Saving a draft indexes it
 PASS   Saving a draft tags previous draft as deleted
 PASS   Saving a signed draft adds header
 PASS   Refusing to save an encrypted draft
 PASS   Resuming a signed draft

T640-database-modified: Testing DatabaseModifiedError handling
 PASS   catching DatabaseModifiedError in _notmuch_message_ensure_metadata

T650-regexp-query: Testing regular expression searches
 PASS   empty path:// search
 PASS   empty folder:// search
 PASS   unanchored folder:// specification
 PASS   anchored folder:// search
 PASS   unanchored path:// specification
 PASS   anchored path:// search
 PASS   null from: search
 PASS   null subject: search
 PASS   xapian wildcard search for from:
 PASS   xapian wildcard search for subject:
 PASS   quoted xapian keyword search for from:
 PASS   quoted xapian keyword search for subject:
 PASS   regexp from search, case sensitive
 PASS   empty regexp or query
 PASS   non-empty regexp and query
 PASS   regexp from search, duplicate term search
 PASS   long enough regexp matches only desired senders
 PASS   shorter regexp matches one more sender
 PASS   regexp subject search, non-ASCII
 PASS   regexp subject search, punctuation
 PASS   regexp subject search, no punctuation
 PASS   combine regexp from and subject
 PASS   regexp error reporting
 PASS   empty mid search
 PASS   non-empty mid regex search
 PASS   combine regexp mid and subject
 PASS   unanchored tag search
 PASS   anchored tag search

T660-bad-date: Testing parsing of bad dates
 PASS   Bad dates translate to a date after the Unix epoch

T670-duplicate-mid: Testing duplicate message ids
 PASS   search: first indexed subject preserved
 BROKEN First subject preserved in notmuch-show (json)
        --- T670-duplicate-mid.2.expected       Fri Oct 16 10:51:02 2020
        +++ T670-duplicate-mid.2.output Fri Oct 16 10:51:02 2020
        @@ -2,6 +2,7 @@
             [
                 [
                     {
        +                "crypto": {},
                         "date_relative": "2001-01-05",
                         "excluded": false,
                         "filename": [
        @@ -12,7 +13,7 @@
                         "headers": {
                             "Date": "GENERATED_DATE",
                             "From": "Notmuch Test Suite 
<test_su...@notmuchmail.org>",
        -                    "Subject": "message 1",
        +                    "Subject": "message 0",
                             "To": "Notmuch Test Suite 
<test_su...@notmuchmail.org>"
                         },
                         "id": "XXXXX",
 PASS   Search for second subject
 BROKEN Regexp search for second subject
        --- T670-duplicate-mid.4.EXPECTED       Fri Oct 16 10:51:02 2020
        +++ T670-duplicate-mid.4.OUTPUT Fri Oct 16 10:51:02 2020
        @@ -1,3 +0,0 @@
        -MAIL_DIR/copy0
        -MAIL_DIR/copy1
        -MAIL_DIR/copy2
 PASS   search for body in duplicate file
 PASS   reindex drops terms in duplicate file
 PASS   reindex choses subject from first filename
 PASS   Deleted first duplicate file does not stop notmuch show from working

T680-html-indexing: Testing indexing of html parts
 PASS   embedded images should not be indexed
 PASS   ignore > in attribute text
 PASS   non tag text should be indexed

T690-command-line-args: Testing command line arguments
 PASS   bad option to show
 PASS   string option with space
 PASS   string option with =
 PASS   string option with :
 PASS   single keyword option with space
 PASS   single keyword option with =
 PASS   single keyword option with :
 PASS   multiple keyword options with space
 PASS   multiple keyword options with =
 PASS   mixed space and = delimiters
 PASS   mixed space and : delimiters
 PASS   show --entire-thread
 PASS   show --exclude

T700-reindex: Testing reindexing messages
 PASS   reindex preserves threads
 PASS   reindex after removing duplicate file preserves threads
 PASS   reindex preserves message-ids
 PASS   reindex preserves tags
 PASS   reindex preserves tags with special prefixes
 PASS   reindex moves a message between threads
 PASS   reindex detects removal of all files
 PASS   reindex preserves properties
 PASS   reindex of lkml corpus preserves threads

T710-message-id: Testing message id parsing
 PASS   good message ids
 PASS   leading and trailing space is OK
 PASS   <> delimiters are required
 PASS   embedded whitespace is forbidden
 PASS   folded real life bad In-Reply-To values

T720-emacs-attachment-warnings: Testing emacs attachment warnings
 PASS   notmuch-test-attachment-warning part 1

T720-lib-lifetime: Testing Lifetime constraints for library
 PASS   building database
 PASS   Message outlives parent Messages from replies

T730-emacs-forwarding: Testing emacs forwarding
 PASS   Forward setting the correct references header
 PASS   Forwarding adding the forwarded tag

T740-body: Testing search body
 PASS   search with body: prefix
 PASS   search without body: prefix
 PASS   negated body: prefix
 PASS   search unprefixed for prefixed term
 PASS   search with body: prefix for term only in subject

T750-gzip: Testing support for gzipped messages
 PASS   Single new gzipped message
 PASS   Single new gzipped message (full-scan)
 PASS   Multiple new messages, one gzipped
 PASS   Multiple new messages, one gzipped (full-scan)
 PASS   Renamed (gzipped) message
 PASS   notmuch search with partially gzipped mail store
 PASS   notmuch search --output=files with partially gzipped mail store
 PASS   show un-gzipped message
 PASS   show un-gzipped message (format mbox)
 PASS   show un-gzipped message (format raw)
 PASS   show gzipped message
 PASS   show gzipped message (mbox)
 PASS   show gzipped message (raw)
 PASS   new doesn't run out of file descriptors with many gzipped files

T750-user-header: Testing indexing user specified headers
 PASS   error adding user header before initializing DB
 PASS   adding illegal prefix name, bad utf8
 PASS   adding illegal prefix name, reserved for notmuch
 PASS   adding illegal prefix name, non-word character.
 PASS   adding empty prefix name.
 PASS   adding user header
 PASS   adding existing user header
 PASS   retrieve user header
 PASS   reindex after adding header preserves threads
 PASS   List all user headers
 PASS   parse user prefix
 PASS   parse user prefix, stemmed
 PASS   parse user prefix, phrase
 PASS   index user header

Notmuch test suite complete.
1210/1219 tests passed.
3 broken tests failed as expected.
4 tests failed.
2 tests skipped.
All tests in 1 file skipped.
gmake: *** [test/Makefile.local:75: test] Error 1

Reply via email to