Differences between revisions 1 and 11 (spanning 10 versions)
Revision 1 as of 2008-02-28 05:30:19
Size: 1941
Editor: TimoSirainen
Comment:
Revision 11 as of 2008-03-03 05:46:41
Size: 3749
Editor: TimoSirainen
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= imaptest test configuration = = ImapTest Command/Reply Testing Configuration =
Line 3: Line 3:
The test file begins with a header, followed by an empty line and then a list of commands. The tests consist of two files in the test directory:

 * <name>
 * <name>.mbox

The test
file begins with a header, followed by an empty line and then a list of commands. Messages are appended to the test mailbox from the test.mbox file.
Line 11: Line 16:
 * state: nonauth, auth or selected. If selected is used, the mailbox is recreated and test messages are appended to it automatically. Default is selected.  * state: nonauth, auth, created, appended or selected. "auth" makes sure all test mailboxes are deleted before starting the test. "created" then creates the test mailbox. "appended" also appends all mails from the test mbox. "selected" finally selects the mailbox. Default is "selected".
Line 27: Line 32:
[<connection #>] OK|NO|BAD <command> {{{
[<connection #>] OK|NO|BAD|"" <command>
Line 29: Line 35:
}}}
Line 31: Line 38:
{{{
Line 33: Line 41:
OK|NO|BAD [<prefix>] OK|NO|BAD|"" [<prefix>]
}}}
Line 35: Line 44:
Connection number is used if there are more than one connection. The first way is faster to write, while the second allows matching reply's <prefix>. Connection number is used if there are more than one connection. The order of untagged replies doesn't matter. The first way is faster to write, while the second allows matching reply's <prefix>.
Line 64: Line 73:
$n where n is a number maps to sequences at the beginning of a command. These are useful when receiving EXPUNGEs from another session. For example:

{{{
1 ok expunge
2 ok uid fetch 3 flags
# server may send expunge before or after fetch - both match this test
* $2 expunge
* $3 fetch (uid 3 (flags ()))
}}}
Line 67: Line 86:

== Directives ==

$!directives can be used to alter list matching by placing them at the beginning of a list:

 * $!ordered : The element order in the list must match (default for most lists).
 * $!unordered : The element order in the list doesn't matter. Setting this also allows extra elements to be present.
 * $!unordered=n : Like $!unordered, but list consists of a chain of elements where each chain consists of n elements. For example with FETCH (uid 1 flags (\seen)) the FETCH list would use $!unordered=2 while the flags list would use $!unordered.
 * $!noextra : If $!unordered[=n] directive was used by default matching ignores extra elements. This requires that all elements must be matched.
 * $!extra : Reverse of $!noextra.
 * $!ignore=e : If $!noextra is used, allow an extra element e to exist in the list.

If a list has no explicit directives, defaults are used (separately for each list within same command):

 * n FETCH ($!unordered=2)
 * n FETCH (FLAGS ($!unordered $!noextra $!ignore=\recent))
 * LIST ($!unordered)
 * LSUB ($!unordered)
 * STATUS mailbox ($!unordered=2)

ImapTest Command/Reply Testing Configuration

The tests consist of two files in the test directory:

  • <name>

  • <name>.mbox

The test file begins with a header, followed by an empty line and then a list of commands. Messages are appended to the test mailbox from the test.mbox file.

The header contains "key: value" pairs. Allowed keys are:

  • capabilities: Space-separated list of capabilities required from the server for this test. If server doesn't have these capabilities, the test is skipped. (FIXME: Checking not done currently)
  • connections: Number of connections to use for executing this test. If using 2 or more connections, each command must begin with the connection number which is used for the command (1..n). Default is 1.
  • state: nonauth, auth, created, appended or selected. "auth" makes sure all test mailboxes are deleted before starting the test. "created" then creates the test mailbox. "appended" also appends all mails from the test mbox. "selected" finally selects the mailbox. Default is "selected".

For example:

capabilities: CHILDREN LIST-EXTENDED
connections: 2
state: auth

Commands

There are two ways to configure commands:

1)

[<connection #>] OK|NO|BAD|"" <command>
[* <tagged reply>] (0 or more)

2)

[<connection #> <command>
[* <tagged reply>] (0 or more)
OK|NO|BAD|"" [<prefix>]

Connection number is used if there are more than one connection. The order of untagged replies doesn't matter. The first way is faster to write, while the second allows matching reply's <prefix>.

For example:

# way 1)
ok select $mailbox
* 0 exists

# way 2)
select $mailbox
* 0 exists
1 ok [read-write]

Variables

Commands and replies can have $variables. If a variable doesn't have value when it's matched against server input, the variable is initialized from the server input. This allows doing this like:

ok fetch 1,2 uid
* 1 fetch (uid $uid1)
* 2 fetch (uid $uid2)

ok uid store $uid1,$uid2 flags \seen
* 1 fetch (uid $uid1 flags (\seen))
* 2 fetch (uid $uid2 flags (\seen))

$n where n is a number maps to sequences at the beginning of a command. These are useful when receiving EXPUNGEs from another session. For example:

1 ok expunge
2 ok uid fetch 3 flags
# server may send expunge before or after fetch - both match this test
* $2 expunge
* $3 fetch (uid 3 (flags ()))

There are also some predefined variables:

  • $mailbox: Mailbox used for testing. box command line parameter specifies this. The default is "imaptest".

Directives

$!directives can be used to alter list matching by placing them at the beginning of a list:

  • $!ordered : The element order in the list must match (default for most lists).
  • $!unordered : The element order in the list doesn't matter. Setting this also allows extra elements to be present.
  • $!unordered=n : Like $!unordered, but list consists of a chain of elements where each chain consists of n elements. For example with FETCH (uid 1 flags (\seen)) the FETCH list would use $!unordered=2 while the flags list would use $!unordered.
  • $!noextra : If $!unordered[=n] directive was used by default matching ignores extra elements. This requires that all elements must be matched.
  • $!extra : Reverse of $!noextra.
  • $!ignore=e : If $!noextra is used, allow an extra element e to exist in the list.

If a list has no explicit directives, defaults are used (separately for each list within same command):

  • n FETCH ($!unordered=2)
  • n FETCH (FLAGS ($!unordered $!noextra $!ignore=\recent))
  • LIST ($!unordered)
  • LSUB ($!unordered)
  • STATUS mailbox ($!unordered=2)

None: ImapTest/ScriptedTests (last edited 2023-11-07 21:12:13 by TimoSirainen)