mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
a755c9d6a9
All test scripts to be executed are now named as T\d\d\d-name.sh, numers in increments of 10. This eases adding new tests and developers to see which are test scripts that are executed by test suite and in which order.
104 lines
2.7 KiB
Bash
Executable file
104 lines
2.7 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
test_description='hooks'
|
|
. ./test-lib.sh
|
|
|
|
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
|
|
|
|
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 "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"
|
|
|
|
# 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
|