2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for WinHttpOpen
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org>
10 #define WIN32_NO_STATUS
12 #define COM_NO_WINDOWS_H
17 struct hostent
*(WINAPI
*pgethostbyname
)(const char *);
18 int (WINAPI
*pWSACancelBlockingCall
)(void);
19 int (WINAPI
*pWSAGetLastError
)(void);
21 HINTERNET (WINAPI
*pWinHttpOpen
)(LPCWSTR
, DWORD
, LPCWSTR
, LPCWSTR
, DWORD
);
22 BOOL (WINAPI
*pWinHttpCloseHandle
)(HINTERNET
);
31 ModuleHandle
= GetModuleHandleW(L
"ws2_32");
34 return GetProcAddress(ModuleHandle
, FunctionName
);
37 #define PROC(name) (p##name = GetProc(#name))
43 return GetModuleHandleW(L
"ws2_32") != NULL
;
50 return GetModuleHandleW(L
"wininet") != NULL
;
55 IsWinsockInitialized(VOID
)
57 struct hostent
*Hostent
;
59 if (!PROC(gethostbyname
) || !PROC(WSAGetLastError
))
62 Hostent
= pgethostbyname("localhost");
64 ok_dec(pWSAGetLastError(), WSANOTINITIALISED
);
65 return Hostent
!= NULL
;
70 AreLegacyFunctionsSupported(VOID
)
74 if (!PROC(WSACancelBlockingCall
) || !PROC(WSAGetLastError
))
77 Error
= pWSACancelBlockingCall();
78 ok(Error
== SOCKET_ERROR
, "Error = %d\n", Error
);
79 ok(pWSAGetLastError() == WSAEOPNOTSUPP
||
80 pWSAGetLastError() == WSAEINVAL
, "WSAGetLastError = %d\n", pWSAGetLastError());
82 return pWSAGetLastError() != WSAEOPNOTSUPP
;
85 START_TEST(WinHttpOpen
)
88 HINTERNET InternetHandle
;
91 ok(!IsWinsockLoaded(), "Winsock loaded on startup\n");
92 ok(!IsWinsockInitialized(), "Winsock initialized on startup\n");
93 ok(!IsWininetLoaded(), "Wininet loaded on startup\n");
95 ModuleHandle
= GetModuleHandleW(L
"winhttp");
96 ok_ptr(ModuleHandle
, NULL
);
97 ModuleHandle
= LoadLibraryW(L
"winhttp");
98 ok(ModuleHandle
!= NULL
, "LoadLibrary failed, error %lu\n", GetLastError());
100 pWinHttpOpen
= (PVOID
)GetProcAddress(ModuleHandle
, "WinHttpOpen");
101 pWinHttpCloseHandle
= (PVOID
)GetProcAddress(ModuleHandle
, "WinHttpCloseHandle");
103 ok(!IsWinsockLoaded(), "Winsock loaded after winhttp load\n");
104 ok(!IsWinsockInitialized(), "Winsock initialized after winhttp load\n");
105 ok(!IsWininetLoaded(), "Wininet loaded after winhttp load\n");
107 InternetHandle
= pWinHttpOpen(NULL
, WINHTTP_ACCESS_TYPE_NO_PROXY
, NULL
, NULL
, 0);
108 ok(InternetHandle
!= NULL
, "InternetHandle = NULL\n");
110 if (InternetHandle
!= NULL
)
112 ok(IsWinsockLoaded(), "Winsock not loaded after WinHttpOpen\n");
113 ok(IsWinsockInitialized(), "Winsock not initialized after WinHttpOpen\n");
114 ok(!IsWininetLoaded(), "Wininet loaded after WinHttpOpen\n");
115 ok(AreLegacyFunctionsSupported(), "Winsock initialized with version 2\n");
116 Success
= pWinHttpCloseHandle(InternetHandle
);
117 ok(Success
, "WinHttpCloseHandle failed, error %lu\n", GetLastError());
120 ok(IsWinsockLoaded(), "Winsock unloaded after handle close\n");
121 ok(IsWinsockInitialized(), "Winsock uninitialized after handle close\n");
123 FreeLibrary(ModuleHandle
);
125 ok(IsWinsockLoaded(), "Winsock unloaded after winhttp unload\n");
126 trace("Winsock %sinitialized after winhttp unload (should be uninitialized in 2003, still initialized in 7)\n",
127 IsWinsockInitialized() ? "" : "un");