2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for WinHttpOpen
5 * PROGRAMMER: Thomas Faber <thfabba@gmx.de>
10 #define WIN32_NO_STATUS
12 #define COM_NO_WINDOWS_H
15 #include <wine/test.h>
18 struct hostent
*(WINAPI
*pgethostbyname
)(const char *);
19 int (WINAPI
*pWSACancelBlockingCall
)(void);
20 int (WINAPI
*pWSAGetLastError
)(void);
22 HINTERNET (WINAPI
*pWinHttpOpen
)(LPCWSTR
, DWORD
, LPCWSTR
, LPCWSTR
, DWORD
);
23 BOOL (WINAPI
*pWinHttpCloseHandle
)(HINTERNET
);
32 ModuleHandle
= GetModuleHandle(L
"ws2_32");
35 return GetProcAddress(ModuleHandle
, FunctionName
);
38 #define PROC(name) (p##name = GetProc(#name))
44 return GetModuleHandle(L
"ws2_32") != NULL
;
51 return GetModuleHandle(L
"wininet") != NULL
;
56 IsWinsockInitialized(VOID
)
58 struct hostent
*Hostent
;
60 if (!PROC(gethostbyname
) || !PROC(WSAGetLastError
))
63 Hostent
= pgethostbyname("localhost");
65 ok_dec(pWSAGetLastError(), WSANOTINITIALISED
);
66 return Hostent
!= NULL
;
71 AreLegacyFunctionsSupported(VOID
)
75 if (!PROC(WSACancelBlockingCall
) || !PROC(WSAGetLastError
))
78 Error
= pWSACancelBlockingCall();
79 ok(Error
== SOCKET_ERROR
, "Error = %d\n", Error
);
80 ok(pWSAGetLastError() == WSAEOPNOTSUPP
||
81 pWSAGetLastError() == WSAEINVAL
, "WSAGetLastError = %d\n", pWSAGetLastError());
83 return pWSAGetLastError() != WSAEOPNOTSUPP
;
86 START_TEST(WinHttpOpen
)
89 HINTERNET InternetHandle
;
92 ok(!IsWinsockLoaded(), "Winsock loaded on startup\n");
93 ok(!IsWinsockInitialized(), "Winsock initialized on startup\n");
94 ok(!IsWininetLoaded(), "Wininet loaded on startup\n");
96 ModuleHandle
= GetModuleHandle(L
"winhttp");
97 ok_ptr(ModuleHandle
, NULL
);
98 ModuleHandle
= LoadLibrary(L
"winhttp");
99 ok(ModuleHandle
!= NULL
, "LoadLibrary failed, error %lu\n", GetLastError());
101 pWinHttpOpen
= (PVOID
)GetProcAddress(ModuleHandle
, "WinHttpOpen");
102 pWinHttpCloseHandle
= (PVOID
)GetProcAddress(ModuleHandle
, "WinHttpCloseHandle");
104 ok(!IsWinsockLoaded(), "Winsock loaded after winhttp load\n");
105 ok(!IsWinsockInitialized(), "Winsock initialized after winhttp load\n");
106 ok(!IsWininetLoaded(), "Wininet loaded after winhttp load\n");
108 InternetHandle
= pWinHttpOpen(NULL
, WINHTTP_ACCESS_TYPE_NO_PROXY
, NULL
, NULL
, 0);
109 ok(InternetHandle
!= NULL
, "InternetHandle = NULL\n");
111 if (InternetHandle
!= NULL
)
113 ok(IsWinsockLoaded(), "Winsock not loaded after WinHttpOpen\n");
114 ok(IsWinsockInitialized(), "Winsock not initialized after WinHttpOpen\n");
115 ok(!IsWininetLoaded(), "Wininet loaded after WinHttpOpen\n");
116 ok(AreLegacyFunctionsSupported(), "Winsock initialized with version 2\n");
117 Success
= pWinHttpCloseHandle(InternetHandle
);
118 ok(Success
, "WinHttpCloseHandle failed, error %lu\n", GetLastError());
121 ok(IsWinsockLoaded(), "Winsock unloaded after handle close\n");
122 ok(IsWinsockInitialized(), "Winsock uninitialized after handle close\n");
124 FreeLibrary(ModuleHandle
);
126 ok(IsWinsockLoaded(), "Winsock unloaded after winhttp unload\n");
127 trace("Winsock %sinitialized after winhttp unload (should be uninitialized in 2003, still initialized in 7)\n",
128 IsWinsockInitialized() ? "" : "un");