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