notmuch/test/T260-thread-order.sh
Tomi Ollila 02a2eeb427 test: make script exit (1) if it "fails" to source (.) a file
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.
2015-08-07 21:56:39 +02:00

78 lines
2.6 KiB
Bash
Executable file

#!/usr/bin/env bash
test_description="threading when messages received out of order"
. ./test-lib.sh || exit 1
# Generate all single-root four message thread structures. We'll use
# this for multiple tests below.
THREADS=$(python ${TEST_DIRECTORY}/gen-threads.py 4)
nthreads=$(wc -l <<< "$THREADS")
test_begin_subtest "Messages with one parent get linked in all delivery orders"
# In the first variant, this delivers messages that reference only
# their immediate parent. Hence, we should only expect threads to be
# fully joined at the end.
for ((n = 0; n < 4; n++)); do
# Deliver the n'th message of every thread
thread=0
while read -a parents; do
parent=${parents[$n]}
generate_message \
[id]=m$n@t$thread [in-reply-to]="\<m$parent@t$thread\>" \
[subject]=p$thread [from]=m$n
thread=$((thread + 1))
done <<< "$THREADS"
notmuch new > /dev/null
done
output=$(notmuch search --sort=newest-first '*' | notmuch_search_sanitize)
expected=$(for ((i = 0; i < $nthreads; i++)); do
echo "thread:XXX 2001-01-05 [4/4] m3, m2, m1, m0; p$i (inbox unread)"
done)
test_expect_equal "$output" "$expected"
test_begin_subtest "Messages with all parents get linked in all delivery orders"
# Here we do the same thing as the previous test, but each message
# references all of its parents. Since every message references the
# root of the thread, each thread should always be fully joined. This
# is currently broken because of the bug detailed in
# id:8738h7kv2q.fsf@qmul.ac.uk.
rm ${MAIL_DIR}/*
notmuch new > /dev/null
output=""
expected=""
for ((n = 0; n < 4; n++)); do
# Deliver the n'th message of every thread
thread=0
while read -a parents; do
references=""
parent=${parents[$n]}
while [[ ${parent:-None} != None ]]; do
references="<m$parent@t$thread> $references"
pp=$parent
parent=${parents[$parent]}
# Avoid looping over broken input (if ever)
parents[$pp]="None"
done
generate_message \
[id]=m$n@t$thread [references]="'$references'" \
[subject]=p$thread [from]=m$n
thread=$((thread + 1))
done <<< "$THREADS"
notmuch new > /dev/null
output="$output
$(notmuch search --sort=newest-first '*' | notmuch_search_sanitize)"
# Construct expected output
template="thread:XXX 2001-01-05 [$((n+1))/$((n+1))]"
for ((m = n; m > 0; m--)); do
template="$template m$m,"
done
expected="$expected
$(for ((i = 0; i < $nthreads; i++)); do
echo "$template m0; p$i (inbox unread)"
done)"
done
test_expect_equal "$output" "$expected"
test_done