https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ffd0ab39b577995a5c5208ace9a5146bddd20dee

commit ffd0ab39b577995a5c5208ace9a5146bddd20dee
Author:     Serge Gautherie <32623169+sergegauthe...@users.noreply.github.com>
AuthorDate: Fri May 15 15:45:35 2020 +0200
Commit:     GitHub <nore...@github.com>
CommitDate: Fri May 15 15:45:35 2020 +0200

    [WS2_32_APITEST:WSAASYNC] Fix and improve some tests. ROSTESTS-317 (#1132)
    
    - Add getsockname() addr_con_loc looping case.
    Fix intermittent failure on Windows (NT <= 6.0):
    "WSAAsync.c:232: Test failed: ERROR: getsockname function wrong addr, 
expected 100007f returned 0"
    
    ROSTESTS-317
    
    - Improve select() ServerSocket looping case.
    Visible on Windows (NT >= 6.1).
---
 modules/rostests/apitests/ws2_32/WSAAsync.c | 44 +++++++++++++++++++++++++----
 1 file changed, 38 insertions(+), 6 deletions(-)

diff --git a/modules/rostests/apitests/ws2_32/WSAAsync.c 
b/modules/rostests/apitests/ws2_32/WSAAsync.c
index 400cba8b52a..0850d8fe321 100644
--- a/modules/rostests/apitests/ws2_32/WSAAsync.c
+++ b/modules/rostests/apitests/ws2_32/WSAAsync.c
@@ -10,6 +10,7 @@
 #define SVR_PORT 5000
 #define WAIT_TIMEOUT_ 10000
 #define EXIT_FLAGS (FD_ACCEPT|FD_CONNECT)
+#define MAX_LOOPCOUNT 9u
 
 START_TEST(WSAAsync)
 {
@@ -36,6 +37,8 @@ START_TEST(WSAAsync)
     struct fd_set select_efds;
     struct timeval timeval;
     BOOL ConnectSent = FALSE;
+    unsigned int Addr_con_locLoopCount = 0,
+                 ServerSocketLoopCount = 0;
 
     if (WSAStartup(MAKEWORD(2, 2), &WsaData) != 0)
     {
@@ -124,7 +127,7 @@ START_TEST(WSAAsync)
         if (dwWait != WAIT_OBJECT_0 && // server socket event
             dwWait != WAIT_OBJECT_0+1) // client socket event
         {
-            ok(0, "Unknown event received %ld\n", dwWait);
+            ok(FALSE, "Unknown event received %lu\n", dwWait);
             skip("ERROR: Connection timeout\n");
             break;
         }
@@ -227,12 +230,27 @@ START_TEST(WSAAsync)
         else
         {
             if (nSockNameRes != 0)
-                ok(0, "ERROR: getsockname function failed, expected %d error 
%d\n", 0, nSockNameRes);
+                ok(FALSE, "ERROR: getsockname function failed, expected 0 
error %d\n", nSockNameRes);
             if (len != sizeof(addr_con_loc))
-                ok(0, "ERROR: getsockname function wrong size, expected %d 
returned %d\n", sizeof(addr_con_loc), len);
-            // FIXME: fails on WHS testbot
-            //if (addr_con_loc.sin_addr.s_addr != 
server_addr_in.sin_addr.s_addr)
-            //    ok(0, "ERROR: getsockname function wrong addr, expected %lx 
returned %lx\n", server_addr_in.sin_addr.s_addr, addr_con_loc.sin_addr.s_addr);
+                ok(FALSE, "ERROR: getsockname function wrong size, expected 
%Iu returned %d\n", sizeof(addr_con_loc), len);
+
+            if (addr_con_loc.sin_addr.s_addr == 0ul)
+            {
+                if (++Addr_con_locLoopCount >= MAX_LOOPCOUNT)
+                {
+                    ok(FALSE, "Giving up, on getsockname() (%u/%u), as 
addr_con_loc is not set yet\n",
+                       Addr_con_locLoopCount, MAX_LOOPCOUNT);
+                    goto done;
+                }
+
+                trace("Looping, for getsockname() (%u/%u), as addr_con_loc is 
not set yet\n",
+                      Addr_con_locLoopCount, MAX_LOOPCOUNT);
+                Sleep(1);
+                continue;
+            }
+
+            if (addr_con_loc.sin_addr.s_addr != server_addr_in.sin_addr.s_addr)
+                ok(FALSE, "ERROR: getsockname function wrong addr, expected 
%08lx returned %08lx\n", server_addr_in.sin_addr.s_addr, 
addr_con_loc.sin_addr.s_addr);
         }
         if ((dwFlags & FD_ACCEPT) != 0)
         {// client connected
@@ -281,6 +299,20 @@ START_TEST(WSAAsync)
                     ok(sockaccept != INVALID_SOCKET, "ERROR: Connection accept 
function failed, error %d\n", WSAGetLastError());
                     dwFlags |= FD_ACCEPT;
                 }
+                else
+                {
+                    if (++ServerSocketLoopCount >= MAX_LOOPCOUNT)
+                    {
+                        ok(FALSE, "Giving up, on select() (%u/%u), as 
ServerSocket is not readable yet\n",
+                           ServerSocketLoopCount, MAX_LOOPCOUNT);
+                        goto done;
+                    }
+
+                    trace("Looping, for select() (%u/%u), as ServerSocket is 
not readable yet\n",
+                          ServerSocketLoopCount, MAX_LOOPCOUNT);
+                    Sleep(1);
+                    continue;
+                }
             }
         }
     }

Reply via email to