unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
blob 77e8569b22a2cfa280791ee149b38e1f7dfb67ee 2726 bytes (raw)
name: test/hooks 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
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

debug log:

solving 77e8569 ...
found 77e8569 in https://yhetil.org/notmuch.git/

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).