NetWkstaTransportEnum

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Sat Apr 26 17:32:39 CDT 2003


Changelog:
	dlls/netapi32/wksta.c: dlls/netapi32/tests/wksta.c
	Better Api Compliance and test case for NetWkstaTransportEnum

Juan Lang <juan_lang at yahoo.com> sent me that patch to try it. I changed the
test so it compiled. Juan gave licence to Rewind too.

-- 
Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/netapi32/wksta.c
===================================================================
RCS file: /home/wine/wine/dlls/netapi32/wksta.c,v
retrieving revision 1.5
diff -u -r1.5 wksta.c
--- wine/dlls/netapi32/wksta.c	14 Feb 2003 23:29:24 -0000	1.5
+++ wine/dlls/netapi32/wksta.c	26 Apr 2003 22:28:01 -0000
@@ -89,6 +89,13 @@
 	    PWKSTA_TRANSPORT_INFO_0 ti;
 	    int i,size_needed,n_adapt  = enum_hw();
 	    
+	    if (n_adapt == 0)
+              return ERROR_NETWORK_UNREACHABLE;
+	    if (!read_entries)
+              return STATUS_ACCESS_VIOLATION;
+	    if (!total_entries || !pbuf)
+              return RPC_X_NULL_REF_POINTER;
+	    
 	    size_needed = n_adapt * (sizeof(WKSTA_TRANSPORT_INFO_0) 
 				     * 13 * sizeof (WCHAR));
 	    if (prefmaxlen == MAX_PREFERRED_LENGTH)
@@ -115,8 +122,8 @@
 		TRACE("%d of %d:ti at %p transport_address at %p %s\n",i,n_adapt,
 		      ti, ti->wkti0_transport_address, debugstr_w(ti->wkti0_transport_address));
 	      }
-	    if(read_entries)*read_entries = n_adapt;
-	    if(total_entries)*total_entries = n_adapt;
+	    *read_entries = n_adapt;
+	    *total_entries = n_adapt;
 	    if(hresume) *hresume= 0;
 	    break;
 	  }
Index: wine/dlls/netapi32/tests/wksta.c
===================================================================
RCS file: /home/wine/wine/dlls/netapi32/tests/wksta.c,v
retrieving revision 1.4
diff -u -r1.4 wksta.c
--- wine/dlls/netapi32/tests/wksta.c	19 Dec 2002 01:04:12 -0000	1.4
+++ wine/dlls/netapi32/tests/wksta.c	26 Apr 2003 22:28:02 -0000
@@ -31,6 +31,8 @@
 static NET_API_STATUS (WINAPI *pNetApiBufferSize)(LPVOID,LPDWORD)=NULL;
 static NET_API_STATUS (WINAPI *pNetpGetComputerName)(LPWSTR*)=NULL;
 static NET_API_STATUS (WINAPI *pNetWkstaUserGetInfo)(LPWSTR,DWORD,PBYTE*)=NULL;
+static NET_API_STATUS (WINAPI *pNetWkstaTransportEnum)(LPWSTR,DWORD,LPBYTE,
+ DWORD,LPDWORD,LPDWORD,LPDWORD)=NULL;
 
 WCHAR user_name[UNLEN + 1];
 WCHAR computer_name[MAX_COMPUTERNAME_LENGTH + 1];
@@ -116,6 +118,54 @@
        "Invalid level");
 }
 
+static void run_wkstatransportenum_tests(void)
+{
+    LPBYTE bufPtr;
+    NET_API_STATUS apiReturn;
+    DWORD entriesRead, totalEntries;
+
+    if (!pNetWkstaTransportEnum)
+        return;
+
+    // 1st check: is param 2 (level) correct? (only if param 5 passed?)
+    apiReturn = pNetWkstaTransportEnum(NULL, 1, NULL, MAX_PREFERRED_LENGTH,
+        NULL, &totalEntries, NULL);
+    ok(apiReturn == ERROR_INVALID_LEVEL, "Invalid level");
+
+    // 2nd check: is param 5 passed? (only if level passes?)
+    apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH,
+        NULL, &totalEntries, NULL);
+
+    // if no network adapter present, bail, the rest of the test will fail
+    if (apiReturn == ERROR_NETWORK_UNREACHABLE)
+        return;
+
+    ok(apiReturn == STATUS_ACCESS_VIOLATION, "access violation");
+
+    // 3rd check: is param 3 passed?
+    apiReturn = pNetWkstaTransportEnum(NULL, 0, NULL, MAX_PREFERRED_LENGTH,
+        NULL, NULL, NULL);
+    ok(apiReturn == STATUS_ACCESS_VIOLATION, "STATUS_ACCESS_VIOLATION");
+
+    // 4th check: is param 6 passed?
+    apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH,
+        &entriesRead, NULL, NULL);
+    ok(apiReturn == RPC_X_NULL_REF_POINTER, "null pointer");
+
+    // final check: valid return, actually get data back
+    apiReturn = pNetWkstaTransportEnum(NULL, 0, &bufPtr, MAX_PREFERRED_LENGTH,
+        &entriesRead, &totalEntries, NULL);
+    ok(apiReturn == NERR_Success, "NetWkstaTransportEnum is successful");
+    if (apiReturn == NERR_Success) {
+        WKSTA_TRANSPORT_INFO_0 *transports = (WKSTA_TRANSPORT_INFO_0 *)bufPtr;
+
+        ok(bufPtr, "got data back");
+        ok(entriesRead > 0, "read at least one transport");
+        ok(totalEntries > 0, "at least one transport");
+        NetApiBufferFree(bufPtr);
+    }
+}
+
 START_TEST(wksta)
 {
     HMODULE hnetapi32=LoadLibraryA("netapi32.dll");
@@ -123,11 +173,13 @@
     pNetApiBufferSize=(void*)GetProcAddress(hnetapi32,"NetApiBufferSize");
     pNetpGetComputerName=(void*)GetProcAddress(hnetapi32,"NetpGetComputerName");
     pNetWkstaUserGetInfo=(void*)GetProcAddress(hnetapi32,"NetWkstaUserGetInfo");
+    pNetWkstaTransportEnum=(void*)GetProcAddress(hnetapi32,"NetWkstaTransportEnum");
     if (!pNetApiBufferSize)
         trace("It appears there is no netapi32 functionality on this platform\n");
 
     if (init_wksta_tests()) {
         run_get_comp_name_tests();
         run_wkstausergetinfo_tests();
+        run_wkstatransportenum_tests();
     }
 }



More information about the wine-patches mailing list