1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for getaddrinfo
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
6 */
7
8 #include "ws2_32.h"
9
START_TEST(getnameinfo)10 START_TEST(getnameinfo)
11 {
12 WSADATA WsaData;
13 int Error, MinSize;
14 PCHAR NodeBuffer, ServiceBuffer;
15 CHAR TestBuf[NI_MAXHOST];
16 WCHAR TestBufW[NI_MAXHOST];
17 SOCKADDR_IN LocalAddr;
18
19 /* not yet initialized */
20 StartSeh()
21 Error = getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
22 ok_dec(Error, WSANOTINITIALISED);
23 EndSeh(STATUS_SUCCESS);
24 StartSeh()
25 NodeBuffer = InvalidPointer;
26 ServiceBuffer = InvalidPointer;
27 Error = getnameinfo(NULL, 0, NodeBuffer, 0, ServiceBuffer, 0, 0);
28 ok_dec(Error, WSANOTINITIALISED);
29 ok_ptr(NodeBuffer, InvalidPointer);
30 ok_ptr(ServiceBuffer, InvalidPointer);
31 EndSeh(STATUS_SUCCESS);
32
33 LocalAddr.sin_family = AF_INET;
34 LocalAddr.sin_port = 80;
35 LocalAddr.sin_addr.S_un.S_addr = ntohl(INADDR_LOOPBACK);
36 Error = getnameinfo((PSOCKADDR)&LocalAddr, sizeof(LocalAddr), TestBuf, sizeof(TestBuf), NULL, 0, 0);
37 ok_dec(Error, WSANOTINITIALISED);
38
39 Error = WSAStartup(MAKEWORD(2, 2), &WsaData);
40 ok_dec(Error, 0);
41
42 StartSeh()
43 Error = getnameinfo(NULL, 0, NULL, 0, NULL, 0, 0);
44 ok_dec(Error, WSAEFAULT);
45 EndSeh(STATUS_SUCCESS);
46 StartSeh()
47 NodeBuffer = InvalidPointer;
48 ServiceBuffer = InvalidPointer;
49 Error = getnameinfo(NULL, 0, NodeBuffer, 0, ServiceBuffer, 0, 0);
50 ok_dec(Error, WSAEFAULT);
51 ok_ptr(NodeBuffer, InvalidPointer);
52 ok_ptr(ServiceBuffer, InvalidPointer);
53 EndSeh(STATUS_SUCCESS);
54
55 /* initialize LocalAddress for tests */
56 Error = getnameinfo((PSOCKADDR)&LocalAddr, sizeof(LocalAddr), TestBuf, sizeof(TestBuf), NULL, 0, 0);
57 ok_dec(Error, 0);
58 ok_dec(WSAGetLastError(), 0);
59
60 /* test minimal size */
61 MinSize = sizeof(LocalAddr);
62 Error = getnameinfo((PSOCKADDR)&LocalAddr, MinSize, TestBuf, sizeof(TestBuf), NULL, 0, 0);
63 ok_dec(Error, 0);
64 ok_dec(WSAGetLastError(), 0);
65
66 Error = GetNameInfoA((PSOCKADDR)&LocalAddr, MinSize, TestBuf, sizeof(TestBuf), NULL, 0, 0);
67 ok_dec(Error, 0);
68 ok_dec(WSAGetLastError(), 0);
69
70 Error = GetNameInfoW((PSOCKADDR)&LocalAddr, MinSize, TestBufW, sizeof(TestBufW), NULL, 0, 0);
71 ok_dec(Error, 0);
72 ok_dec(WSAGetLastError(), 0);
73
74 MinSize--;
75 Error = getnameinfo((PSOCKADDR)&LocalAddr, MinSize, TestBuf, sizeof(TestBuf), NULL, 0, 0);
76 ok_dec(Error, WSAEFAULT);
77
78 Error = GetNameInfoA((PSOCKADDR)&LocalAddr, MinSize, TestBuf, sizeof(TestBuf), NULL, 0, 0);
79 ok_dec(Error, WSAEFAULT);
80
81 Error = GetNameInfoW((PSOCKADDR)&LocalAddr, MinSize, TestBufW, sizeof(TestBufW), NULL, 0, 0);
82 ok_dec(Error, WSAEFAULT);
83
84 Error = WSACleanup();
85 ok_dec(Error, 0);
86
87 /* not initialized anymore */
88 Error = getnameinfo((PSOCKADDR)&LocalAddr, sizeof(LocalAddr), NodeBuffer, 0, ServiceBuffer, 0, 0);
89 ok_dec(Error, WSANOTINITIALISED);
90 }
91