Reactos
at master 140 lines 3.7 kB view raw
1/* 2 * PROJECT: ReactOS API Tests 3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory 4 * PURPOSE: Tests for ICMP functions 5 * PROGRAMMERS: Tim Crawford 6 */ 7 8#include <apitest.h> 9#include <ws2tcpip.h> 10#include <iphlpapi.h> 11#include <icmpapi.h> 12 13static 14void 15test_IcmpCreateFile(void) 16{ 17 HANDLE hIcmp; 18 19 SetLastError(0xDEADBEEF); 20 hIcmp = IcmpCreateFile(); 21 ok(hIcmp != INVALID_HANDLE_VALUE, "IcmpCreateFile failed unexpectedly: %lu\n", GetLastError()); 22 23 if (hIcmp != INVALID_HANDLE_VALUE) 24 IcmpCloseHandle(hIcmp); 25} 26 27static 28void 29test_Icmp6CreateFile(void) 30{ 31 HANDLE hIcmp; 32 33 SetLastError(0xDEADBEEF); 34 hIcmp = Icmp6CreateFile(); 35 36 if (GetLastError() == ERROR_FILE_NOT_FOUND) 37 { 38 /* On Windows Server 2003, the IPv6 protocol must be installed. */ 39 skip("IPv6 is not available.\n"); 40 return; 41 } 42 43 ok(hIcmp != INVALID_HANDLE_VALUE, "Icmp6CreateFile failed unexpectedly: %lu\n", GetLastError()); 44 45 if (hIcmp != INVALID_HANDLE_VALUE) 46 IcmpCloseHandle(hIcmp); 47} 48 49static 50void 51test_IcmpCloseHandle(void) 52{ 53 HANDLE hIcmp; 54 BOOL bRet; 55 DWORD LastError; 56 57 SetLastError(0xDEADBEEF); 58 hIcmp = IcmpCreateFile(); 59 if (hIcmp != INVALID_HANDLE_VALUE) 60 { 61 bRet = IcmpCloseHandle(hIcmp); 62 ok(bRet, "IcmpCloseHandle failed unexpectedly: %lu\n", GetLastError()); 63 } 64 65 SetLastError(0xDEADBEEF); 66 hIcmp = Icmp6CreateFile(); 67 if (hIcmp != INVALID_HANDLE_VALUE) 68 { 69 bRet = IcmpCloseHandle(hIcmp); 70 ok(bRet, "IcmpCloseHandle failed unexpectedly: %lu\n", GetLastError()); 71 } 72 73 hIcmp = INVALID_HANDLE_VALUE; 74 SetLastError(0xDEADBEEF); 75 bRet = IcmpCloseHandle(hIcmp); 76 ok(!bRet, "IcmpCloseHandle succeeded unexpectedly\n"); 77 LastError = GetLastError(); 78 ok(LastError == ERROR_INVALID_HANDLE || LastError == ERROR_INVALID_PARAMETER, 79 "Unexpected last error (0x%lX)\n", LastError); 80 81 hIcmp = NULL; 82 SetLastError(0xDEADBEEF); 83 bRet = IcmpCloseHandle(hIcmp); 84 ok(!bRet, "IcmpCloseHandle succeeded unexpectedly\n"); 85 LastError = GetLastError(); 86 ok(LastError == ERROR_INVALID_HANDLE || LastError == ERROR_INVALID_PARAMETER, 87 "Unexpected last error (0x%lX)\n", LastError); 88} 89 90static 91void 92test_IcmpSendEcho(void) 93{ 94 HANDLE hIcmp; 95 unsigned long ipaddr = INADDR_NONE; 96 DWORD bRet = 0, error = 0; 97 char SendData[32] = "Data Buffer"; 98 PVOID ReplyBuffer; 99 DWORD ReplySize = 0; 100 101 SetLastError(0xDEADBEEF); 102 hIcmp = IcmpCreateFile(); 103 if (hIcmp == INVALID_HANDLE_VALUE) 104 { 105 skip("IcmpCreateFile failed unexpectedly: %lu\n", GetLastError()); 106 return; 107 } 108 109 ipaddr = 0x08080808; // 8.8.8.8 110 ReplyBuffer = malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(SendData)); 111 112 ReplySize = sizeof(ICMP_ECHO_REPLY); 113 SetLastError(0xDEADBEEF); 114 bRet = IcmpSendEcho(hIcmp, ipaddr, SendData, sizeof(SendData), 115 NULL, ReplyBuffer, ReplySize, 5000); 116 117 ok(!bRet, "IcmpSendEcho succeeded unexpectedly\n"); 118 error = GetLastError(); 119 ok(error == IP_BUF_TOO_SMALL /* Win2003 */ || 120 error == IP_GENERAL_FAILURE /* Win10 */, 121 "IcmpSendEcho returned unexpected error: %lu\n", error); 122 123 ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData); 124 SetLastError(0xDEADBEEF); 125 bRet = IcmpSendEcho(hIcmp, ipaddr, SendData, sizeof(SendData), 126 NULL, ReplyBuffer, ReplySize, 5000); 127 128 ok(bRet, "IcmpSendEcho failed unexpectedly: %lu\n", GetLastError()); 129 130 free(ReplyBuffer); 131 IcmpCloseHandle(hIcmp); 132} 133 134START_TEST(icmp) 135{ 136 test_IcmpCreateFile(); 137 test_Icmp6CreateFile(); 138 test_IcmpCloseHandle(); 139 test_IcmpSendEcho(); 140}