IMAP Tester
imaptest was originally written for stress testing [http://www.dovecot.org/ Dovecot] IMAP server. Its primary testing method is still stress testing, but now it also parses the incoming IMAP replies and complains if anything looks broken.
Compiling
- Download and compile Dovecot v1.1 sources. imaptest uses its library functions.
Get the latest beta from http://dovecot.org/releases/1.1/beta/
Compiling goes the usual way: ./configure && make (there's no need for make install)
Download http://www.dovecot.org/tools/imaptest.c to Dovecot sources' root directory (i.e. where the configure script exists)
- imaptest's header comment shows the compile command for gcc, use it or something similar.
You may want to modify the default configuration from #defines at the top of the file. This isn't required, but if you run imaptest often this way you don't have to give the same parameters every time.
Running
The most important parameters (and their defaults) are:
- host=127.0.0.1: Host name/IP address where to connect.
- port=143: Port what to use.
user=tss: Username template. You can use multiple random users and domains by giving %d in the template. So for example user%d returns user1..user100 and user%d@domain%d.org returns user1..100@domain1..100.org. The 1..100 range is hardcoded to the binary. You can change them from USER_RAND and DOMAIN_RAND defines.
- password=pass: Password to use for all users. There's currently no way to use different passwords for different users.
- mbox=/home/tss/mail/dovecot-crlf: Path to mbox file where to append messages from. See below for how this is used.
Other useful parameters include:
- clients=10: Number of simultaneous client connections to use.
- secs=n: Run imaptest n seconds and then exit.
- box=INBOX: Mailbox to use for testing. INBOX is the default.
- copybox=n: When testing COPY command, this specifies the destination mailbox.
- seed=n: Seed to use for random generator. Setting this to some specific value makes repeated benchmarks a bit more reliable, because the used commands should be the same then.
- disconnect_quit: If a client gets disconnected, quit. Use logout=0 parameter with this one. This is useful when debugging some problem in the server.
- no_pipelining: Don't send multiple commands at once to server.
Selecting what to test:
<state>=<probability>[,<probability2>]: State probabilities to use. See below.
- checkpoint=n: Run a checkpoint every n seconds. See below.
- random: Switch randomly between states.
- no_tracking: Don't track and complain about IMAP state. Makes it use a bit less CPU.