| /* |
| * Unit test suite for rasapi32 functions |
| * |
| * Copyright 2008 Austin English |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| #include <wine/test.h> |
| #include <windef.h> |
| #include <winbase.h> |
| #include "ras.h" |
| #include "raserror.h" |
| |
| static HMODULE hmodule; |
| static DWORD (WINAPI *pRasEnumDevicesA)(LPRASDEVINFOA, LPDWORD, LPDWORD); |
| |
| #define RASAPI32_GET_PROC(func) \ |
| p ## func = (void*)GetProcAddress(hmodule, #func); \ |
| if(!p ## func) \ |
| trace("GetProcAddress(%s) failed\n", #func); |
| |
| static void InitFunctionPtrs(void) |
| { |
| hmodule = LoadLibraryA("rasapi32.dll"); |
| |
| RASAPI32_GET_PROC(RasEnumDevicesA) |
| } |
| |
| static void test_rasenum(void) |
| { |
| DWORD result; |
| DWORD cDevices = 0; |
| DWORD bufsize = 0, cb = 0; |
| LPRASDEVINFOA rasDevInfo; |
| |
| if(!pRasEnumDevicesA) { |
| win_skip("Skipping RasEnumDevicesA tests, function not present\n"); |
| return; |
| } |
| |
| /* create the return buffer */ |
| result = pRasEnumDevicesA(NULL, &bufsize, &cDevices); |
| if(ERROR_RASMAN_CANNOT_INITIALIZE == result || |
| ERROR_STATE_MACHINES_NOT_STARTED == result) { |
| win_skip("RAS configuration problem\n"); |
| return; |
| } |
| if(ERROR_SUCCESS == result) { |
| win_skip("RasEnumDevicesA found nothing to enumerate\n"); |
| return; |
| } |
| trace("RasEnumDevicesA: returned %d buffersize %d\n", result, bufsize); |
| ok(result == ERROR_BUFFER_TOO_SMALL, |
| "Expected ERROR_BUFFER_TOO_SMALL, got %08d\n", result); |
| |
| rasDevInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, |
| max(bufsize,sizeof(RASDEVINFOA))); |
| if(!rasDevInfo) { |
| win_skip("failed to allocate buffer for RasEnumDevicesA tests\n"); |
| return; |
| } |
| |
| /* test first parameter */ |
| cb = bufsize; |
| result = pRasEnumDevicesA(NULL, &cb, &cDevices); |
| ok(result == ERROR_BUFFER_TOO_SMALL || |
| result == ERROR_INVALID_USER_BUFFER, /* win98 */ |
| "Expected ERROR_BUFFER_TOO_SMALL, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = 0; |
| cb = bufsize; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_INVALID_SIZE || |
| result == ERROR_INVALID_USER_BUFFER, /* win98 */ |
| "Expected ERROR_INVALID_SIZE, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA) -1; |
| cb = bufsize; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_INVALID_SIZE || |
| result == ERROR_INVALID_USER_BUFFER, /* win98 */ |
| "Expected ERROR_INVALID_SIZE, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA) +1; |
| cb = bufsize; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_INVALID_SIZE || |
| result == ERROR_INVALID_USER_BUFFER, /* win98 */ |
| "Expected ERROR_INVALID_SIZE, got %08d\n", result); |
| |
| /* test second parameter */ |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA); |
| result = pRasEnumDevicesA(rasDevInfo, NULL, &cDevices); |
| ok(result == ERROR_INVALID_PARAMETER, |
| "Expected ERROR_INVALID_PARAMETER, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA); |
| cb = 0; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_BUFFER_TOO_SMALL || |
| result == ERROR_INVALID_SIZE, /* vista, 2k8 */ |
| "Expected ERROR_BUFFER_TOO_SMALL/ERROR_INVALID_SIZE, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA); |
| cb = bufsize -1; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_BUFFER_TOO_SMALL, |
| "Expected ERROR_BUFFER_TOO_SMALL, got %08d\n", result); |
| |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA); |
| cb = bufsize +1; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_SUCCESS, |
| "Expected ERROR_SUCCESS, got %08d\n", result); |
| |
| /* test third parameter */ |
| rasDevInfo[0].dwSize = sizeof(RASDEVINFOA); |
| cb = bufsize; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, NULL); |
| ok(result == ERROR_INVALID_PARAMETER, |
| "Expected ERROR_INVALID_PARAMETER, got %08d\n", result); |
| |
| /* test combinations of invalid parameters */ |
| result = pRasEnumDevicesA(NULL, NULL, &cDevices); |
| ok(result == ERROR_INVALID_PARAMETER, |
| "Expected ERROR_INVALID_PARAMETER, got %08d\n", result); |
| |
| result = pRasEnumDevicesA(NULL, &cb, NULL); |
| ok(result == ERROR_INVALID_PARAMETER || |
| result == ERROR_INVALID_USER_BUFFER, /* win98 */ |
| "Expected ERROR_INVALID_PARAMETER, got %08d\n", result); |
| |
| cb = 0; |
| rasDevInfo[0].dwSize = 0; |
| result = pRasEnumDevicesA(rasDevInfo, &cb, &cDevices); |
| ok(result == ERROR_INVALID_SIZE || |
| broken(result == ERROR_BUFFER_TOO_SMALL), /* win98 */ |
| "Expected ERROR_INVALID_SIZE, got %08d\n", result); |
| |
| HeapFree(GetProcessHeap(), 0, rasDevInfo); |
| } |
| |
| START_TEST(rasapi) |
| { |
| InitFunctionPtrs(); |
| |
| test_rasenum(); |
| |
| FreeLibrary(hmodule); |
| } |