mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-03-14 03:25:15 +01:00
test: add tests for hooks
Signed-off-by: Jani Nikula <jani@nikula.org>
This commit is contained in:
parent
69bb7f35b6
commit
caae152772
2 changed files with 105 additions and 0 deletions
104
test/hooks
Executable file
104
test/hooks
Executable file
|
@ -0,0 +1,104 @@
|
|||
#!/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
|
|
@ -48,6 +48,7 @@ TESTS="
|
|||
search-folder-coherence
|
||||
atomicity
|
||||
python
|
||||
hooks
|
||||
argument-parsing
|
||||
"
|
||||
TESTS=${NOTMUCH_TESTS:=$TESTS}
|
||||
|
|
Loading…
Add table
Reference in a new issue