Better API compliance and test case for NetWkstaTransportEnum.

This commit is contained in:
Juan Lang 2003-04-30 00:48:56 +00:00 committed by Alexandre Julliard
parent 86666c51e2
commit 7b55bc45eb
2 changed files with 61 additions and 2 deletions

View File

@ -31,6 +31,8 @@ static NET_API_STATUS (WINAPI *pNetApiBufferFree)(LPVOID)=NULL;
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 @@ static void run_wkstausergetinfo_tests(void)
"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 != NULL, "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 @@ START_TEST(wksta)
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();
}
}

View File

@ -89,6 +89,13 @@ NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf,
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 @@ NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf,
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;
}