-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Proposed Timeline
| Date | Weight | Project
|
| 2005-1-19 |
4% |
- Projects 0 and 1
- Install Linux (Fedora Core 3) on desktop and laptop.
- Download, build and install WINE.
|
| 2005-1-21 |
1% |
- Initial schedule
- Submit progress report to TA.
|
| 2005-2-2 |
5% |
- Finish project 2
- Research DLLs and choose one.
|
| 2005-2-11 |
7% |
- Design winsock conformance test.
- Determine common uses of DLL and pick 2-3 functions to test.
- Come up as many test cases as possible.
|
| 2005-2-18 |
6% |
- Get the expected results.
- Develop wine32 app with test cases and run it on Windows XP.
- Record all the outputs.
|
| 2005-3-4 |
7% |
- Run tests on Linux.
- Run the same tests on Linux.
- Compare the outputs.
|
| 2005-3-11 |
2% |
- Submit conformance test and bug report to Dan.
- Add more test cases if necessary and resubmit(repeat this process from here on).
|
| 2005-3-11 |
3% |
- Winsock conformance test demo.
|
| 2005-3-15 |
5% |
|
Incremental Progress
2005-01-19:
- Installed Fedora Core 3 on a desktop and laptop
- Downloaded, Installed, and Built WINE
- Successfully ran notepad.exe.so
2005-01-20:
- Began initial stages of Project 2
- Ran conformance test suite under WINE.
- Got more errors and "Test failed" cases than expected - debugging.
2005-01-21:
- Created initial schedule
- Submitted progress report to TA.
2005-01-28:
- Researched DLLs and chose Winsock DLL.
- Chose single thread, non-blocking I/O
2005-02-03:
- Ran conformance test. Didn't get the same results as Dan, but the errors seem to be unrelated to what we're doing. Here's the output of 'grep "Test failed" log | sed 's/:.*//' | uniq -c | sort':
13 generated.c
1 url.c
2 typelib.c
3 file.c
Logfile for conformance test (laptop):
conformance log
2005-02-11:
- Decided on which Winsock APIs to test. We are using the
following functions because they are fundamental for creating
the client/server Winsock model. We may decide to expand to
more interesting fucntions if we get a chance. We will be using
multi-threaded asynchronous connection using these APIs.
- int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
- SOCKET socket( int af, int type, int protocol );
- int bind( SOCKET s, const struct sockaddr* name, int namelen );
- int listen( SOCKET s, int backlog );
- SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen );
- int connect( SOCKET s, const struct sockaddr* name, int namelen );
- int send( SOCKET s, const char* buf, int len, int flags );
- int recv( SOCKET s, char* buf, int len, int flags );
Test cases for WSAStartup():
1. Request the following Winsock versions for WORD wVersionRequested:
a. 1.0
b. 1.1
c. 2.0
Using the different combinations, generate the error code
WSAVERNOTSUPPORTED, and proper version requests.
2. Pass in a bad pointer for lpWSAData, and generate WSAEFAULT error.
3. Remove the Windows Sockets DLL file to attempt to generate the
WSASYSNOTREADY error.
4. Instantiate two network operations to generate WSAEINPROGRESS
error and possibly the WSAEPROCLIM error.
5. Record multiple successful calls and verify return code 0.
Test cases for socket():
1 Success - return socket descriptor(no way to verify except that
it's != INVALID_SOCKET)
a. TCP
b. UDP
2. Fail - return INVALID_SOCKET
a. WAStartup was not called(or failed)
b. invalid address
c. no more socket descriptors(will try to implement but may not
be able to)
d. no more buffer(same as above)
e. invalid protocol
Test cases for bind():
1. Successful Bind
a. TCP
b. UDP
2. Error
a. return SOCKET_ERROR
i. invalud SOCKET descriptor
ii. invalid sockaddr struct
iii. invalid namelen
iv. unsuccessful WAStartup called
v. tried to open UDP when SO_BROADCAST is not enabled
vi. address is already bound to another process
vii. invalud address
viii. socket already bound to another address
ix. too many connections/not enough buffer -> not sure if this can be done yet
Test cases for listen():
1 success - return 0
a. TCP
b. UDP
2. fail - return SOCKET_ERROR
a. WAStartup not called successfully
b. socket's local address is already in use
c. socket not bound with bind()
d. socket is already connected
e. no more socket descriptors available
f. No more buffer space
g. invalid descriptor
Test cases for accept():
1. Success - returns a value of type SOCKET (descriptor for new socket)
a. TCP
b. UDP
2. Failure - returns a value of INVALID_SOCKET
a. Call before initialization, generating WSANOTINITIALISED error.
b. Use a small addrlen for WSAEFAULT error.
c. Call during a blocking sockets call to get WSAEINTR error.
d. Simulate network failure to get WSAENETDOWN error.
e. Use an invalid socket to generate WSAEOPNOTSUPP error.
f. Flood the buffer to generate WSAENOBUFS error.
Test cases for connect():
1. Success - 0 returned
a. TCP
b. UDP
2. Fail - SOCKET_ERROR returned
a. WAStartup not called successfully
b. socket's local address already in use
c. invalid address
d. invalud namelen
e. socket parameter is a listening socket
f. socket already connected
g. no buffer space
h. invalid descriptor
Test cases for send():
1. Success - returns number of bytes received(!= SOCKET_ERROR)
a. TCP
b. UDP
2. Failure
a. Pass invalid socket descriptor to generate WSAENOTSOCK error.
b. Call the fucntion before initialization to generate WSANOTINITIALIZED.
c. Create an extremely large input buffer to generate WSAEMSGIZE error.
d. Simulate network failure for errors WSAENETDOWN, WSAECONNRESET, WSETIMEDOUT
e. Call during blocking Windows call in progress to get WSAEINPROGRESS.
Test cases for recv():
1. Success - returns number of bytes received(!= SOCKET_ERROR)
a. TCP
b. UDP
for each try to test cases where you get 0 byte(connection closed) and non-0 bytes received
2. Fail - returns SOCKET_ERROR
a. WAStartup was not called successfullly
b. socket not connected
c. buf not allocated properly
d. invalid descriptor
e. socket was marked 'non-blocking' even though recv() will block
f. message was too large(truncated)
g. bind was not successfully called earlier
Test cases for WSAAsyncSelect?():
1. Success - returns 0
2. Fail - returns SOCKET_ERROR
a. WAStartup was not called successfullly
b. invalid socket
c. invalud handler
2005-02-18:
- The debugging phase is taking longer than expected, mainly because our
tests have to call 9 APIs, which is considerably more than Dan's
original suggestion of 2 or 3. We also underestimated the complexity of testing asynchronous I/O with
winsock, and have been trying to resolve asynchronous-specific API issues. Finally, we've spent some time trying to simulate inputs/environments for certain
tests cases that are not straight-forward (for example: network is not
ready; too many processes accessing a socket, etc)
We are currently proposing a schedule revision. We would like to extend our current milestone to next week due to the above issues. This will not impact our final submission since we have allocated almost two weeks at the end for debugging. Our goal is to be done with the Windows conformance code by early next week so that we can still maintain a generous buffer and stay ahead.
2005-02-22:
-
Finished programming client and server test apps in Visual Studio using asynchronous I/O. Currently the application sends out 100 bytes in 32 byte chunks.
2005-03-04:
-
Code ported successful on Linux. Fixed various warnings and errors.
-
Compared the test results.
to top