+OLDCONFIG=$(notmuch config get new.tags)
+
+test_begin_subtest "Empty tags in new.tags are forbidden"
+notmuch config set new.tags "foo;;bar"
+gen_insert_msg
+output=$(notmuch insert $gen_msg_filename 2>&1)
+test_expect_equal "$output" "Error: tag '' in new.tags: empty tag forbidden"
+
+test_begin_subtest "Tags starting with '-' in new.tags are forbidden"
+notmuch config set new.tags "-foo;bar"
+gen_insert_msg
+output=$(notmuch insert $gen_msg_filename 2>&1)
+test_expect_equal "$output" "Error: tag '-foo' in new.tags: tag starting with '-' forbidden"
+
+test_expect_code 1 "Invalid tags set exit code" \
+ "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
+gen_insert_msg
+cat <<EOF > index-file-$code.gdb
+set breakpoint pending 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
+