Detlef Riekenberg : localspl/tests: Add tests for EnumPorts.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Oct 31 05:43:06 CST 2006


Module: wine
Branch: master
Commit: 74a09f90caaa85851bf18cb80c5b192eb28f661d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=74a09f90caaa85851bf18cb80c5b192eb28f661d

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Fri Oct 27 19:20:13 2006 +0200

localspl/tests: Add tests for EnumPorts.

---

 dlls/localspl/tests/localmon.c |   92 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 0 deletions(-)

diff --git a/dlls/localspl/tests/localmon.c b/dlls/localspl/tests/localmon.c
index d71fb64..8cacf31 100644
--- a/dlls/localspl/tests/localmon.c
+++ b/dlls/localspl/tests/localmon.c
@@ -59,6 +59,7 @@ static DWORD (WINAPI *pXcvDataPort)(HAND
 static BOOL  (WINAPI *pXcvClosePort)(HANDLE);
 
 static WCHAR emptyW[] = {0};
+static WCHAR invalid_serverW[] = {'\\','\\','i','n','v','a','l','i','d','_','s','e','r','v','e','r',0};
 static WCHAR Monitors_LocalPortW[] = { \
                                 'S','y','s','t','e','m','\\',
                                 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
@@ -69,6 +70,96 @@ static WCHAR Monitors_LocalPortW[] = { \
                                        
 /* ##### */
 
+static void test_EnumPorts(void)
+{
+    DWORD   res;
+    DWORD   level;
+    LPBYTE  buffer;
+    DWORD   cbBuf;
+    DWORD   pcbNeeded;
+    DWORD   pcReturned;
+
+    if (!pEnumPorts) return;
+
+    /* valid levels are 1 and 2 */
+    for(level = 0; level < 4; level++) {
+
+        cbBuf = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(NULL, level, NULL, 0, &cbBuf, &pcReturned);
+
+        /* use only a short test, when we test with an invalid level */
+        if(!level || (level > 2)) {
+            /* NT4 fails with ERROR_INVALID_LEVEL (as expected)
+               XP succeeds with ERROR_SUCCESS () */
+            ok( (cbBuf == 0) && (pcReturned == 0),
+                "(%d) returned %d with %d and %d, %d (expected 0, 0)\n",
+                level, res, GetLastError(), cbBuf, pcReturned);
+            continue;
+        }        
+
+        ok( !res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+            "(%d) returned %d with %d and %d, %d (expected '0' with " \
+            "ERROR_INSUFFICIENT_BUFFER)\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+
+        buffer = HeapAlloc(GetProcessHeap(), 0, cbBuf * 2);
+        if (buffer == NULL) continue;
+
+        pcbNeeded = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(NULL, level, buffer, cbBuf, &pcbNeeded, &pcReturned);
+        ok( res, "(%d) returned %d with %d and %d, %d (expected '!= 0')\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+        /* We can compare the returned Data with the Registry / "win.ini",[Ports] here */
+
+        pcbNeeded = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(NULL, level, buffer, cbBuf+1, &pcbNeeded, &pcReturned);
+        ok( res, "(%d) returned %d with %d and %d, %d (expected '!= 0')\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+
+        pcbNeeded = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(NULL, level, buffer, cbBuf-1, &pcbNeeded, &pcReturned);
+        ok( !res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+            "(%d) returned %d with %d and %d, %d (expected '0' with " \
+            "ERROR_INSUFFICIENT_BUFFER)\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+
+#if 0
+        /* The following tests crash this app with native localmon/localspl */
+        res = pEnumPorts(NULL, level, NULL, cbBuf, &pcbNeeded, &pcReturned);
+        res = pEnumPorts(NULL, level, buffer, cbBuf, NULL, &pcReturned);
+        res = pEnumPorts(NULL, level, buffer, cbBuf, &pcbNeeded, NULL);
+#endif
+
+        /* The Servername is ignored */
+        pcbNeeded = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(emptyW, level, buffer, cbBuf+1, &pcbNeeded, &pcReturned);
+        ok( res, "(%d) returned %d with %d and %d, %d (expected '!= 0')\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+
+        pcbNeeded = 0xdeadbeef;
+        pcReturned = 0xdeadbeef;
+        SetLastError(0xdeadbeef);
+        res = pEnumPorts(invalid_serverW, level, buffer, cbBuf+1, &pcbNeeded, &pcReturned);
+        ok( res, "(%d) returned %d with %d and %d, %d (expected '!= 0')\n",
+            level, res, GetLastError(), cbBuf, pcReturned);
+
+        HeapFree(GetProcessHeap(), 0, buffer);
+    }
+}
+
+/* ########################### */
+
+
 static void test_InitializePrintMonitor(void)
 {
     LPMONITOREX res;
@@ -150,4 +241,5 @@ START_TEST(localmon)
         GET_MONITOR_FUNC(XcvClosePort);
     }
     test_InitializePrintMonitor();
+    test_EnumPorts();
 }




More information about the wine-cvs mailing list