aboutsummaryrefslogtreecommitdiffstats
path: root/tests/delete/t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/delete/t')
-rw-r--r--tests/delete/t95
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/delete/t b/tests/delete/t
new file mode 100644
index 0000000..c38d4d3
--- /dev/null
+++ b/tests/delete/t
@@ -0,0 +1,95 @@
+doveadm -u "local" mailbox create "foo.bar" "foo.bar.baz"
+
+for m in "foo.bar" "foo.bar.baz" "INBOX"; do
+ sample_message | deliver -u "local" -- -m "$m"
+done
+
+interimap_init
+check_mailbox_list
+check_mailboxes_status "foo.bar" "foo.bar.baz" "INBOX"
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/dump.sql" <<-EOF
+ .dump
+EOF
+
+
+step_start "nonexistent source (no-op)"
+interimap --target="local,remote" --target="database" --delete "nonexistent" || error
+
+check_mailbox_list
+check_mailboxes_status "foo.bar" "foo.bar.baz" "INBOX"
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/dump2.sql" <<-EOF
+ .dump
+EOF
+diff -u --label="a/dump.sql" --label="b/dump.sql" \
+ "$TMPDIR/dump.sql" "$TMPDIR/dump2.sql" || error "SQL dumps differ"
+step_done
+
+
+# foo.bar will become \NoSelect in local, per RFC 3501: "It is permitted
+# to delete a name that has inferior hierarchical names and does not
+# have the \Noselect mailbox name attribute. In this case, all messages
+# in that mailbox are removed, and the name will acquire the \Noselect
+# mailbox name attribute."
+step_start "mailbox with inferiors"
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/mailboxes.sql" <<-EOF
+ SELECT idx, mailbox FROM mailboxes
+ WHERE mailbox != x'$(printf "%s\\0%s" "foo" "bar" | xxd -ps)'
+ ORDER BY idx
+EOF
+
+interimap --target="local" --delete "foo.bar"
+
+check_mailbox_list
+check_mailboxes_status "foo.bar.baz" "INBOX"
+
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/dump2.sql" <<-EOF
+ .dump
+EOF
+diff -u --label="a/dump.sql" --label="b/dump.sql" \
+ "$TMPDIR/dump.sql" "$TMPDIR/dump2.sql" || error "SQL dumps differ"
+
+! doveadm -u "local" mailbox status uidvalidity "foo.bar" # gone
+ doveadm -u "remote" mailbox status uidvalidity "foo^bar"
+
+# now delete from the remote server and the database
+interimap --delete "foo.bar"
+
+! doveadm -u "local" mailbox status uidvalidity "foo.bar"
+! doveadm -u "remote" mailbox status uidvalidity "foo^bar"
+
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/mailboxes2.sql" <<-EOF
+ SELECT idx, mailbox FROM mailboxes ORDER BY idx
+EOF
+diff -u --label="a/mailboxes.sql" --label="b/mailboxes.sql" \
+ "$TMPDIR/mailboxes.sql" "$TMPDIR/mailboxes2.sql" || error "SQL dumps differ"
+
+check_mailbox_list
+check_mailboxes_status "foo.bar.baz" "INBOX"
+step_done
+
+
+step_start "INBOX (fail)"
+! interimap --delete "InBoX" || error "deleted INBOX"
+grep -Fx "ERROR: INBOX can't be deleted" <"$STDERR" || error
+
+check_mailbox_list
+check_mailboxes_status "foo.bar.baz" "INBOX"
+step_done
+
+
+step_start "\\Noinferiors mailbox"
+interimap --delete "foo.bar.baz"
+
+! doveadm -u "local" mailbox status uidvalidity "foo.bar.baz"
+! doveadm -u "remote" mailbox status uidvalidity "foo^bar^baz"
+
+sqlite3 "$XDG_DATA_HOME/interimap/remote.db" >"$TMPDIR/count" <<-EOF
+ SELECT COUNT(*) FROM mailboxes
+EOF
+[ "$(< "$TMPDIR/count" )" -eq 1 ] || error "Not only INBOX left?"
+
+check_mailbox_list
+check_mailboxes_status "INBOX"
+step_done
+
+# vim: set filetype=sh :