Coding: I get the "Doh!" award. After an hour of trying to figure out why my little SMTP client library was failing on a test case against one of AOL's SMTP servers (btw, can anyone recommend any other mail servers with multi-line banner messages?), I went to bed. 10 minutes later, I jumped up, added a "\r" to my testcase commands, and discovered with much joy that I was an idiot (but that the testcase was working perfectly). ;-) Note to self: even if you think you remember the RFC, you probably don't.
Anyways, now that the client is basically done, I need to decide how I'm going to handle the relaying tests. I've got a few options, as I see it:
- Build all tests into the binary itself, and make the user rebuild every time they modify an existing test or add a new one. Easy, but I'm against this on elegance grounds.
- Build each test as a tiny shared library, and load/unload them on the fly as needed. Still fairly easy, but not as portable as I'd like. Still, this has the promise of adding and removing tests without rebuilding everything.
- Come up with a conversation specification file (ala expect, with a lot less functionality) and let people add/modify/remove tests without anything more complicated than a text editor. A little harder to get right, and fails KISS pretty badly.
I wonder if it's worth it to mess with anything more complicated than the first approach right now. Then there's the more important interface problem; from a command line, selecting multiple testing options will be a little ugly.
Hopefully I'll at least get something usable for the CVS tree by the end of the week.