From 8e379c62a48d68cd5ab2a32c6fc9244b1ae94084 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Sun, 26 May 2019 23:28:04 +0200 Subject: Add test-suite (requires dovecot-imapd). --- tests/03-sync-mailbox-list-partial/run | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 tests/03-sync-mailbox-list-partial/run (limited to 'tests/03-sync-mailbox-list-partial/run') diff --git a/tests/03-sync-mailbox-list-partial/run b/tests/03-sync-mailbox-list-partial/run new file mode 100644 index 0000000..449115d --- /dev/null +++ b/tests/03-sync-mailbox-list-partial/run @@ -0,0 +1,57 @@ +# try a bunch of invalid 'list-mailbox' values: +# empty string, missing space between values, unterminated string +for v in '""' '"f o o""bar"' '"f o o" "bar" "baz\" x'; do + sed -ri "s/^(list-mailbox\\s*=\\s*).*/\\1${v//\\/\\\\}/" "$XDG_CONFIG_HOME/interimap/config" + ! interimap + xgrep -xF "Invalid value for list-mailbox: $v" <"$STDERR" +done + +# create some mailboxes +doveadm -u "local" mailbox create "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" "bad" +for m in "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" "bad" "INBOX"; do + sample_message | deliver -u "local" -- -m "$m" +done + +# restrict 'list-mailbox' to the above minus "bad" +sed -ri 's/^(list-mailbox\s*=\s*).*/\1foo "foo bar" "f\\\\\\"o\\x21o.*" "f\\0o\\0o"/' \ + "$XDG_CONFIG_HOME/interimap/config" + +# run partial sync +interimap +check_mailbox_list "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" "INBOX" "f\\\"o!o" "f" "f.o" +check_mailboxes_status "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" + +# check that "bad" isn't in the remote imap server +! doveadm -u "remote" mailbox status uidvalidity "bad" + +# check that "bad" and "INBOX" aren't in the database +sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/count" <<-EOF + SELECT COUNT(*) + FROM mailboxes + WHERE mailbox = x'$(printf "%s" "bad" | xxd -ps)' + OR mailbox = x'$(printf "%s" "INBOX" | xxd -ps)' +EOF +[ $(< "$TMPDIR/count") -eq 0 ] + + +# run partial sync +doveadm -u "remote" mailbox create "f\\\"o!o~baz" "f\\\"o!o~bad" +for m in "f\\\"o!o~baz" "f\\\"o!o~bad"; do + sample_message | deliver -u "remote" -- -m "$m" +done +interimap "f\\\"o!o.baz" + +check_mailbox_list "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" "INBOX" "f\\\"o!o" "f" "f.o" "f\\\"o!o.baz" +check_mailboxes_status "foo" "foo bar" "f\\\"o!o.bar" "f.o.o" "f\\\"o!o.baz" + +# check that "bad", "f\\\"o!o.bad" and "INBOX" aren't in the database +sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/count" <<-EOF + SELECT COUNT(*) + FROM mailboxes + WHERE mailbox = x'$(printf "%s" "bad" | xxd -ps)' + OR mailbox = x'$(printf "%s" "INBOX" | xxd -ps)' + OR mailbox = x'$(printf "%s\\0%s" "f\\\"o!o" "bad" | xxd -ps)' +EOF +[ $(< "$TMPDIR/count") -eq 0 ] + +# vim: set filetype=sh : -- cgit v1.2.3