mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
02a2eeb427
The files (test) scripts source (with builtin command `.`) provides information which the scripts depend, and without the `source` to succeed allowing script to continue may lead to dangerous situations (e.g. rm -rf "${undefined_variable}"/*). At the end of all source (.) lines construct ' || exit 1' was added; In our case the script script will exit if it cannot find (or read) the file to be sourced. Additionally script would also exits if the last command of the sourced file exited nonzero.
119 lines
3.1 KiB
Bash
Executable file
119 lines
3.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
test_description='hooks'
|
|
. ./test-lib.sh || exit 1
|
|
|
|
HOOK_DIR=${MAIL_DIR}/.notmuch/hooks
|
|
|
|
create_echo_hook () {
|
|
local TOKEN="${RANDOM}"
|
|
mkdir -p ${HOOK_DIR}
|
|
cat <<EOF >"${HOOK_DIR}/${1}"
|
|
#!/bin/sh
|
|
echo "${TOKEN}" > ${3}
|
|
EOF
|
|
chmod +x "${HOOK_DIR}/${1}"
|
|
echo "${TOKEN}" > ${2}
|
|
}
|
|
|
|
create_failing_hook () {
|
|
mkdir -p ${HOOK_DIR}
|
|
cat <<EOF >"${HOOK_DIR}/${1}"
|
|
#!/bin/sh
|
|
exit 13
|
|
EOF
|
|
chmod +x "${HOOK_DIR}/${1}"
|
|
}
|
|
|
|
rm_hooks () {
|
|
rm -rf ${HOOK_DIR}
|
|
}
|
|
|
|
# add a message to generate mail dir and database
|
|
add_message
|
|
# create maildir structure for notmuch-insert
|
|
mkdir -p "$MAIL_DIR"/{cur,new,tmp}
|
|
|
|
test_begin_subtest "pre-new is run"
|
|
rm_hooks
|
|
generate_message
|
|
create_echo_hook "pre-new" expected output
|
|
notmuch new > /dev/null
|
|
test_expect_equal_file expected output
|
|
|
|
test_begin_subtest "post-new is run"
|
|
rm_hooks
|
|
generate_message
|
|
create_echo_hook "post-new" expected output
|
|
notmuch new > /dev/null
|
|
test_expect_equal_file expected output
|
|
|
|
test_begin_subtest "post-insert hook is run"
|
|
rm_hooks
|
|
generate_message
|
|
create_echo_hook "post-insert" expected output
|
|
notmuch insert < "$gen_msg_filename"
|
|
test_expect_equal_file expected output
|
|
|
|
test_begin_subtest "pre-new is run before post-new"
|
|
rm_hooks
|
|
generate_message
|
|
create_echo_hook "pre-new" pre-new.expected pre-new.output
|
|
create_echo_hook "post-new" post-new.expected post-new.output
|
|
notmuch new > /dev/null
|
|
test_expect_equal_file post-new.expected post-new.output
|
|
|
|
test_begin_subtest "pre-new non-zero exit status (hook status)"
|
|
rm_hooks
|
|
generate_message
|
|
create_failing_hook "pre-new"
|
|
output=`notmuch new 2>&1`
|
|
test_expect_equal "$output" "Error: pre-new hook failed with status 13"
|
|
|
|
# depends on the previous subtest leaving broken hook behind
|
|
test_expect_code 1 "pre-new non-zero exit status (notmuch status)" "notmuch new"
|
|
|
|
# depends on the previous subtests leaving 1 new message behind
|
|
test_begin_subtest "pre-new non-zero exit status aborts new"
|
|
rm_hooks
|
|
output=$(NOTMUCH_NEW)
|
|
test_expect_equal "$output" "Added 1 new message to the database."
|
|
|
|
test_begin_subtest "post-new non-zero exit status (hook status)"
|
|
rm_hooks
|
|
generate_message
|
|
create_failing_hook "post-new"
|
|
NOTMUCH_NEW 2>output.stderr >output
|
|
cat output.stderr >> output
|
|
echo "Added 1 new message to the database." > expected
|
|
echo "Error: post-new hook failed with status 13" >> expected
|
|
test_expect_equal_file expected output
|
|
|
|
# depends on the previous subtest leaving broken hook behind
|
|
test_expect_code 1 "post-new non-zero exit status (notmuch status)" "notmuch new"
|
|
|
|
rm_hooks
|
|
generate_message
|
|
create_failing_hook "post-insert"
|
|
test_expect_success "post-insert hook does not affect insert status" \
|
|
"notmuch insert < \"$gen_msg_filename\" > /dev/null"
|
|
|
|
# test_begin_subtest "hook without executable permissions"
|
|
rm_hooks
|
|
mkdir -p ${HOOK_DIR}
|
|
cat <<EOF >"${HOOK_DIR}/pre-new"
|
|
#!/bin/sh
|
|
echo foo
|
|
EOF
|
|
output=`notmuch new 2>&1`
|
|
test_expect_code 1 "hook without executable permissions" "notmuch new"
|
|
|
|
# test_begin_subtest "hook execution failure"
|
|
rm_hooks
|
|
mkdir -p ${HOOK_DIR}
|
|
cat <<EOF >"${HOOK_DIR}/pre-new"
|
|
no hashbang, execl fails
|
|
EOF
|
|
chmod +x "${HOOK_DIR}/pre-new"
|
|
test_expect_code 1 "hook execution failure" "notmuch new"
|
|
|
|
test_done
|