diff --git a/dlls/winhttp/tests/Makefile.in b/dlls/winhttp/tests/Makefile.in index 840c3cfe9fd..01f577914f6 100644 --- a/dlls/winhttp/tests/Makefile.in +++ b/dlls/winhttp/tests/Makefile.in @@ -1,5 +1,5 @@ TESTDLL = winhttp.dll -IMPORTS = winhttp crypt32 advapi32 ws2_32 +IMPORTS = winhttp oleaut32 ole32 crypt32 advapi32 ws2_32 C_SRCS = \ notification.c \ diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index def1367e400..8f2af5a5b08 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -18,6 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define COBJMACROS #include #include #include @@ -26,6 +27,8 @@ #include #include #include +#include "initguid.h" +#include #include "wine/test.h" @@ -2095,6 +2098,166 @@ static void test_credentials(void) WinHttpCloseHandle(ses); } +static void test_IWinHttpRequest(void) +{ + static const WCHAR url1W[] = {'h','t','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g',0}; + static const WCHAR url2W[] = {'w','i','n','e','h','q','.','o','r','g',0}; + static const WCHAR method1W[] = {'G','E','T',0}; + static const WCHAR method2W[] = {'I','N','V','A','L','I','D',0}; + HRESULT hr; + IWinHttpRequest *req; + BSTR method, url, response = NULL, status_text = NULL; + VARIANT async, empty, timeout; + VARIANT_BOOL succeeded; + LONG status; + + CoInitialize( NULL ); + hr = CoCreateInstance( &CLSID_WinHttpRequest, NULL, CLSCTX_INPROC_SERVER, &IID_IWinHttpRequest, (void **)&req ); + ok( hr == S_OK, "got %08x\n", hr ); + + VariantInit( &empty ); + V_VT( &empty ) = VT_ERROR; + + hr = IWinHttpRequest_Open( req, NULL, NULL, empty ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + method = SysAllocString( method1W ); + hr = IWinHttpRequest_Open( req, method, NULL, empty ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + url = SysAllocString( url1W ); + hr = IWinHttpRequest_Open( req, NULL, url, empty ); + ok( hr == E_INVALIDARG, "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Open( req, method, url, empty ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Release( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = CoCreateInstance( &CLSID_WinHttpRequest, NULL, CLSCTX_INPROC_SERVER, &IID_IWinHttpRequest, (void **)&req ); + ok( hr == S_OK, "got %08x\n", hr ); + + VariantInit( &async ); + V_VT( &async ) = VT_BOOL; + V_BOOL( &async ) = VARIANT_FALSE; + + SysFreeString( url ); + url = SysAllocString( url2W ); + hr = IWinHttpRequest_Open( req, method, url, async ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_UNRECOGNIZED_SCHEME ), "got %08x\n", hr ); + + SysFreeString( method ); + method = SysAllocString( method2W ); + hr = IWinHttpRequest_Open( req, method, url, async ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_UNRECOGNIZED_SCHEME ), "got %08x\n", hr ); + + SysFreeString( method ); + method = SysAllocString( method1W ); + SysFreeString( url ); + url = SysAllocString( url1W ); + hr = IWinHttpRequest_Open( req, method, url, async ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Send( req, empty ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN ), "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Release( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = CoCreateInstance( &CLSID_WinHttpRequest, NULL, CLSCTX_INPROC_SERVER, &IID_IWinHttpRequest, (void **)&req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_get_Status( req, &status ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND ), "got %08x\n", hr ); + + hr = IWinHttpRequest_get_StatusText( req, &status_text ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND ), "got %08x\n", hr ); + + hr = IWinHttpRequest_SetTimeouts( req, 10000, 10000, 10000, 10000 ); + ok( hr == S_OK, "got %08x\n", hr ); + + SysFreeString( method ); + method = SysAllocString( method1W ); + SysFreeString( url ); + url = SysAllocString( url1W ); + hr = IWinHttpRequest_Open( req, method, url, async ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_get_Status( req, &status ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND ), "got %08x\n", hr ); + + hr = IWinHttpRequest_get_StatusText( req, &status_text ); + ok( hr == HRESULT_FROM_WIN32( ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND ), "got %08x\n", hr ); + + hr = IWinHttpRequest_SetTimeouts( req, 10000, 10000, 10000, 10000 ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Send( req, empty ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Send( req, empty ); + ok( hr == S_OK, "got %08x\n", hr ); + + status = 0; + hr = IWinHttpRequest_get_Status( req, &status ); + ok( hr == S_OK, "got %08x\n", hr ); + trace("%d\n", status); + + hr = IWinHttpRequest_get_StatusText( req, &status_text ); + ok( hr == S_OK, "got %08x\n", hr ); + trace("%s\n", wine_dbgstr_w(status_text)); + SysFreeString( status_text ); + + VariantInit( &timeout ); + V_VT( &timeout ) = VT_I4; + V_I4( &timeout ) = 10; + hr = IWinHttpRequest_WaitForResponse( req, timeout, &succeeded ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_get_Status( req, &status ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_get_StatusText( req, &status_text ); + ok( hr == S_OK, "got %08x\n", hr ); + SysFreeString( status_text ); + + hr = IWinHttpRequest_Send( req, empty ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_get_ResponseText( req, &response ); + ok( hr == S_OK, "got %08x\n", hr ); + SysFreeString( response ); + + hr = IWinHttpRequest_Send( req, empty ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Abort( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + hr = IWinHttpRequest_Release( req ); + ok( hr == S_OK, "got %08x\n", hr ); + + SysFreeString( method ); + SysFreeString( url ); + CoUninitialize(); +} + START_TEST (winhttp) { static const WCHAR basicW[] = {'/','b','a','s','i','c',0}; @@ -2116,6 +2279,7 @@ START_TEST (winhttp) test_Timeouts(); test_resolve_timeout(); test_credentials(); + test_IWinHttpRequest(); si.event = CreateEvent(NULL, 0, 0, NULL); si.port = 7532;