The Mozilla
Organization
At A Glance
Feedback
Get Involved
Newsgroups
License Terms
Newsbot
Developer Docs
Roadmap
Projects
Ports
Module Owners
Hacking
Get the Source
Build It
Testing
Download
Bugzilla
Bug Writing
Tools
View Source
Tree Status
New Checkins
Submit A Bug
FAQ
Search

Feature Test Spec

5.0 Project (Sea-Monkey)
Mail and News Component
IMAP: Interoperability
Section: Microsoft Exchange Server

Written by: Stacey Curtis

Note: many of the Exchange-specific features of this test plan will be documented during testing.

References:
UI Specification: TBD
Other:
To see the main page for the IMAP interoperability test plan, see sea-mn-imap-interop.html.
See the mailnewsqa test accounts page for a listing of test servers (servers are internal to Netscape only).
Approx. number of test cases: 154



Description: This test plan includes test cases for IMAP functionalities of the mail5 client while running against the Microsoft Exchange IMAP server. Details of the test plan relevant only to Exchange, and not to all other types of servers, are marked in red.

This plan is broken down into modules containing specific IMAP command execution tests and more complex scenarios.

Tests for these commands may be written later (if we decide to support them):
KERBEROS_V4, GSSAPI, and S_KEY authentication mechanisms, LISTRIGHTS, MYRIGHTS, SETQUOTA, GETQUOTA, GETQUOTAROOT,

Support for functionalities that use the following commands has been dropped:
SETACL, DELETEACL, GETACL

I don't believe we ever used:
CLOSE, EXAMINE, STATUS

Some basic scenarios to make sure are included in the "scenario" test plan:
Upgrades from previous versions of Communicator
Stopping operations in process
Test Cases for LOGIN/AUTHENTICATE
Notes
Expected Outcome (if not obvious)
1 Correct username, correct password . Success (IMAP log shows LOGIN OK)
2 Correct username, incorrect password . Appropriate error message
3 Incorrect username . Appropriate error message
4 User is already logged in via another IMAP client . Success
5 Password is remembered by client . Success
6 Server is the only server the user has set up . Success
7 Server is one of many the user has set up (not the first one) Password is not remembered for this test. Success
8 Server is one of many the user has set up (not the first one) and password is remembered . Success
9 Login is cancelled before the username and password are entered (if there is such an option in the UI) UI TBD An attempted cancellation should drop the connection to the server.
10 Login when the user has an IMAP subdirectory set up e.g., a /home/tester01/mail directory on the server, specified in the preferences Success
11 Login when the server is down . Appropriate timeout, appropriate error message (note and confirm)
12 Login with any other forms of authentication supported in 5.0 Authentication forms TBD. .

. Test Cases for CAPABILITY
Notes
Expected Outcome (if not obvious)
1 Confirm that on initial connect, a CAPABILITY command is issued by the client Check the IMAP log for the CAPABILITY command, and its response from the server. Success (IMAP log shows CAPABILITY listing)
2 Respect lack of NAMESPACE response Don't ask for namespaces if the server has told us they don't support namespaces. If the server has not returned "NAMESPACE" in their reply, we don't follow up with a "namespace" command shortly after connecting.

. Test Cases for SELECT / initial FETCH (fetch flags, headers)
Notes
Expected Outcome (if not obvious)
1 Inbox To the user, selecting is performed by clicking on a folder. The IMAP log will show the client running an URL, e.g.,

URL: Loading IMAP://tintin?select>/INBOX>.

(This test case will actually test SELECT and several different forms of FETCH executed by that URL.)

When a user selects a folder, the server will return the following information:

8 select "INBOX"
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $MDNSent)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $MDNSent \*)]
* 4 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 904023909]
8 OK [READ-WRITE] Completed

Being, in order, a listing of the defined types of flag for that folder; a listing of the types of permanent flag that are possible; how many messages exist; how many of those messages are recent (ones the user has not yet seen the headers of); the UIDVALIDITY (must be sent by the server for all FETCH responses, but we don't do anything with it to the best of my knowledge; and the success of selecting the folder in, hopefully, read-write mode.

After the Select returns OK, we do a
UID fetch 1* (FLAGS), which causes the server to return the flags and UIDs for each of the messages in that folder.

Next, we do a fetch for all of the headers for all of the messages in the folder, in order to have to information to populate the thread pane. (However, if the summary file already contains that information for some of the messages, the request to the server is only made for those messages that are unknown to it, as in
"11 UID fetch 11564:11572 (UID RFC822.SIZE FLAGS BODY.PEEK[HEADER.FIELDS (From To Cc Subject Date Priority
X-Priority Message-ID References Newsgroups Return-Receipt-To Disposition-Notification-To)])"

Finally (if the first message is to be automatically loaded upon folder selection), we fetch the body for the first message, as in
" 19 UID fetch 11550 (XSENDER UID RFC822.SIZE BODY[])"

When testing, confirm that all of the headers and flags are displayed in the UI as expected.

2 Sent folder If not specified, the folder named is presumed to be in a subscribed state .
3 Trash folder . .
4 Drafts folder . .
5 Templates folder . .
6 Generic top-level folder . .
7 NoSelect top-level folder NoSelect folders shouldn't be selectable .
8 Second-level folder . .
9 Subscribed folder . .
10 Unsubscribed folder Not yet defined whether we'll be displaying unsubscribed folders .
11 Top-level folder in a specified IMAP directory (off of the user's home directory on the server) . .
12 Subfolder in a specified IMAP directory . .
13 Subfolder of Inbox . .
14 Folder 20 levels deep (Stress) .
15 Subscribed subfolder where parent folder isn't subscribed . .
16 Folder that has been deleted by another client that has a concurrent session open to this account (Stress) Appropriate error message (folder does not exist). We may choose to remove this folder from the display immediately, or at the next restart. That issue is covered more specifically in the DELETE section.
17 Empty folder . All expected communications between server and folder should appear in the IMAP log, though there are no messages.
18 Folder containing 10k messages (Stress) Note time taken. Confirm appropriateness of behavior w/development.
19 Folder containing 500 message-containing subfolders. (Stress) .
20 Folder that is selected by another client that has a concurrent session open to this folder (Stress) No error; I think the folder will be opened as read-only, though, not read-write. Check log, try to delete message while folder is selected to see if its contents can be modified. Confirm appropriateness of behavior w/development.

. Test Cases for FETCH (body)
Notes
Expected Outcome (if not obvious)
1 Plain text message Fetching a message body is also initiated with an URL. This one looks like:

URL: Loading IMAP://tintin?fetch>UID>/INBOX>11501

The IMAP log will show a line that looks like:

12 UID fetch 11501 (XSENDER UID RFC822.SIZE BODY[]. At the end of the message, there will appear something like:

"tintin:S-INBOX:STREAM:CLOSE: Normal Message End Download Stream
STREAM: Normal End Message Download Stream Event
12 OK Completed"

Make sure there are no errors in the log, and that the message displays with all of its parts in the message view pane.

2 HTML message . .
3 Message with vcard . .
4 Message with sig . .
5 Signed message . .
6 Encrypted message . .
7 Signed and encrypted message . .
8 Message with large attachment (5MB) (Stress) Some mail servers are set up to limit the size of attachments that it routes. If this test fails, first check the server settings to see if it has imposed a limit. .
9 Message with attached web page . .
10 Message with base64 attachment I don't think the form of encoding would make any difference to FETCHING it, but it can't hurt to include these tests; it might turn up other problems, anyway. .
11 Message with uuencoded attachment . .
12 Message with extremely long subject line (300 chars?) . .
13 Message with extremely long to: list . .
14 Message with no subject . .
15 Message with bccs . .
16 (rows left to add cases related to various TBD preferences that may affect fetching) . .

. Test Cases for FETCH (biff)
Notes
Expected Outcome (if not obvious)
1 You've got mail! When we check for new mail, we do this by trying to fetch any messages with a message ID of the next expected one and higher. An example that shows the client finding out about one new message, then asking for its headers:

21 UID fetch 11573:* (FLAGS)
* 14 FETCH (FLAGS (\Recent) UID 11573)
21 OK Completed
22 UID fetch 11573 (UID RFC822.SIZE FLAGS BODY.PEEK[HEADER.FIELDS (From To Cc Subject Date Priority X-Priority Message-ID References Newsgroups Return-Receipt-To Disposition-Notification-To)])

2 No new mail. . An example that shows the client finding out that there are no new messages. The server tells us that the last message is the one we already know about:

24 UID fetch 11574:* (FLAGS)
* 14 FETCH (FLAGS (\Recent) UID 11573)
24 OK Completed

3 Multiple new messages . Example follows. Note the format of the message header fetch for multiple UIDs.
30 UID fetch 11615:* (FLAGS)
* 9 FETCH (FLAGS (\Recent) UID 11615)
* 10 FETCH (FLAGS (\Recent) UID 11616)
* 11 FETCH (FLAGS (\Recent) UID 11617)
30 OK Completed
31 UID fetch 11615:11617(UID RFC822.SIZE FLAGS BODY.PEEK[HEADER.FIELDS (From To Cc Subject Date Priority X-Priority Message-ID References Newsgroups Return-Receipt-To Disposition-Notification-To)])
4 A new message that was already marked read by another client with a concurrent connection to the account . [get log example...pretty much the same, except there won't be a \Recent flag.]

. Test Cases for STORE
Notes
Expected Outcome (if not obvious)
1 Add \Answered flag Store is used to add flags to a message.
This flag can be added by responding to a message. It's also initiated with an URL, such as
URL: Loading IMAP://tintin?addmsgflags>UID>/INBOX>11602>2
The next time the folder is selected, it should show an /Answered flag with the message.

The actual store will look something like this:

20 uid store 11602 +Flags (\Answered)
* 5 FETCH (FLAGS (\Recent \Answered \Seen) UID 11602)
20 OK Completed

IMHO, for all of these STORE tests, it's best to do a full restart when checking them...that will show not only that the flag was added, but that the addition successfully carries over between sessions. [note: check temp flag info in RFC]

2 Add \Flagged This flag can be added by flagging a message. .
3 Add \Draft [check] .
4 Add \Deleted This flag can be added by deleting a message with either the IMAP or move-to-trash delete models. If mail5 automatically expunges at exit, permanence of this flag may not be able to be checked after a restart.
5 Add \Seen This flag can be added by displaying a message. .
6 Add $Forwarded This flag can be added by forwarding a message. .
7 Add $MDNSent This flag can be added by responding to a message.
8 Remove \Flagged Use whatever UI mech is available to unflag. Remove flags actions are just like flag additions, except for the value of the sign:

20 uid store 11602 -Flags (\Flagged)

9 Remove \Deleted Use undo, assuming there is one in the UI. .
10 Remove \Seen Mark message as unread .
11 Add multiple flags to the same message in the same session There's no reason you couldn't add them all in a session. All flags should be successfully added.
12 Remove multiple flags in the same session. All of the removable flags should be able to be deleted in a given session. .

. Test Cases for UID
Notes
Expected Outcome (if not obvious)
1 . Test cases for the UID command are inherent in the tests written for FETCH, STORE, COPY, and SEARCH test cases. .

. Test Cases for LIST
Notes
Expected Outcome (if not obvious)
1 LIST a specific folder The LIST command returns information about a folder or about a subset of folders, based on what was passed in as a parameter. In its simplest form, we ask it about a particular folder.

LISTing the INBOX happens every time we connect, near the beginning of the log.

7 list "" "INBOX"

The server passes back information about the folder's name attributes, hierarchy delimiter, and name:

* LIST (\NoInferiors) "/" INBOX
7 OK Completed

2 List a subfolder of a regular folder . 5 list "" "personal/sub_of_personal"

, followed by the server response:

* LIST (\HasNoChildren) "/" personal/sub_of_personal
5 OK Completed

3 LIST a /NoSelect folder Have a /NoSelect folder in your top-level hierarchy. Collapse and expand your server hierarchy (if such an action is supported by the UI. The /NoSelect folder will be LISTed. 6 list "" "noselect"

No detailed information will be returned, only the "OK."

6 OK Completed

4 LIST a subfolder of a /NoSelect folder Create a folder and subfolder simultaneously, i.e., "folderone/foldertwo". The higher-level one will be created as a /NoSelect folder. Immediately after the subfolder is created, it will be LISTed.

5 list "" "noselect/subfolder"

Same type of result as for a subfolder of a regular folder:

* LIST (\HasNoChildren) "/" noselect/subfolder
5 OK Completed

5 LIST with subscription turned off This list will be preceded by the URL "URL: Loading IMAP://[servername]?discoverallboxes"

18 list "" "%"

This will return information for all top-level folders, then an OK.

Immediatly after that, we'll request information for the next level of the hierarchy down:

19 list "" "%/%", which will cause to be returned all folder information for the second level of folders in the hierarchy.

6 LIST when expanding a folder in the subscribe window [subscribe window may be totally different in mail5]

Begin with URL, e.g.,:

URL: Loading IMAP://tintin?discoverlevelchildren>2>/one

Issue command like:

14 list "" "one/%/%" (get info on items two levels down)
[server responds with children 2 levels down, if any]


Test Cases for LSUB
Notes
Expected Outcome (if not obvious)
1 Initial LSUB on connection to an account LSUB shows which folders are subscribed to by the user. It shouldn't matter if the folder was subscribed to by any particular client; the folder is either subscribed or it's not. 5 lsub "" "*"

followed by the server's list of all subscribed mailboxes.

2 Subscription turned off Users might choose this setting. No LSUBs should appear in the log.
3 LSUB when subscribe window is opened. [subscribe window may be totally different in mail5]

We begin with the URL:

URL: Loading IMAP://tintin?discoverallandsubscribedboxes

8 lsub "" "*"
[server responds with list of all subscribed]
9 list "" "%"
[server responds with list of all top-level folders]
10 list "" "%/%"
[server responds with list of all second-level folders]

. Test Cases for CREATE
Notes
Expected Outcome (if not obvious)
1 CREATE single top-level folder . Folder should be created and subscribed.
2 CREATE container folder & subfolder simultaneously . Folders should be created, and the non-NoSelect folder should be subscribed.
3 CREATE folder with subscription turned off I think I remember some controversy over this. Double-check bug database. Folder should not be subscribed?
4 CREATE subfolder of a folder that already contains messages . Subfolder should be created and subscribed.
5 CREATE folder 20 levels deep . Folder should be created and subscribed.

. Test Cases for DELETE
Notes
Expected Outcome (if not obvious)
1 DELETE single top-level folder when the folder is selected This section is for deletion of folders. Deletion of messages is handled through the use of the /Deleted flag (see STORE section of test) Successful delete.
2 DELETE container folder & subfolder simultaneously when the subfolder is selected . Successful delete.
3 DELETE subfolder of a folder that already contains messages when the folder is selected . Successful delete.
4 DELETE folder 20 levels deep . Successful delete.
5 DELETE parent folder with multiple subfolders . Successful delete.
6 DELETE subscribed folder . Successful delete.
7 DELETE unsubscribed folder Subscription will probably have to be turned off in order to see the folder, but that's really a UI issue, and TBD. Successful delete.

Test Cases for RENAME
Notes
Expected Outcome (if not obvious)
1 RENAME single top-level folder when the folder is selected UI TBD Successful rename.
2 RENAME parent folder containing a subfolder with messages . Successful rename.
3 RENAME parent folder with multiple subfolders . Successful rename.
4 RENAME subfolder . Successful rename.
5 RENAME a subscribed folder . Successful rename.
6 RENAME an unsubscribed folder Subscription will probably have to be turned off in order to see the folder, but that's really a UI issue, and TBD. Successful rename.
7 RENAME a folder 20 levels deep . Successful rename.

Test Cases for APPEND
Notes
Expected Outcome (if not obvious)
1 APPEND message to INBOX Ensure that flags, time, date are preserved. Successful append.
2 APPEND message to non-inbox, top-level folder . Successful append.
3 APPEND message to subfolder of NoSelect folder . Successful append.
4 APPEND message to subfolder of dual-use folder . Successful append.
5 APPEND message to NoSelect folder UI may not allow attempting this. Appropriate error message.
6 APPEND large message (5MB) to a folder. . Successful append.
7 APPEND message to folder 20 levels deep. . Successful append.
8 APPEND message to folder from another server . Successful append.

. Test Cases for NOOP
Notes
Expected Outcome (if not obvious)
1 . Noop is performed to synch mailbox states; it doesn't do anything, though other IMAP commands may be spurred by it. There isn't much to test with it except to check and make sure that we're not using them excessively (which is a subjective call). If there are a lot of noops in the log, check with a developer. .

. Test Cases for CHECK
Notes
Expected Outcome (if not obvious)
1 . This command is similar to NOOP. I'm not positive why we use it...it might be related to synching mailbox state to resolve issues related to multiple clients using one account. Will add test cases if/when it becomes necessary. In any case, it's a housekeeping command not related to the success or failure of performing the manual actions that the user initiates. .

. Test Cases for EXPUNGE
Notes
Expected Outcome (if not obvious)
1 Expunge automatically; threshold-triggered This command purges folders of deleted messages.

This test case focuses on the automatic purge of every folder that occurs when a folder is opened and it has more than the allowed limit of deleted messages.

The folder EXPUNGE is done, then the folder is normally selected and the first message loaded.
2 Expunge inbox at exit. This may be a preference in mail5. If it's a settable preference, check both positive and negative. The INBOX is expunged at application exit.
3 Expunge manually. There may be some sort of "expunge/compress/compact folder" menu item. It may be context-sensitive, allowing more than one folder to be selected when it is used. Test whatever makes sense when the UI is developed. .
4 Expunge a folder while another client has a connection to it . Successful expunge. Other client should notice on next NOOP, CHECK, or biff (FETCH)
5 Empty trash should expunge trash folder Only relevant for trash delete model Successful expunge.
6 Empty trash while trash folder is selected . Successful expunge.

. Test Cases for COPY
Notes
Expected Outcome (if not obvious)
1 COPY message from one top-level folder to another Ensure that flags, time, date are preserved. Successful copy.
2 COPY message into a subfolder of the source folder . Successful copy.
3 COPY message into the parent folder of the source folder . Successful copy.
4 COPY message into a folder 20 levels deep . Successful copy.
5 COPY message into special folders (inbox, trash, sent, templates, drafts) Successful copy.
6 COPY message from one IMAP server to another . Successful copy.
7 COPY message to nonexistent folder Delete the folder with another client attached to the account. Appropriate error message.
8 COPY large message (5MB) from one folder to another . Successful copy.

. Test Cases for SUBSCRIBE
Notes
Expected Outcome (if not obvious)
1 Subscribe to a top-level folder that is currently unsubscribed Many of the possibilities of this component will be defined by the yet to-be-designed UI .
2 Try to subscribe to a NoSelect folder . Should not be possible
3 Subscribe to a subfolder when the parent folder is subscribed . .
4 Subscribe to a subfolder when the parent folder is not subscribed . .
5 Subscribe to a folder three levels down when all parent folders are not subscribed . .
6 Subscribe to a folder twenty levels deep . .
7 Subscribe to a folder when subscription is turned off This may or may not be possible .
8 Subscribe to a folder (when subscription is turned off) and the folder is currently selected . .
9 Subscribe to an empty folder . .
10 Subscribe to a folder with 10k messages. . .

. Test Cases for UNSUBSCRIBE
Notes
Expected Outcome (if not obvious)
1 Unsubscribe from a top-level folder that is currently subscribed . .
2 Try to unsubscribe from a NoSelect folder . Shouldn't be possible
3 Unsubscribe from a subfolder when the parent folder is subscribed . .
4 Unsubscribe from a subfolder when the parent folder is not subscribed . .
5 Unsubscribe from a folder three levels down when all parent folders are not subscribed . .
6 Unsubscribe from a folder twenty levels deep . .
7 Unsubscribe from a folder when subscription is turned off . .
8 Unsubscribe from a folder when the folder is currently selected . .
9 Unsubscribe from an empty folder . .
10 Unsubscribe from a folder with 10k messages . .

. Test Cases for SEARCH
Notes
Expected Outcome (if not obvious)
1 SEARCH one folder Many of these test cases will be influenced by the formation of the UI. .
2 SEARCH multiple folders (in a hierarchy) . .
3 SEARCH a NoSelect folder . Shouldn't be possible
4 SEARCH a folder twenty levels deep . .
5 SEARCH a folder with 10k messages . .
6 SEARCH an unsubscribed folder May need to have subscription turned off to do this .
7 SEARCH for non-ascii characters .

. Test Cases for LOGOUT
Notes
Expected Outcome (if not obvious)
1 At application exit Logging out will occur at the end of a session and whenever a connection to an inbox is intentionally stopped, as when the user doesn't want to wait for a large message to finish downloading, and presses Stop.

This test case is to make sure that we logout when the application exits. Check the end of the IMAP log.

Last lines should be something like:

HOST?:S-INBOX:NET:WR: xxxx logout
mozilla IMAP stdout: HOST?:S-INBOX:CONTROL:From TellThreadToDie: LOGOUT

2 During folder load Press Stop while a folder's headers are downloading (after selecting it, before all of the threads have displayed. This may be easiest to do the first time loading a folder after filing a lot of messages to it, like Trash, or by exiting, deleting the summary file, restarting, then selecting the folder. INTERRUPT Entered
tintin:S-Trash:NET:WR: xxxx logout

. Special Tests
Notes
Expected Outcome (if not obvious)
1 Upgrade to mail5 with an account that had been used with a client that supports subscription, such as 4.5 No "subscription wizard" kind of thing has been designed yet for mail5. TBD
2 Upgrade to mail5 with an account that had been used with a client that does not support subscription, such as 4.0x. . TBD
3 Stop actions while they're being performed. Go through the test plan and try to interrupt every kind of action that's listed here. Some will probably be interruptable, and some more difficult to arrange. An understandable error message should appear.
4 Delete local summary files and start mail. . Mail should work fine, new summary files generated.
5 Use mail5 in a perfectly clean setup...no local mail files, brand new server account. . Mail should work fine.
6 Send and receive unusual-content mail. Include vcards, signed & encrypted mails, and mails with different attachment types. Mail should work fine.

Copyright © 1998-2000 The Mozilla Organization.
Last modified March 31, 1999.