Internet and Intranet Applications and Protocols

Assignment 2: POP3 Server Grading
Prof. Arthur P. Goldberg

Spring, 2004

Student _____________________________________  

Raw points ________ Days late / points off __________Final Total ___________

Summary

 

 

Possible

Total lost

% earned

% of assignment

Functionality

Automated

72

 

 

 

80

Hand-graded

15

 

 

Total

 

 

 

Code quality guidelines

 

15

 

 

 

15

Unit tests

100

 

 

 

5

 

Total

 

 

 

 

 

 

Functionality

Automated

Test

Points

Points lost

Total

72

 

Testing that commands given in the wrong state, or with bad formatting, are rejected.

 

 

 Sending STAT in the authorization state

1

 

 Sending a keyword that doesn't exist

1

 

 Sending another keyword that doesn't exist

1

 

 Sending LIST in the authorization state

1

 

 Sending RETR in the authorization state

1

 

 Sending DELE in the authorization state

1

 

 Sending NOOP in the authorization state

1

 

 Sending RSET in the authorization state

1

 

 Sending a nonexistent user; testing your security

1

 

 Logging in as 'test'

1

 

 Sending pass for 'test'

1

 

 Trying to log in in the transaction state

1

 

 Trying to send pass in the transaction state

1

 

 Sending a dele command with a tab instead of space

1

 

 Sending a retr command with a tab instead of space

1

 

 Sending dele using multiple spaces

1

 

 Sending retr using multiple spaces

1

 

 Sending the WOPR's query (invalid)

1

 

 

 

 

Testing that noop does not affect mailbox status.

 

 

 Test passed

1

 

 

 

 

Testing both forms of list command, and dele/rset/list interaction

 

 

 Logging in as Fred

1

 

 Sending pass for Fred

1

 

 Checking mailbox status (1 msg, 48 bytes)

1

 

 Checking mailbox listing

1

 

 Checking mailbox listing for message 1

1

 

 Deleting Fred's message

1

 

 Checking that Fred's mailbox is empty with STAT

1

 

 Undoing the deletion by issuing RSET

1

 

 Checking mailbox listing for message 1

1

 

 Closing session for fred

1

 

 

 

 

Testing that a deleted message, restored with rset, persists across sessions.

2

 

 

 

 

Testing that deleted messages remain gone across sessions.

2

 

 

 

 

Testing parsing of password. Both these logins should succeed

 

 

 Logging in as 'MRWEIRDPWD'

0

 

 Sending pass for 'MYWIERDPWD'

1

 

Logging in as 'MRWEIRDPWD2'

0

 

 Sending pass for 'MYWIERDPWD2'

1

 

 

 

 

Testing dele/list/rset consistency

 

 

 Checking status of mailbox (2 msgs, 75 bytes)

 

 

 Testing length of message 1

 

 

 Testing length of message 2

 

 

 Deleting message 1

 

 

 Checking mailbox status (1 msg, 61 bytes)

 

 

 Making sure a deleted message cannot be listed

2

 

 Testing that other messages are unaffected by deletion

2

 

 Resetting mailbox to undo deletion

2

 

 Checking status of mailbox (2 msgs, 75 bytes)

2

 

 Retrieving message 2

2

 

 Detected a byte-stuffed termination character

1

 

 Detected a byte-stuffed termination character

1

 

 Detected a byte-stuffed termination character

1

 

 Detected a byte-stuffed termination character

1

 

 

 

 

Trying to retrieve a large message, with long lines (but not too long)

 

 

 Retrieving message 1

1

 

 Detected a byte-stuffed termination character

1

 

 Retrieving message 2

1

 

 

 

 

Testing retrieval from a large mailbox

 

 

 Retrieving message 73

1

 

 Retrieving message 148

1

 

 Retrieving message 228

1

 

 Retrieving message 386

1

 

 Retrieving message 421

1

 

 Retrieving message 573

1

 

 Retrieving message 659

1

 

 Retrieving message 777

1

 

 Retrieving message 873

1

 

 Retrieving message 987

1

 

 

 

 

Testing the ability to have two concurrent users

 

 

 Completing login as fred

2

 

 Completing login as joe

2

 

 Issuing stat command as fred

2

 

 Issuing stat command as joe

2

 

 Closing fred's session

2

 

Hand-graded

This functionality was graded by reading your code.

 

Points

Points lost

Take the port number as a command line option.

1

 

The server should not respond to a command terminated with CR or LF only.

1

 

The server should handle concurrent logins by the same user.

2

 

The handler thread should actually quit when it receives a quit command.

1

 

Support the inactivity autologout timer.  The timer’s duration should be a command line parameter, which can override (violate) the 10 minute minimum.  The autologout timer actually ends the handler thread, and does not enter the update state.

3

 

The handler thread locks the mailbox before returning a response to the client.

1

 

The handler thread unlocks the mailbox on all paths out of the transaction state.

2

 

Implement a ‘trylock’ for maildrop contention management.

4

 

 

Code quality guidelines

See notes on your programs (e.g., ‘C4’ means the code would violate guideline C4).

 

Points

Points lost

C1. Semantics

Tested by functionality

 

C2. Simplicity

2

 

C3. Confined

1

 

C4. Perform

2

 

C5. Robust

2

 

C6. Non-repetitive

2

 

C7. Well Commented

2

 

C8. Layout

1

 

C9. Symbolic

1

 

C10. Resourceful

2

 

C11. Tested  

See unit tests

 

Total

 

Comments on comments:

Design choices should be documented (e.g. locking mechanism, mailbox design, timeout implementation).  Algorithm designs should be documented (e.g., how to implement readline, dele and rset implementation).

Should use JavaDoc.

Unit tests

Fraction of functionality that was unit tested ___________