Author: pschweitzer
Date: Sun Nov 29 19:31:33 2015
New Revision: 70210
URL:
http://svn.reactos.org/svn/reactos?rev=70210&view=rev
Log:
[IPHLPAPI_APITEST]
Add a new apitest for iphlpapi.dll.
It includes tests for testing the SendARP() and its underlying IOCTL.
Tested against W2K3.
Obviously, most of these tests fail on ReactOS.
Added:
trunk/rostests/apitests/iphlpapi/
trunk/rostests/apitests/iphlpapi/CMakeLists.txt (with props)
trunk/rostests/apitests/iphlpapi/SendARP.c (with props)
trunk/rostests/apitests/iphlpapi/testlist.c (with props)
Modified:
trunk/rostests/apitests/CMakeLists.txt
Modified: trunk/rostests/apitests/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/CMakeLists.txt?r…
==============================================================================
--- trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] Sun Nov 29 19:31:33 2015
@@ -10,6 +10,7 @@
add_subdirectory(crt)
add_subdirectory(dciman32)
add_subdirectory(gdi32)
+add_subdirectory(iphlpapi)
if(NOT ARCH STREQUAL "amd64")
add_subdirectory(kernel32)
endif()
Added: trunk/rostests/apitests/iphlpapi/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/iphlpapi/CMakeLi…
==============================================================================
--- trunk/rostests/apitests/iphlpapi/CMakeLists.txt (added)
+++ trunk/rostests/apitests/iphlpapi/CMakeLists.txt [iso-8859-1] Sun Nov 29 19:31:33 2015
@@ -0,0 +1,10 @@
+
+list(APPEND SOURCE
+ SendARP.c
+ testlist.c)
+
+add_executable(iphlpapi_apitest ${SOURCE})
+target_link_libraries(iphlpapi_apitest wine ${PSEH_LIB})
+set_module_type(iphlpapi_apitest win32cui)
+add_importlibs(iphlpapi_apitest iphlpapi msvcrt kernel32 ntdll)
+add_cd_file(TARGET iphlpapi_apitest DESTINATION reactos/bin FOR all)
Propchange: trunk/rostests/apitests/iphlpapi/CMakeLists.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/rostests/apitests/iphlpapi/SendARP.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/iphlpapi/SendARP…
==============================================================================
--- trunk/rostests/apitests/iphlpapi/SendARP.c (added)
+++ trunk/rostests/apitests/iphlpapi/SendARP.c [iso-8859-1] Sun Nov 29 19:31:33 2015
@@ -0,0 +1,394 @@
+/*
+ * PROJECT: ReactOS api tests
+ * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE: Test for SendARP
+ * PROGRAMMER: Pierre Schweitzer <pierre(a)reactos.org>
+ */
+
+#include <apitest.h>
+#include <winsock2.h>
+#include <iphlpapi.h>
+#include <tcpioctl.h>
+#define NTOS_MODE_USER
+#include <ndk/iofuncs.h>
+#include <ndk/obfuncs.h>
+#include <ndk/rtlfuncs.h>
+
+static VOID TestUM(IPAddr * Source)
+{
+ DWORD Err;
+ ULONG Hw[2];
+ DWORD Size;
+ BOOL Tested = FALSE;
+ PIP_ADAPTER_ADDRESSES Addresses, Current;
+
+ Err = SendARP(0, 0, NULL, NULL);
+ ok(Err == ERROR_INVALID_PARAMETER, "Expected error: ERROR_INVALID_PARAMETER.
Got: %lx\n", Err);
+
+ Size = 4;
+ Err = SendARP(0, 0, Hw, &Size);
+ ok(Err == ERROR_GEN_FAILURE, "Expected error: ERROR_GEN_FAILURE. Got:
%lx\n", Err);
+
+ Size = 6;
+ Err = SendARP(0, 0, Hw, &Size);
+ ok(Err == ERROR_GEN_FAILURE, "Expected error: ERROR_GEN_FAILURE. Got:
%lx\n", Err);
+
+ Size = 8;
+ Err = SendARP(0, 0, Hw, &Size);
+ ok(Err == ERROR_GEN_FAILURE, "Expected error: ERROR_GEN_FAILURE. Got:
%lx\n", Err);
+
+ Size = sizeof(IP_ADAPTER_ADDRESSES);
+ Addresses = (PIP_ADAPTER_ADDRESSES)malloc(Size);
+ if (!Addresses)
+ {
+ skip("Memory failure\n");
+ return;
+ }
+
+ Err = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_FRIENDLY_NAME |
GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST, NULL,
Addresses, &Size);
+ if (Err == ERROR_BUFFER_OVERFLOW)
+ {
+ free(Addresses);
+ Addresses = (PIP_ADAPTER_ADDRESSES)malloc(Size);
+ if (!Addresses)
+ {
+ skip("Memory failure\n");
+ return;
+ }
+
+ Err = GetAdaptersAddresses(AF_INET, GAA_FLAG_SKIP_FRIENDLY_NAME |
GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST, NULL,
Addresses, &Size);
+ }
+
+ if (Err != ERROR_SUCCESS)
+ {
+ skip("GetAdaptersAddresses() failure\n");
+ free(Addresses);
+ return;
+ }
+
+ for (Current = Addresses; Current; Current = Current->Next)
+ {
+ PSOCKADDR_IN SockAddr;
+ IPAddr IpAddr;
+
+ if (Current->IfType == IF_TYPE_SOFTWARE_LOOPBACK)
+ continue;
+
+ if (Current->OperStatus != IfOperStatusUp)
+ continue;
+
+ if (!Current->FirstUnicastAddress)
+ continue;
+
+ SockAddr = (PSOCKADDR_IN)Current->FirstUnicastAddress->Address.lpSockaddr;
+ IpAddr = SockAddr->sin_addr.S_un.S_addr;
+
+ Size = 4;
+ Err = SendARP(IpAddr, 0, Hw, &Size);
+ ok(Err == ERROR_NO_SYSTEM_RESOURCES, "Expected error:
ERROR_NO_SYSTEM_RESOURCES. Got: %lx\n", Err);
+
+ Size = 6;
+ Err = SendARP(IpAddr, 0, Hw, &Size);
+ ok(Err == ERROR_SUCCESS, "Expected error: ERROR_SUCCESS. Got: %lx\n",
Err);
+
+ Size = 8;
+ Err = SendARP(IpAddr, 0, Hw, &Size);
+ ok(Err == ERROR_SUCCESS, "Expected error: ERROR_SUCCESS. Got: %lx\n",
Err);
+ Err = SendARP(IpAddr, 0x08080808, Hw, &Size);
+ ok(Err == ERROR_SUCCESS, "Expected error: ERROR_SUCCESS. Got: %lx\n",
Err);
+
+ Size = 4;
+ Err = SendARP(IpAddr, IpAddr, Hw, &Size);
+ ok(Err == ERROR_NO_SYSTEM_RESOURCES, "Expected error:
ERROR_NO_SYSTEM_RESOURCES. Got: %lx\n", Err);
+
+ Size = 6;
+ Err = SendARP(IpAddr, IpAddr, Hw, &Size);
+ ok(Err == ERROR_SUCCESS, "Expected error: ERROR_SUCCESS. Got: %lx\n",
Err);
+
+ Size = 8;
+ Err = SendARP(IpAddr, IpAddr, Hw, &Size);
+ ok(Err == ERROR_SUCCESS, "Expected error: ERROR_SUCCESS. Got: %lx\n",
Err);
+
+ *Source = IpAddr;
+ Tested = TRUE;
+ break;
+ }
+
+ if (!Tested)
+ {
+ skip("No suitable interface found\n");
+ }
+
+ free(Addresses);
+}
+
+static VOID TestKM(IPAddr Source)
+{
+ HANDLE hDevice;
+ NTSTATUS Status;
+ IO_STATUS_BLOCK IoStatusBlock;
+ UNICODE_STRING DevName = RTL_CONSTANT_STRING(L"\\Device\\Ip");
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ HANDLE hEvent;
+ ULONG Hw[2];
+ ULONG Ip[2];
+
+ InitializeObjectAttributes(&ObjectAttributes,
+ &DevName,
+ OBJ_CASE_INSENSITIVE,
+ NULL,
+ NULL);
+
+ Status = NtCreateFile(&hDevice, GENERIC_EXECUTE, &ObjectAttributes,
+ &IoStatusBlock, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ |
FILE_SHARE_WRITE, FILE_OPEN_IF,
+ 0, NULL, 0);
+ if (!NT_SUCCESS(Status))
+ {
+ skip("NtCreateFile() failed with status: %lx\n", Status);
+ return;
+ }
+
+ hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
+ if (!hEvent)
+ {
+ skip("CreateEventW() with error: %lx\n", GetLastError());
+ CloseHandle(hDevice);
+ return;
+ }
+
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, NULL, 0, NULL, 0);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ memset(Ip, 0, sizeof(Ip));
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), NULL, 0);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 4);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_UNSUCCESSFUL, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 6);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_UNSUCCESSFUL, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 8);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_UNSUCCESSFUL, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ Ip[0] = Source;
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip[0]), NULL, 0);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip[0]), Hw, 4);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip[0]), Hw, 6);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip[0]), Hw, 8);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), NULL, 0);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 4);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INSUFFICIENT_RESOURCES, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 6);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_SUCCESS, "NtDeviceIoControlFile() failed with status:
%lx\n", Status);
+ ok(IoStatusBlock.Information == 6, "Excepted 6, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 8);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_SUCCESS, "NtDeviceIoControlFile() failed with status:
%lx\n", Status);
+ ok(IoStatusBlock.Information == 6, "Excepted 6, got: %lu\n",
IoStatusBlock.Information);
+
+ Ip[1] = Source;
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), NULL, 0);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INVALID_BUFFER_SIZE, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 4);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_INSUFFICIENT_RESOURCES, "NtDeviceIoControlFile() failed with
unexpected status: %lx\n", Status);
+ ok(IoStatusBlock.Information == 0, "Excepted 0, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 6);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_SUCCESS, "NtDeviceIoControlFile() failed with status:
%lx\n", Status);
+ ok(IoStatusBlock.Information == 6, "Excepted 6, got: %lu\n",
IoStatusBlock.Information);
+
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 8);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_SUCCESS, "NtDeviceIoControlFile() failed with status:
%lx\n", Status);
+ ok(IoStatusBlock.Information == 6, "Excepted 6, got: %lu\n",
IoStatusBlock.Information);
+
+ Ip[1] = 0x08080808;
+ ResetEvent(hEvent);
+ IoStatusBlock.Status = STATUS_SUCCESS;
+ IoStatusBlock.Information = 0;
+ Status = NtDeviceIoControlFile(hDevice, hEvent, NULL, NULL, &IoStatusBlock,
IOCTL_QUERY_IP_HW_ADDRESS, Ip, sizeof(Ip), Hw, 8);
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(hEvent, FALSE, NULL);
+ Status = IoStatusBlock.Status;
+ }
+ ok(Status == STATUS_SUCCESS, "NtDeviceIoControlFile() failed with status:
%lx\n", Status);
+ ok(IoStatusBlock.Information == 6, "Excepted 6, got: %lu\n",
IoStatusBlock.Information);
+
+ CloseHandle(hEvent);
+ CloseHandle(hDevice);
+}
+
+START_TEST(SendARP)
+{
+ IPAddr Source = 0;
+
+ TestUM(&Source);
+ if (!Source)
+ {
+ skip("No suitable interface found\n");
+ return;
+ }
+
+ TestKM(Source);
+}
Propchange: trunk/rostests/apitests/iphlpapi/SendARP.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/rostests/apitests/iphlpapi/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/iphlpapi/testlis…
==============================================================================
--- trunk/rostests/apitests/iphlpapi/testlist.c (added)
+++ trunk/rostests/apitests/iphlpapi/testlist.c [iso-8859-1] Sun Nov 29 19:31:33 2015
@@ -0,0 +1,14 @@
+#define __ROS_LONG64__
+
+#define STANDALONE
+#include <apitest.h>
+
+extern void func_SendARP(void);
+
+const struct test winetest_testlist[] =
+{
+ { "SendARP", func_SendARP },
+
+ { 0, 0 }
+};
+
Propchange: trunk/rostests/apitests/iphlpapi/testlist.c
------------------------------------------------------------------------------
svn:eol-style = native