mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
test: make atomicity setup conditional on gdb being present.
The setup is useless if gdb is not present, so it doesn't hurt to skip it. The diff here is huge, but the commit is really just moving most of the script inside the initial if, and adding an else block to print a warning.
This commit is contained in:
parent
0ce713ae02
commit
c468f3703e
1 changed files with 76 additions and 73 deletions
149
test/atomicity
149
test/atomicity
|
@ -7,91 +7,94 @@ test_description='atomicity'
|
||||||
# final database contents should be the same regardless of when (or
|
# final database contents should be the same regardless of when (or
|
||||||
# if) it is killed and restarted.
|
# if) it is killed and restarted.
|
||||||
|
|
||||||
if test_expect_success "prereq: GDB is present" "which gdb"; then
|
if which gdb; then
|
||||||
test_set_prereq GDB
|
test_set_prereq GDB
|
||||||
fi
|
|
||||||
|
|
||||||
# Create a maildir structure to also stress flag synchronization
|
# Create a maildir structure to also stress flag synchronization
|
||||||
mkdir $MAIL_DIR/cur
|
mkdir $MAIL_DIR/cur
|
||||||
mkdir $MAIL_DIR/new
|
mkdir $MAIL_DIR/new
|
||||||
mkdir $MAIL_DIR/tmp
|
mkdir $MAIL_DIR/tmp
|
||||||
mkdir $MAIL_DIR/.remove-dir
|
mkdir $MAIL_DIR/.remove-dir
|
||||||
|
|
||||||
# Prepare the initial database
|
# Prepare the initial database
|
||||||
generate_message [subject]='Duplicate' [filename]='duplicate:2,' [dir]=cur
|
generate_message [subject]='Duplicate' [filename]='duplicate:2,' [dir]=cur
|
||||||
generate_message [subject]='Remove' [filename]='remove:2,' [dir]=cur
|
generate_message [subject]='Remove' [filename]='remove:2,' [dir]=cur
|
||||||
generate_message [subject]='"Remove duplicate"' [filename]='remove-duplicate:2,' [dir]=cur
|
generate_message [subject]='"Remove duplicate"' [filename]='remove-duplicate:2,' [dir]=cur
|
||||||
cp $MAIL_DIR/cur/remove-duplicate:2, $MAIL_DIR/cur/remove-duplicate-copy:2,
|
cp $MAIL_DIR/cur/remove-duplicate:2, $MAIL_DIR/cur/remove-duplicate-copy:2,
|
||||||
generate_message [subject]='Rename' [filename]='rename:2,' [dir]=cur
|
generate_message [subject]='Rename' [filename]='rename:2,' [dir]=cur
|
||||||
generate_message [subject]='"Rename duplicate"' [filename]='rename-duplicate:2,' [dir]=cur
|
generate_message [subject]='"Rename duplicate"' [filename]='rename-duplicate:2,' [dir]=cur
|
||||||
generate_message [subject]='"Move 1"' [filename]='move1:2,' [dir]=cur
|
generate_message [subject]='"Move 1"' [filename]='move1:2,' [dir]=cur
|
||||||
generate_message [subject]='"Move 2"' [filename]='move2:2,' [dir]=new
|
generate_message [subject]='"Move 2"' [filename]='move2:2,' [dir]=new
|
||||||
generate_message [subject]='Flag' [filename]='flag:2,' [dir]=cur
|
generate_message [subject]='Flag' [filename]='flag:2,' [dir]=cur
|
||||||
generate_message [subject]='"Flag duplicate"' [filename]='flag-duplicate:2,' [dir]=cur
|
generate_message [subject]='"Flag duplicate"' [filename]='flag-duplicate:2,' [dir]=cur
|
||||||
cp $MAIL_DIR/cur/flag-duplicate:2, $MAIL_DIR/cur/flag-duplicate-copy:2,F
|
cp $MAIL_DIR/cur/flag-duplicate:2, $MAIL_DIR/cur/flag-duplicate-copy:2,F
|
||||||
generate_message [subject]='"Remove directory"' [filename]='remove-directory:2,' [dir]=.remove-dir
|
generate_message [subject]='"Remove directory"' [filename]='remove-directory:2,' [dir]=.remove-dir
|
||||||
generate_message [subject]='"Remove directory duplicate"' [filename]='remove-directory-duplicate:2,' [dir]=.remove-dir
|
generate_message [subject]='"Remove directory duplicate"' [filename]='remove-directory-duplicate:2,' [dir]=.remove-dir
|
||||||
cp $MAIL_DIR/.remove-dir/remove-directory-duplicate:2, $MAIL_DIR/cur/
|
cp $MAIL_DIR/.remove-dir/remove-directory-duplicate:2, $MAIL_DIR/cur/
|
||||||
notmuch new > /dev/null
|
notmuch new > /dev/null
|
||||||
|
|
||||||
# Make all maildir changes, but *don't* update the database
|
# Make all maildir changes, but *don't* update the database
|
||||||
generate_message [subject]='Added' [filename]='added:2,' [dir]=cur
|
generate_message [subject]='Added' [filename]='added:2,' [dir]=cur
|
||||||
cp $MAIL_DIR/cur/duplicate:2, $MAIL_DIR/cur/duplicate-copy:2,
|
cp $MAIL_DIR/cur/duplicate:2, $MAIL_DIR/cur/duplicate-copy:2,
|
||||||
generate_message [subject]='"Add duplicate"' [filename]='add-duplicate:2,' [dir]=cur
|
generate_message [subject]='"Add duplicate"' [filename]='add-duplicate:2,' [dir]=cur
|
||||||
generate_message [subject]='"Add duplicate copy"' [filename]='add-duplicate-copy:2,' [dir]=cur
|
generate_message [subject]='"Add duplicate copy"' [filename]='add-duplicate-copy:2,' [dir]=cur
|
||||||
rm $MAIL_DIR/cur/remove:2,
|
rm $MAIL_DIR/cur/remove:2,
|
||||||
rm $MAIL_DIR/cur/remove-duplicate-copy:2,
|
rm $MAIL_DIR/cur/remove-duplicate-copy:2,
|
||||||
mv $MAIL_DIR/cur/rename:2, $MAIL_DIR/cur/renamed:2,
|
mv $MAIL_DIR/cur/rename:2, $MAIL_DIR/cur/renamed:2,
|
||||||
mv $MAIL_DIR/cur/rename-duplicate:2, $MAIL_DIR/cur/renamed-duplicate:2,
|
mv $MAIL_DIR/cur/rename-duplicate:2, $MAIL_DIR/cur/renamed-duplicate:2,
|
||||||
mv $MAIL_DIR/cur/move1:2, $MAIL_DIR/new/move1:2,
|
mv $MAIL_DIR/cur/move1:2, $MAIL_DIR/new/move1:2,
|
||||||
mv $MAIL_DIR/new/move2:2, $MAIL_DIR/cur/move2:2,
|
mv $MAIL_DIR/new/move2:2, $MAIL_DIR/cur/move2:2,
|
||||||
mv $MAIL_DIR/cur/flag:2, $MAIL_DIR/cur/flag:2,F
|
mv $MAIL_DIR/cur/flag:2, $MAIL_DIR/cur/flag:2,F
|
||||||
rm $MAIL_DIR/cur/flag-duplicate-copy:2,F
|
rm $MAIL_DIR/cur/flag-duplicate-copy:2,F
|
||||||
rm $MAIL_DIR/.remove-dir/remove-directory:2,
|
rm $MAIL_DIR/.remove-dir/remove-directory:2,
|
||||||
rm $MAIL_DIR/.remove-dir/remove-directory-duplicate:2,
|
rm $MAIL_DIR/.remove-dir/remove-directory-duplicate:2,
|
||||||
rmdir $MAIL_DIR/.remove-dir
|
rmdir $MAIL_DIR/.remove-dir
|
||||||
|
|
||||||
# Prepare a snapshot of the updated maildir. The gdb script will
|
# Prepare a snapshot of the updated maildir. The gdb script will
|
||||||
# update the database in this snapshot as it goes.
|
# update the database in this snapshot as it goes.
|
||||||
cp -ra $MAIL_DIR $MAIL_DIR.snap
|
cp -ra $MAIL_DIR $MAIL_DIR.snap
|
||||||
cp ${NOTMUCH_CONFIG} ${NOTMUCH_CONFIG}.snap
|
cp ${NOTMUCH_CONFIG} ${NOTMUCH_CONFIG}.snap
|
||||||
NOTMUCH_CONFIG=${NOTMUCH_CONFIG}.snap notmuch config set database.path $MAIL_DIR.snap
|
NOTMUCH_CONFIG=${NOTMUCH_CONFIG}.snap notmuch config set database.path $MAIL_DIR.snap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Execute notmuch new and, at every call to rename, snapshot the
|
# Execute notmuch new and, at every call to rename, snapshot the
|
||||||
# database, run notmuch new again on the snapshot, and capture the
|
# database, run notmuch new again on the snapshot, and capture the
|
||||||
# results of search.
|
# results of search.
|
||||||
#
|
#
|
||||||
# -tty /dev/null works around a conflict between the 'timeout' wrapper
|
# -tty /dev/null works around a conflict between the 'timeout' wrapper
|
||||||
# and gdb's attempt to control the TTY.
|
# and gdb's attempt to control the TTY.
|
||||||
export MAIL_DIR
|
export MAIL_DIR
|
||||||
gdb -tty /dev/null -batch -x $TEST_DIRECTORY/atomicity.gdb notmuch >/dev/null 2>/dev/null
|
gdb -tty /dev/null -batch -x $TEST_DIRECTORY/atomicity.gdb notmuch >/dev/null 2>/dev/null
|
||||||
|
|
||||||
# Get the final, golden output
|
# Get the final, golden output
|
||||||
notmuch search '*' > expected
|
notmuch search '*' > expected
|
||||||
|
|
||||||
# Check output against golden output
|
# Check output against golden output
|
||||||
outcount=$(cat outcount)
|
outcount=$(cat outcount)
|
||||||
echo -n > searchall
|
echo -n > searchall
|
||||||
echo -n > expectall
|
echo -n > expectall
|
||||||
for ((i = 0; i < $outcount; i++)); do
|
for ((i = 0; i < $outcount; i++)); do
|
||||||
if ! cmp -s search.$i expected; then
|
if ! cmp -s search.$i expected; then
|
||||||
# Find the range of interruptions that match this output
|
# Find the range of interruptions that match this output
|
||||||
for ((end = $i + 1 ; end < $outcount; end++)); do
|
for ((end = $i + 1 ; end < $outcount; end++)); do
|
||||||
if ! cmp -s search.$i search.$end; then
|
if ! cmp -s search.$i search.$end; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
echo "When interrupted after $test/backtrace.$(expr $i - 1) (abort points $i-$(expr $end - 1))" >> searchall
|
echo "When interrupted after $test/backtrace.$(expr $i - 1) (abort points $i-$(expr $end - 1))" >> searchall
|
||||||
cat search.$i >> searchall
|
cat search.$i >> searchall
|
||||||
cat expected >> expectall
|
cat expected >> expectall
|
||||||
echo >> searchall
|
echo >> searchall
|
||||||
echo >> expectall
|
echo >> expectall
|
||||||
|
|
||||||
i=$(expr $end - 1)
|
i=$(expr $end - 1)
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
say_color info "%-6s" "WARNING"
|
||||||
|
echo " Missing test prerequisite GDB"
|
||||||
|
fi
|
||||||
|
|
||||||
test_begin_subtest '"notmuch new" is idempotent under arbitrary aborts'
|
test_begin_subtest '"notmuch new" is idempotent under arbitrary aborts'
|
||||||
test_expect_equal_file GDB searchall expectall
|
test_expect_equal_file GDB searchall expectall
|
||||||
|
|
Loading…
Reference in a new issue