[Dovecot] script to test CATENATE
Attached please find a perl script which tests the CATENATE support in dovecot. I used this to test my CATENATE implementation a few years ago and it runs fine against dovecot in OS X Server. When run against dovecot-2.2.4 though it always fails or hangs, which in some cases means we interpreted RFCs differently and in other cases means it's finding bugs; both conditions are worthy of scrutiny. (It's random-number driven so every run is different.) A couple months ago I reported a few simple bugs which this script found and you fixed them; thanks. Then it started finding problems for which it's harder to isolate simple reproducible test cases. Vacations and other work interceded but now Apple is pleased to give you the script itself to allow you to iterate faster.
Here are some examples of it running. One time only, pass the --init argument to store some template messages used by the real tests: $ ./catenate.pl --host your.test.server --user testuser --password 1234 --init connecting (imaps)... capability... logging in... deleting old templates mailbox... creating templates mailbox... append1... Append succeeded append2... Append succeeded logout... success $ ./catenate.pl --host your.test.server --user testuser --password 1234 connecting (imaps)... capability... logging in... append1... Append failed as it should have (bad url): <append1 NO [BADURL ;invalid;] Invalid IMAP URL: Unexpected IMAP URL path segment: `;invalid;'.> append2... Append failed as it should have (bad url): <append2 NO [BADURL /inbox/;uid=99999999] Message not found.> append3... Append succeeded [...] All tests passed. $
If it concludes with anything other than "All tests passed" or hangs then it found something that it didn't expect and that should be examined. Use the --verbose option to see the entire client-server conversation.
We hope that you find this script helpful to harden your CATENATE code. I will be happy to answer any questions.
On 22/07/2013 23:17, Mike Abbott wrote:
Attached please find a perl script which tests the CATENATE support in dovecot. I used this to test my CATENATE implementation a few years ago and it runs fine against dovecot in OS X Server.
Hi Mike
Do you think you might re-submit the matching BURL support to Postfix?
It seems like it accidentally fell on the floor due to arriving at a bad
moment some years back?
Cheers
Ed W
On 23/07/2013 14:30, Mike Abbott wrote:
Do you think you might re-submit the matching BURL support to Postfix? I don't think re-submitting is a good idea unless Wietse & co. request it, which I doubt will happen.
My reading of it at the time was something like "There are no clients that support this. We don't understand the need"
Now that there is at least one large client (I'm presuming that IOS does support it?) I think the world has changed and of course the patch has now had large scale testing (since I'm presuming again that it's included in the Apple distributed Postfix version?)
I personally think that the idea is perfect and I would like to see it break into mainstream use and from there I think we will possibly see support added to additional clients (I think this is how to break the chicken/egg cycle). The idea that you can use IMAP commands to construct a message server side from "bits of other messages", and then post it out server side is fantastic.
Please consider having at least one more go. I think there is likely to be much better reception now that clients exist, the patch is well tested and Dovecot at least supports the IMAP side. Please...?
Cheers
Ed W
On 23.7.2013, at 1.17, Mike Abbott <michael.abbott@apple.com> wrote:
Attached please find a perl script which tests the CATENATE support in dovecot. I used this to test my CATENATE implementation a few years ago and it runs fine against dovecot in OS X Server. When run against dovecot-2.2.4 though it always fails or hangs, which in some cases means we interpreted RFCs differently and in other cases means it's finding bugs; both conditions are worthy of scrutiny. (It's random-number driven so every run is different.) A couple months ago I reported a few simple bugs which this script found and you fixed them; thanks. Then it started finding problems for which it's harder to isolate simple reproducible test cases. Vacations and other work interceded but now Apple is pleased to give you the script itself to allow you to iterate faster.
Thanks. I finally tested this and fixed various bugs: http://hg.dovecot.org/dovecot-2.2/rev/3c2e1879fdf6
There is still one difference between what the script expects and what Dovecot does:
x append inbox catenate (url ;invalid; url {5}
Dovecot replies with "+ OK" because it wants to read all the URLs into memory before parsing them, while catenate.pl expects an error message immediately. It doesn't look like this could be easily changed in Dovecot.
x append inbox catenate (url ;invalid; url {5}
Dovecot replies with "+ OK" because it wants to read all the URLs into memory before parsing them, while catenate.pl expects an error message immediately.
I see that Example 4 in Appendix A of RFC 4469 explicitly allows both models. Here's a patch to catenate.pl to expect dovecot-2.2's behavior.
participants (3)
-
Ed W
-
Mike Abbott
-
Timo Sirainen