+output=$(notmuch insert $gen_msg_filename 2>&1)
+test_expect_equal "$output" "Error: tag '-foo' in new.tags: tag starting with '-' forbidden"
+
+test_begin_subtest "Invalid tags set exit code"
+test_expect_code 1 "notmuch insert $gen_msg_filename 2>&1"
+
+notmuch config set new.tags $OLDCONFIG
+
+# DUPLICATE_MESSAGE_ID is not tested here, because it should actually pass.
+
+for code in OUT_OF_MEMORY XAPIAN_EXCEPTION FILE_NOT_EMAIL \
+ READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do
+cat <<EOF > index-file-$code.gdb
+set breakpoint pending on
+set logging file index-file-$code.log
+set logging on
+break notmuch_database_index_file
+commands
+return NOTMUCH_STATUS_$code
+continue
+end
+run
+EOF
+done
+
+gen_insert_msg
+
+for code in FILE_NOT_EMAIL READ_ONLY_DATABASE UPGRADE_REQUIRED PATH_ERROR; do
+ test_begin_subtest "EXIT_FAILURE when index_file returns $code"
+ test_expect_code 1 \
+ "${TEST_GDB} --batch-silent --return-child-result \
+ -ex 'set args insert < $gen_msg_filename' \
+ -x index-file-$code.gdb notmuch"
+
+ test_begin_subtest "success exit with --keep when index_file returns $code"
+ test_expect_code 0 \
+ "${TEST_GDB} --batch-silent --return-child-result \
+ -ex 'set args insert --keep < $gen_msg_filename' \
+ -x index-file-$code.gdb notmuch"
+done
+
+for code in OUT_OF_MEMORY XAPIAN_EXCEPTION ; do
+ test_begin_subtest "EX_TEMPFAIL when index_file returns $code"
+ test_expect_code 75 \
+ "${TEST_GDB} --batch-silent --return-child-result \
+ -ex 'set args insert < $gen_msg_filename' \
+ -x index-file-$code.gdb notmuch"
+
+ test_begin_subtest "success exit with --keep when index_file returns $code"
+ test_expect_code 0 \
+ "${TEST_GDB} --batch-silent --return-child-result \
+ -ex 'set args insert --keep < $gen_msg_filename' \
+ -x index-file-$code.gdb notmuch"
+done