ws2_32/tests Added tests for sending zero byte junks
Wolfgang Schwotzer
wolfgang.schwotzer at gmx.net
Sat Aug 14 04:21:24 CDT 2010
---
dlls/ws2_32/tests/sock.c | 111 ++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 102 insertions(+), 9 deletions(-)
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index b2a3153..c443a4c 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -29,7 +29,7 @@
#include "wine/test.h"
#define MAX_CLIENTS 4 /* Max number of clients */
-#define NUM_TESTS 4 /* Number of tests performed */
+#define NUM_TESTS 8 /* Number of tests performed */
#define FIRST_CHAR 'A' /* First character in transferred pattern */
#define BIND_SLEEP 10 /* seconds to wait between attempts to bind() */
#define BIND_TRIES 6 /* Number of bind() attempts */
@@ -523,12 +523,18 @@ static VOID WINAPI select_server ( server_params *par )
if ( FD_ISSET( mem->sock[i].s, &fds_recv ) ) {
n_set += 1;
- if ( mem->sock[i].n_recvd < n_expected ) {
+ if ( mem->sock[i].n_recvd < n_expected || ( n_expected == 0 ) ) {
/* Receive data & check it */
n_recvd = recv ( mem->sock[i].s, mem->sock[i].buf + mem->sock[i].n_recvd, min ( n_expected - mem->sock[i].n_recvd, par->buflen ), 0 );
ok ( n_recvd != SOCKET_ERROR, "select_server (%x): error in recv(): %d\n", id, WSAGetLastError() );
mem->sock[i].n_recvd += n_recvd;
+ if (n_recvd == 0 && ( n_expected == 0 ) ) {
+ /* ONLY for zero byte chunks: CLR the open send socket */
+ trace( "select_server (%x): socket closed by client\n", id );
+ FD_CLR ( mem->sock[i].s, &fds_opensend );
+ }
+
if ( mem->sock[i].n_recvd == n_expected ) {
int pos = test_buffer ( mem->sock[i].buf, gen->chunk_size, gen->n_chunks );
ok ( pos == -1, "select_server (%x): test pattern error: %d\n", id, pos );
@@ -620,14 +626,17 @@ static VOID WINAPI simple_client ( client_params *par )
/* shutdown send direction */
wsa_ok ( shutdown ( mem->s, SD_SEND ), 0 ==, "simple_client (%x): shutdown failed: %d\n" );
- /* Receive data echoed back & check it */
- n_recvd = do_synchronous_recv ( mem->s, mem->recv_buf, n_expected, par->buflen );
- ok ( n_recvd == n_expected,
- "simple_client (%x): received less data than expected: %d of %d\n", id, n_recvd, n_expected );
+ if (n_expected > 0)
+ {
+ /* Receive data echoed back & check it */
+ n_recvd = do_synchronous_recv ( mem->s, mem->recv_buf, n_expected, par->buflen );
+ ok ( n_recvd == n_expected,
+ "simple_client (%x): received less data than expected: %d of %d\n", id, n_recvd, n_expected );
- /* check data */
- pos = test_buffer ( mem->recv_buf, gen->chunk_size, gen->n_chunks );
- ok ( pos == -1, "simple_client (%x): test pattern error: %d\n", id, pos);
+ /* check data */
+ pos = test_buffer ( mem->recv_buf, gen->chunk_size, gen->n_chunks );
+ ok ( pos == -1, "simple_client (%x): test pattern error: %d\n", id, pos);
+ }
/* cleanup */
read_zero_bytes ( mem->s );
@@ -1176,6 +1185,90 @@ static test_setup tests [NUM_TESTS] =
0,
128
}
+ },
+ /* Test 4: synchronous client and server, zero byte chunks */
+ {
+ {
+ STD_STREAM_SOCKET,
+ 0,
+ 16,
+ 2
+ },
+ simple_server,
+ {
+ NULL,
+ 0,
+ 64
+ },
+ simple_client,
+ {
+ NULL,
+ 0,
+ 128
+ }
+ },
+ /* Test 5: event-driven client, synchronous server, zero byte chunks */
+ {
+ {
+ STD_STREAM_SOCKET,
+ 0,
+ 16,
+ 2
+ },
+ simple_server,
+ {
+ NULL,
+ 0,
+ 64
+ },
+ event_client,
+ {
+ NULL,
+ WSA_FLAG_OVERLAPPED,
+ 128
+ }
+ },
+ /* Test 6: synchronous client, non-blocking server via select(), zero byte chunks */
+ {
+ {
+ STD_STREAM_SOCKET,
+ 0,
+ 16,
+ 2
+ },
+ select_server,
+ {
+ NULL,
+ 0,
+ 64
+ },
+ simple_client,
+ {
+ NULL,
+ 0,
+ 128
+ }
+ },
+ /* Test 7: synchronous mixed client and server, zero byte chunks */
+ {
+ {
+ STD_STREAM_SOCKET,
+ 0,
+ 16,
+ 2
+ },
+ simple_server,
+ {
+ NULL,
+ 0,
+ 64
+ },
+ simple_mixed_client,
+ {
+ NULL,
+ 0,
+ 128
+ }
}
};
--
1.6.3.3
--------------070207060500020406040803--
More information about the wine-patches
mailing list