+# 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
+gen_insert_msg
+cat <<EOF > index-file-$code.gdb
+set breakpoint pending on
+set logging file index-file-$code.log
+set logging on
+break notmuch_database_add_message
+commands
+return NOTMUCH_STATUS_$code
+continue
+end
+run
+EOF
+test_begin_subtest "error exit when add_message returns $code"
+gdb --batch-silent --return-child-result -x index-file-$code.gdb \
+ --args notmuch insert < $gen_msg_filename
+test_expect_equal $? 1
+
+test_begin_subtest "success exit with --keep when add_message returns $code"
+gdb --batch-silent --return-child-result -x index-file-$code.gdb \
+ --args notmuch insert --keep < $gen_msg_filename
+test_expect_equal $? 0
+done
+