[WINHTTP_WINETEST]

* Sync with Wine 1.7.17.
CORE-8080

svn path=/trunk/; revision=62991
This commit is contained in:
Amine Khaldi 2014-04-26 17:36:17 +00:00
parent ab45abcfb2
commit 1bf5033020
3 changed files with 243 additions and 196 deletions

View file

@ -27,6 +27,7 @@
#include "wine/test.h" #include "wine/test.h"
static const WCHAR user_agent[] = {'w','i','n','e','t','e','s','t',0}; static const WCHAR user_agent[] = {'w','i','n','e','t','e','s','t',0};
static const WCHAR test_winehq[] = {'t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',0};
enum api enum api
{ {
@ -44,9 +45,9 @@ struct notification
{ {
enum api function; /* api responsible for notification */ enum api function; /* api responsible for notification */
unsigned int status; /* status received */ unsigned int status; /* status received */
int todo; BOOL todo;
int ignore; BOOL ignore;
int skipped_for_proxy; BOOL skipped_for_proxy;
}; };
struct info struct info
@ -89,7 +90,7 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
DWORD size = sizeof(struct info *); DWORD size = sizeof(struct info *);
WinHttpQueryOption( handle, WINHTTP_OPTION_CONTEXT_VALUE, &info, &size ); WinHttpQueryOption( handle, WINHTTP_OPTION_CONTEXT_VALUE, &info, &size );
} }
ok(i < info->count, "unexpected notification 0x%08x\n", status); ok(i < info->count, "%u: unexpected notification 0x%08x\n", info->line, status);
if (i >= info->count) return; if (i >= info->count) return;
status_ok = (info->test[i].status == status); status_ok = (info->test[i].status == status);
@ -107,7 +108,7 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
todo_wine ok(function_ok, "%u: expected function %u got %u\n", info->line, info->test[i].function, info->function); todo_wine ok(function_ok, "%u: expected function %u got %u\n", info->line, info->test[i].function, info->function);
} }
} }
if (status_ok) info->index++; if (status_ok && function_ok) info->index++;
if (proxy_active()) if (proxy_active())
{ {
while (info->test[info->index].skipped_for_proxy) while (info->test[info->index].skipped_for_proxy)
@ -122,31 +123,31 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
static const struct notification cache_test[] = static const struct notification cache_test[] =
{ {
{ winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, FALSE, TRUE },
{ winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 } { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE }
}; };
static void setup_test( struct info *info, enum api function, unsigned int line ) static void setup_test( struct info *info, enum api function, unsigned int line )
@ -157,8 +158,6 @@ static void setup_test( struct info *info, enum api function, unsigned int line
static void test_connection_cache( void ) static void test_connection_cache( void )
{ {
static const WCHAR codeweavers[] = {'w','w','w','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
HANDLE ses, con, req; HANDLE ses, con, req;
DWORD size, status; DWORD size, status;
BOOL ret; BOOL ret;
@ -178,7 +177,7 @@ static void test_connection_cache( void )
ok(ret, "failed to set context value %u\n", GetLastError()); ok(ret, "failed to set context value %u\n", GetLastError());
setup_test( &info, winhttp_connect, __LINE__ ); setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 ); con = WinHttpConnect( ses, test_winehq, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
setup_test( &info, winhttp_open_request, __LINE__ ); setup_test( &info, winhttp_open_request, __LINE__ );
@ -242,7 +241,7 @@ static void test_connection_cache( void )
ok(ret, "failed to set context value %u\n", GetLastError()); ok(ret, "failed to set context value %u\n", GetLastError());
setup_test( &info, winhttp_connect, __LINE__ ); setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 ); con = WinHttpConnect( ses, test_winehq, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
setup_test( &info, winhttp_open_request, __LINE__ ); setup_test( &info, winhttp_open_request, __LINE__ );
@ -298,36 +297,34 @@ static void test_connection_cache( void )
static const struct notification redirect_test[] = static const struct notification redirect_test[] =
{ {
{ winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, FALSE, TRUE },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, FALSE, TRUE },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, FALSE, TRUE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, FALSE, TRUE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, FALSE, FALSE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, FALSE, FALSE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 } { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE }
}; };
static void test_redirect( void ) static void test_redirect( void )
{ {
static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
HANDLE ses, con, req; HANDLE ses, con, req;
DWORD size, status; DWORD size, status;
BOOL ret; BOOL ret;
@ -347,7 +344,7 @@ static void test_redirect( void )
ok(ret, "failed to set context value %u\n", GetLastError()); ok(ret, "failed to set context value %u\n", GetLastError());
setup_test( &info, winhttp_connect, __LINE__ ); setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 ); con = WinHttpConnect( ses, test_winehq, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
setup_test( &info, winhttp_open_request, __LINE__ ); setup_test( &info, winhttp_open_request, __LINE__ );
@ -375,42 +372,40 @@ static void test_redirect( void )
static const struct notification async_test[] = static const struct notification async_test[] =
{ {
{ winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 }, { winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, FALSE, TRUE },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, FALSE, TRUE },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE, 0 }, { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, FALSE, TRUE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, FALSE, TRUE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, FALSE, FALSE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, FALSE, FALSE, TRUE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED },
{ winhttp_receive_response, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE },
{ winhttp_query_data, WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE, 0 }, { winhttp_query_data, WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE },
{ winhttp_read_data, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0, 1 }, { winhttp_read_data, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, FALSE, TRUE },
{ winhttp_read_data, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0, 1 }, { winhttp_read_data, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, FALSE, TRUE },
{ winhttp_read_data, WINHTTP_CALLBACK_STATUS_READ_COMPLETE, 0, 1 }, { winhttp_read_data, WINHTTP_CALLBACK_STATUS_READ_COMPLETE, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 0, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, FALSE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 }, { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE },
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1, 1 } { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, TRUE, TRUE }
}; };
static void test_async( void ) static void test_async( void )
{ {
static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
HANDLE ses, con, req; HANDLE ses, con, req;
DWORD size, status; DWORD size, status;
BOOL ret; BOOL ret;
@ -420,7 +415,7 @@ static void test_async( void )
info.test = async_test; info.test = async_test;
info.count = sizeof(async_test) / sizeof(async_test[0]); info.count = sizeof(async_test) / sizeof(async_test[0]);
info.index = 0; info.index = 0;
info.wait = CreateEvent( NULL, FALSE, FALSE, NULL ); info.wait = CreateEventW( NULL, FALSE, FALSE, NULL );
ses = WinHttpOpen( user_agent, 0, NULL, NULL, WINHTTP_FLAG_ASYNC ); ses = WinHttpOpen( user_agent, 0, NULL, NULL, WINHTTP_FLAG_ASYNC );
ok(ses != NULL, "failed to open session %u\n", GetLastError()); ok(ses != NULL, "failed to open session %u\n", GetLastError());
@ -431,7 +426,7 @@ static void test_async( void )
ok(ret, "failed to set context value %u\n", GetLastError()); ok(ret, "failed to set context value %u\n", GetLastError());
setup_test( &info, winhttp_connect, __LINE__ ); setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 ); con = WinHttpConnect( ses, test_winehq, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
setup_test( &info, winhttp_open_request, __LINE__ ); setup_test( &info, winhttp_open_request, __LINE__ );

View file

@ -353,21 +353,21 @@ static void WinHttpCrackUrl_test( void )
uc.dwExtraInfoLength = 20; uc.dwExtraInfoLength = 20;
ret = WinHttpCrackUrl( url1, 0, 0, &uc ); ret = WinHttpCrackUrl( url1, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" ); ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme: %u\n", uc.nScheme );
ok( !memcmp( uc.lpszScheme, http, sizeof(http) ), "unexpected scheme\n" ); ok( !memcmp( uc.lpszScheme, http, sizeof(http) ), "unexpected scheme: %s\n", wine_dbgstr_w(uc.lpszScheme) );
ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" ); ok( uc.dwSchemeLength == 4, "unexpected scheme length: %u\n", uc.dwSchemeLength );
ok( !memcmp( uc.lpszUserName, username, sizeof(username) ), "unexpected username\n" ); ok( !memcmp( uc.lpszUserName, username, sizeof(username) ), "unexpected username: %s\n", wine_dbgstr_w(uc.lpszUserName) );
ok( uc.dwUserNameLength == 8, "unexpected username length\n" ); ok( uc.dwUserNameLength == 8, "unexpected username length: %u\n", uc.dwUserNameLength );
ok( !memcmp( uc.lpszPassword, password, sizeof(password) ), "unexpected password\n" ); ok( !memcmp( uc.lpszPassword, password, sizeof(password) ), "unexpected password: %s\n", wine_dbgstr_w(uc.lpszPassword) );
ok( uc.dwPasswordLength == 8, "unexpected password length\n" ); ok( uc.dwPasswordLength == 8, "unexpected password length: %u\n", uc.dwPasswordLength );
ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected hostname\n" ); ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected hostname: %s\n", wine_dbgstr_w(uc.lpszHostName) );
ok( uc.dwHostNameLength == 14, "unexpected hostname length\n" ); ok( uc.dwHostNameLength == 14, "unexpected hostname length: %u\n", uc.dwHostNameLength );
ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort ); ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
ok( !memcmp( uc.lpszUrlPath, about, sizeof(about) ), "unexpected path\n" ); ok( !memcmp( uc.lpszUrlPath, about, sizeof(about) ), "unexpected path: %s\n", wine_dbgstr_w(uc.lpszUrlPath) );
ok( uc.dwUrlPathLength == 11, "unexpected path length\n" ); ok( uc.dwUrlPathLength == 11, "unexpected path length: %u\n", uc.dwUrlPathLength );
ok( !memcmp( uc.lpszExtraInfo, query, sizeof(query) ), "unexpected extra info\n" ); ok( !memcmp( uc.lpszExtraInfo, query, sizeof(query) ), "unexpected extra info: %s\n", wine_dbgstr_w(uc.lpszExtraInfo) );
ok( uc.dwExtraInfoLength == 6, "unexpected extra info length\n" ); ok( uc.dwExtraInfoLength == 6, "unexpected extra info length: %u\n", uc.dwExtraInfoLength );
/* buffer of insufficient length */ /* buffer of insufficient length */
scheme[0] = 0; scheme[0] = 0;
@ -376,15 +376,15 @@ static void WinHttpCrackUrl_test( void )
SetLastError( 0xdeadbeef ); SetLastError( 0xdeadbeef );
ret = WinHttpCrackUrl( url1, 0, 0, &uc ); ret = WinHttpCrackUrl( url1, 0, 0, &uc );
error = GetLastError(); error = GetLastError();
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
ok( error == ERROR_INSUFFICIENT_BUFFER, "WinHttpCrackUrl failed\n" ); ok( error == ERROR_INSUFFICIENT_BUFFER, "got %u, expected ERROR_INSUFFICIENT_BUFFER\n", error );
ok( uc.dwSchemeLength == 5, "unexpected scheme length: %u\n", uc.dwSchemeLength ); ok( uc.dwSchemeLength == 5, "unexpected scheme length: %u\n", uc.dwSchemeLength );
/* no buffers */ /* no buffers */
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k1, 0, 0,&uc); ret = WinHttpCrackUrl( url_k1, 0, 0,&uc);
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" ); ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
ok( uc.lpszScheme == url_k1,"unexpected scheme\n" ); ok( uc.lpszScheme == url_k1,"unexpected scheme\n" );
ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" ); ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
@ -403,7 +403,7 @@ static void WinHttpCrackUrl_test( void )
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k2, 0, 0,&uc); ret = WinHttpCrackUrl( url_k2, 0, 0,&uc);
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" ); ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
ok( uc.lpszScheme == url_k2, "unexpected scheme\n" ); ok( uc.lpszScheme == url_k2, "unexpected scheme\n" );
ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" ); ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
@ -422,7 +422,7 @@ static void WinHttpCrackUrl_test( void )
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k3, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k3, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nScheme == INTERNET_SCHEME_HTTPS, "unexpected scheme\n" ); ok( uc.nScheme == INTERNET_SCHEME_HTTPS, "unexpected scheme\n" );
ok( uc.lpszScheme == url_k3, "unexpected scheme\n" ); ok( uc.lpszScheme == url_k3, "unexpected scheme\n" );
ok( uc.dwSchemeLength == 5, "unexpected scheme length\n" ); ok( uc.dwSchemeLength == 5, "unexpected scheme length\n" );
@ -441,61 +441,61 @@ static void WinHttpCrackUrl_test( void )
/* bad parameters */ /* bad parameters */
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k4, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k4, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k5, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k5, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k6, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k6, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k7, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k7, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k8, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k8, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k9, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k9, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.lpszUrlPath == url_k9 + 14, "unexpected path\n" ); ok( uc.lpszUrlPath == url_k9 + 14, "unexpected path: %s\n", wine_dbgstr_w(uc.lpszUrlPath) );
ok( uc.dwUrlPathLength == 0, "unexpected path length\n" ); ok( uc.dwUrlPathLength == 0, "unexpected path length: %u\n", uc.dwUrlPathLength );
ok( uc.lpszExtraInfo == url_k9 + 14, "unexpected extra info\n" ); ok( uc.lpszExtraInfo == url_k9 + 14, "unexpected extra info: %s\n", wine_dbgstr_w(uc.lpszExtraInfo) );
ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" ); ok( uc.dwExtraInfoLength == 0, "unexpected extra info length: %u\n", uc.dwExtraInfoLength );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url_k10, 0, 0, &uc ); ret = WinHttpCrackUrl( url_k10, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.lpszUrlPath == url_k10 + 13, "unexpected path\n" ); ok( uc.lpszUrlPath == url_k10 + 13, "unexpected path: %s\n", wine_dbgstr_w(uc.lpszUrlPath) );
ok( uc.dwUrlPathLength == 7, "unexpected path length\n" ); ok( uc.dwUrlPathLength == 7, "unexpected path length: %u\n", uc.dwUrlPathLength );
ok( uc.lpszExtraInfo == url_k10 + 20, "unexpected extra info\n" ); ok( uc.lpszExtraInfo == url_k10 + 20, "unexpected extra info: %s\n", wine_dbgstr_w(uc.lpszExtraInfo) );
ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" ); ok( uc.dwExtraInfoLength == 0, "unexpected extra info length: %u\n", uc.dwExtraInfoLength );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url5, 0, 0, &uc ); ret = WinHttpCrackUrl( url5, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( empty, 0, 0, &uc ); ret = WinHttpCrackUrl( empty, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
ret = WinHttpCrackUrl( url1, 0, 0, NULL ); ret = WinHttpCrackUrl( url1, 0, 0, NULL );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
ret = WinHttpCrackUrl( NULL, 0, 0, &uc ); ret = WinHttpCrackUrl( NULL, 0, 0, &uc );
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
/* decoding without buffers */ /* decoding without buffers */
reset_url_components( &uc ); reset_url_components( &uc );
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
ret = WinHttpCrackUrl( url8, 0, ICU_DECODE, &uc ); ret = WinHttpCrackUrl( url8, 0, ICU_DECODE, &uc );
error = GetLastError(); error = GetLastError();
ok( !ret, "WinHttpCrackUrl failed\n" ); ok( !ret, "WinHttpCrackUrl succeeded\n" );
ok( error == ERROR_INVALID_PARAMETER, "WinHttpCrackUrl failed\n" ); ok( error == ERROR_INVALID_PARAMETER, "got %u, expected ERROR_INVALID_PARAMETER\n", error );
/* decoding with buffers */ /* decoding with buffers */
uc.lpszScheme = scheme; uc.lpszScheme = scheme;
@ -538,7 +538,7 @@ static void WinHttpCrackUrl_test( void )
path[0] = 0; path[0] = 0;
ret = WinHttpCrackUrl( url7, 0, 0, &uc ); ret = WinHttpCrackUrl( url7, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected host name: %s\n", wine_dbgstr_w(uc.lpszHostName) ); ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected host name: %s\n", wine_dbgstr_w(uc.lpszHostName) );
ok( uc.dwHostNameLength == 14, "unexpected host name length: %d\n", uc.dwHostNameLength ); ok( uc.dwHostNameLength == 14, "unexpected host name length: %d\n", uc.dwHostNameLength );
ok( uc.nPort == 42, "unexpected port: %u\n", uc.nPort ); ok( uc.nPort == 42, "unexpected port: %u\n", uc.nPort );
@ -546,17 +546,17 @@ static void WinHttpCrackUrl_test( void )
/* decoding without buffers */ /* decoding without buffers */
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url9, 0, 0, &uc ); ret = WinHttpCrackUrl( url9, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nPort == 0, "unexpected port: %u\n", uc.nPort ); ok( uc.nPort == 0, "unexpected port: %u\n", uc.nPort );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url10, 0, 0, &uc ); ret = WinHttpCrackUrl( url10, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort ); ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url11, 0, 0, &uc ); ret = WinHttpCrackUrl( url11, 0, 0, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nPort == 443, "unexpected port: %u\n", uc.nPort ); ok( uc.nPort == 443, "unexpected port: %u\n", uc.nPort );
reset_url_components( &uc ); reset_url_components( &uc );
@ -575,7 +575,7 @@ static void WinHttpCrackUrl_test( void )
reset_url_components( &uc ); reset_url_components( &uc );
ret = WinHttpCrackUrl( url12, 0, 0, &uc); ret = WinHttpCrackUrl( url12, 0, 0, &uc);
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" ); ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
ok( uc.lpszScheme == url12,"unexpected scheme\n" ); ok( uc.lpszScheme == url12,"unexpected scheme\n" );
ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" ); ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
@ -603,7 +603,7 @@ static void WinHttpCrackUrl_test( void )
uc.dwExtraInfoLength = 0; uc.dwExtraInfoLength = 0;
uc.nPort = 0; uc.nPort = 0;
ret = WinHttpCrackUrl( url13, 0, ICU_DECODE, &uc ); ret = WinHttpCrackUrl( url13, 0, ICU_DECODE, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
uc.lpszScheme = scheme; uc.lpszScheme = scheme;
uc.dwSchemeLength = 20; uc.dwSchemeLength = 20;
@ -619,7 +619,7 @@ static void WinHttpCrackUrl_test( void )
uc.dwExtraInfoLength = 0; uc.dwExtraInfoLength = 0;
uc.nPort = 0; uc.nPort = 0;
ret = WinHttpCrackUrl( url14, 0, ICU_ESCAPE|ICU_DECODE, &uc ); ret = WinHttpCrackUrl( url14, 0, ICU_ESCAPE|ICU_DECODE, &uc );
ok( ret, "WinHttpCrackUrl failed\n" ); ok( ret, "WinHttpCrackUrl failed le=%u\n", GetLastError() );
ok( !lstrcmpW( uc.lpszHostName, hostnameW ), "unexpected host name\n" ); ok( !lstrcmpW( uc.lpszHostName, hostnameW ), "unexpected host name\n" );
ok( !lstrcmpW( uc.lpszUrlPath, pathW ), "unexpected path\n" ); ok( !lstrcmpW( uc.lpszUrlPath, pathW ), "unexpected path\n" );
} }

View file

@ -41,7 +41,7 @@
static const WCHAR test_useragent[] = static const WCHAR test_useragent[] =
{'W','i','n','e',' ','R','e','g','r','e','s','s','i','o','n',' ','T','e','s','t',0}; {'W','i','n','e',' ','R','e','g','r','e','s','s','i','o','n',' ','T','e','s','t',0};
static const WCHAR test_server[] = {'w','i','n','e','h','q','.','o','r','g',0}; static const WCHAR test_winehq[] = {'t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',0};
static const WCHAR localhostW[] = {'l','o','c','a','l','h','o','s','t',0}; static const WCHAR localhostW[] = {'l','o','c','a','l','h','o','s','t',0};
static BOOL proxy_active(void) static BOOL proxy_active(void)
@ -146,7 +146,7 @@ static void test_QueryOption(void)
"expected ERROR_WINHTTP_INCORRECT_HANDLE_TYPE, got %u\n", GetLastError()); "expected ERROR_WINHTTP_INCORRECT_HANDLE_TYPE, got %u\n", GetLastError());
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
connection = WinHttpConnect(session, test_server, INTERNET_DEFAULT_HTTP_PORT, 0); connection = WinHttpConnect(session, test_winehq, INTERNET_DEFAULT_HTTP_PORT, 0);
ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u\n", GetLastError()); ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u\n", GetLastError());
feature = WINHTTP_DISABLE_COOKIES; feature = WINHTTP_DISABLE_COOKIES;
@ -227,7 +227,7 @@ static void test_OpenRequest (void)
ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError()); ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError());
/* Test with a valid server name */ /* Test with a valid server name */
connection = WinHttpConnect (session, test_server, INTERNET_DEFAULT_HTTP_PORT, 0); connection = WinHttpConnect (session, test_winehq, INTERNET_DEFAULT_HTTP_PORT, 0);
ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError()); ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError());
request = WinHttpOpenRequest(connection, NULL, NULL, NULL, WINHTTP_NO_REFERER, request = WinHttpOpenRequest(connection, NULL, NULL, NULL, WINHTTP_NO_REFERER,
@ -259,7 +259,6 @@ static void test_OpenRequest (void)
static void test_empty_headers_param(void) static void test_empty_headers_param(void)
{ {
static const WCHAR winehq[] = {'w','i','n','e','h','q','.','o','r','g',0};
static const WCHAR empty[] = {0}; static const WCHAR empty[] = {0};
HINTERNET ses, con, req; HINTERNET ses, con, req;
BOOL ret; BOOL ret;
@ -267,7 +266,7 @@ static void test_empty_headers_param(void)
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0); ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError()); ok(ses != NULL, "failed to open session %u\n", GetLastError());
con = WinHttpConnect(ses, winehq, 80, 0); con = WinHttpConnect(ses, test_winehq, 80, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0); req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0);
@ -283,6 +282,13 @@ static void test_empty_headers_param(void)
static void test_SendRequest (void) static void test_SendRequest (void)
{ {
static const WCHAR content_type[] =
{'C','o','n','t','e','n','t','-','T','y','p','e',':',' ','a','p','p','l','i','c','a','t','i','o','n',
'/','x','-','w','w','w','-','f','o','r','m','-','u','r','l','e','n','c','o','d','e','d',0};
static const WCHAR test_file[] = {'t','e','s','t','s','/','p','o','s','t','.','p','h','p',0};
static const WCHAR test_verb[] = {'P','O','S','T',0};
static CHAR post_data[] = "mode=Test";
static const char test_post[] = "mode => Test\0\n";
HINTERNET session, request, connection; HINTERNET session, request, connection;
DWORD header_len, optional_len, total_len, bytes_rw, size; DWORD header_len, optional_len, total_len, bytes_rw, size;
DWORD_PTR context; DWORD_PTR context;
@ -290,16 +296,6 @@ static void test_SendRequest (void)
CHAR buffer[256]; CHAR buffer[256];
int i; int i;
static const WCHAR test_site[] = {'c','r','o','s','s','o','v','e','r','.',
'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
static const WCHAR content_type[] =
{'C','o','n','t','e','n','t','-','T','y','p','e',':',' ','a','p','p','l','i','c','a','t','i','o','n',
'/','x','-','w','w','w','-','f','o','r','m','-','u','r','l','e','n','c','o','d','e','d',0};
static const WCHAR test_file[] = {'/','p','o','s','t','t','e','s','t','.','p','h','p',0};
static const WCHAR test_verb[] = {'P','O','S','T',0};
static CHAR post_data[] = "mode=Test";
static CHAR test_post[] = "mode => Test\\0\n";
header_len = -1L; header_len = -1L;
total_len = optional_len = sizeof(post_data); total_len = optional_len = sizeof(post_data);
memset(buffer, 0xff, sizeof(buffer)); memset(buffer, 0xff, sizeof(buffer));
@ -308,7 +304,7 @@ static void test_SendRequest (void)
WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
ok(session != NULL, "WinHttpOpen failed to open session.\n"); ok(session != NULL, "WinHttpOpen failed to open session.\n");
connection = WinHttpConnect (session, test_site, INTERNET_DEFAULT_HTTP_PORT, 0); connection = WinHttpConnect (session, test_winehq, INTERNET_DEFAULT_HTTP_PORT, 0);
ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError()); ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError());
request = WinHttpOpenRequest(connection, test_verb, test_file, NULL, WINHTTP_NO_REFERER, request = WinHttpOpenRequest(connection, test_verb, test_file, NULL, WINHTTP_NO_REFERER,
@ -355,8 +351,8 @@ static void test_SendRequest (void)
ret = WinHttpReadData(request, buffer, sizeof(buffer) - 1, &bytes_rw); ret = WinHttpReadData(request, buffer, sizeof(buffer) - 1, &bytes_rw);
ok(ret == TRUE, "WinHttpReadData failed: %u.\n", GetLastError()); ok(ret == TRUE, "WinHttpReadData failed: %u.\n", GetLastError());
ok(bytes_rw == strlen(test_post), "Read %u bytes instead of %d.\n", bytes_rw, lstrlen(test_post)); ok(bytes_rw == sizeof(test_post) - 1, "Read %u bytes\n", bytes_rw);
ok(strncmp(buffer, test_post, bytes_rw) == 0, "Data read did not match, got '%s'.\n", buffer); ok(!memcmp(buffer, test_post, sizeof(test_post) - 1), "Data read did not match.\n");
ret = WinHttpCloseHandle(request); ret = WinHttpCloseHandle(request);
ok(ret == TRUE, "WinHttpCloseHandle failed on closing request, got %d.\n", ret); ok(ret == TRUE, "WinHttpCloseHandle failed on closing request, got %d.\n", ret);
@ -413,15 +409,12 @@ static void test_WinHttpAddHeaders(void)
WCHAR check_buffer[MAX_PATH]; WCHAR check_buffer[MAX_PATH];
DWORD index, len, oldlen; DWORD index, len, oldlen;
static const WCHAR test_site[] = {'c','r','o','s','s','o','v','e','r','.',
'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
static const WCHAR test_file[] = {'/','p','o','s','t','t','e','s','t','.','p','h','p',0}; static const WCHAR test_file[] = {'/','p','o','s','t','t','e','s','t','.','p','h','p',0};
static const WCHAR test_verb[] = {'P','O','S','T',0}; static const WCHAR test_verb[] = {'P','O','S','T',0};
static const WCHAR test_header_begin[] = static const WCHAR test_header_begin[] =
{'P','O','S','T',' ','/','p','o','s','t','t','e','s','t','.','p','h','p',' ','H','T','T','P','/','1'}; {'P','O','S','T',' ','/','p','o','s','t','t','e','s','t','.','p','h','p',' ','H','T','T','P','/','1'};
static const WCHAR full_path_test_header_begin[] = static const WCHAR full_path_test_header_begin[] =
{'P','O','S','T',' ','h','t','t','p',':','/','/','c','r','o','s','s','o','v','e','r','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',':','8','0','/','p','o','s','t','t','e','s','t','.','p','h','p',' ','H','T','T','P','/','1'}; {'P','O','S','T',' ','h','t','t','p',':','/','/','t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',':','8','0','/','p','o','s','t','.','p','h','p',' ','H','T','T','P','/','1'};
static const WCHAR test_header_end[] = {'\r','\n','\r','\n',0}; static const WCHAR test_header_end[] = {'\r','\n','\r','\n',0};
static const WCHAR test_header_name[] = {'W','a','r','n','i','n','g',0}; static const WCHAR test_header_name[] = {'W','a','r','n','i','n','g',0};
@ -469,7 +462,7 @@ static void test_WinHttpAddHeaders(void)
WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0); WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
ok(session != NULL, "WinHttpOpen failed to open session.\n"); ok(session != NULL, "WinHttpOpen failed to open session.\n");
connection = WinHttpConnect (session, test_site, INTERNET_DEFAULT_HTTP_PORT, 0); connection = WinHttpConnect (session, test_winehq, INTERNET_DEFAULT_HTTP_PORT, 0);
ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError()); ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u.\n", GetLastError());
request = WinHttpOpenRequest(connection, test_verb, test_file, NULL, WINHTTP_NO_REFERER, request = WinHttpOpenRequest(connection, test_verb, test_file, NULL, WINHTTP_NO_REFERER,
@ -816,8 +809,6 @@ static void CALLBACK cert_error(HINTERNET handle, DWORD_PTR ctx, DWORD status, L
static void test_secure_connection(void) static void test_secure_connection(void)
{ {
static const WCHAR google[] = {'w','w','w','.','g','o','o','g','l','e','.','c','o','m',0};
HINTERNET ses, con, req; HINTERNET ses, con, req;
DWORD size, status, policy, bitness, read_size; DWORD size, status, policy, bitness, read_size;
BOOL ret; BOOL ret;
@ -832,7 +823,7 @@ static void test_secure_connection(void)
ret = WinHttpSetOption(ses, WINHTTP_OPTION_REDIRECT_POLICY, &policy, sizeof(policy)); ret = WinHttpSetOption(ses, WINHTTP_OPTION_REDIRECT_POLICY, &policy, sizeof(policy));
ok(ret, "failed to set redirect policy %u\n", GetLastError()); ok(ret, "failed to set redirect policy %u\n", GetLastError());
con = WinHttpConnect(ses, google, 443, 0); con = WinHttpConnect(ses, test_winehq, 443, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
/* try without setting WINHTTP_FLAG_SECURE */ /* try without setting WINHTTP_FLAG_SECURE */
@ -922,8 +913,6 @@ cleanup:
static void test_request_parameter_defaults(void) static void test_request_parameter_defaults(void)
{ {
static const WCHAR empty[] = {0}; static const WCHAR empty[] = {0};
static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
HINTERNET ses, con, req; HINTERNET ses, con, req;
DWORD size, status, error; DWORD size, status, error;
WCHAR *version; WCHAR *version;
@ -932,7 +921,7 @@ static void test_request_parameter_defaults(void)
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0); ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError()); ok(ses != NULL, "failed to open session %u\n", GetLastError());
con = WinHttpConnect(ses, codeweavers, 0, 0); con = WinHttpConnect(ses, test_winehq, 0, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0); req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0);
@ -1126,8 +1115,6 @@ static void test_Timeouts (void)
BOOL ret; BOOL ret;
DWORD value, size; DWORD value, size;
HINTERNET ses, req, con; HINTERNET ses, req, con;
static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0); ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError()); ok(ses != NULL, "failed to open session %u\n", GetLastError());
@ -1288,7 +1275,7 @@ static void test_Timeouts (void)
ok(ret, "%u\n", GetLastError()); ok(ret, "%u\n", GetLastError());
ok(value == 0xbeefdead, "Expected 0xbeefdead, got %u\n", value); ok(value == 0xbeefdead, "Expected 0xbeefdead, got %u\n", value);
con = WinHttpConnect(ses, codeweavers, 0, 0); con = WinHttpConnect(ses, test_winehq, 0, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
/* Timeout values should match the last one set for session */ /* Timeout values should match the last one set for session */
@ -1717,11 +1704,8 @@ static void test_Timeouts (void)
static void test_resolve_timeout(void) static void test_resolve_timeout(void)
{ {
static const WCHAR codeweavers[] =
{'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
static const WCHAR nxdomain[] = static const WCHAR nxdomain[] =
{'n','x','d','o','m','a','i','n','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0}; {'n','x','d','o','m','a','i','n','.','w','i','n','e','h','q','.','o','r','g',0};
HINTERNET ses, con, req; HINTERNET ses, con, req;
DWORD timeout; DWORD timeout;
BOOL ret; BOOL ret;
@ -1743,6 +1727,11 @@ static void test_resolve_timeout(void)
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0); ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0);
if(ret == 1)
{
skip("nxdomain returned success. Broken ISP redirects?\n");
return;
}
ok(!ret, "sent request\n"); ok(!ret, "sent request\n");
ok(GetLastError() == ERROR_WINHTTP_NAME_NOT_RESOLVED, ok(GetLastError() == ERROR_WINHTTP_NAME_NOT_RESOLVED,
"expected ERROR_WINHTTP_NAME_NOT_RESOLVED got %u\n", GetLastError()); "expected ERROR_WINHTTP_NAME_NOT_RESOLVED got %u\n", GetLastError());
@ -1761,7 +1750,7 @@ static void test_resolve_timeout(void)
ret = WinHttpSetOption(ses, WINHTTP_OPTION_RESOLVE_TIMEOUT, &timeout, sizeof(timeout)); ret = WinHttpSetOption(ses, WINHTTP_OPTION_RESOLVE_TIMEOUT, &timeout, sizeof(timeout));
ok(ret, "failed to set resolve timeout %u\n", GetLastError()); ok(ret, "failed to set resolve timeout %u\n", GetLastError());
con = WinHttpConnect(ses, codeweavers, 0, 0); con = WinHttpConnect(ses, test_winehq, 0, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError()); ok(con != NULL, "failed to open a connection %u\n", GetLastError());
req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0); req = WinHttpOpenRequest(con, NULL, NULL, NULL, NULL, NULL, 0);
@ -1806,6 +1795,8 @@ struct server_info
int port; int port;
}; };
#define BIG_BUFFER_LEN 0x2250
static DWORD CALLBACK server_thread(LPVOID param) static DWORD CALLBACK server_thread(LPVOID param)
{ {
struct server_info *si = param; struct server_info *si = param;
@ -1863,6 +1854,13 @@ static DWORD CALLBACK server_thread(LPVOID param)
else else
send(c, noauthmsg, sizeof noauthmsg - 1, 0); send(c, noauthmsg, sizeof noauthmsg - 1, 0);
} }
if (strstr(buffer, "/big"))
{
char msg[BIG_BUFFER_LEN];
memset(msg, 'm', sizeof(msg));
send(c, okmsg, sizeof(okmsg) - 1, 0);
send(c, msg, sizeof(msg), 0);
}
if (strstr(buffer, "/no_headers")) if (strstr(buffer, "/no_headers"))
{ {
send(c, page1, sizeof page1 - 1, 0); send(c, page1, sizeof page1 - 1, 0);
@ -2085,13 +2083,19 @@ static void test_no_headers(int port)
ok(req != NULL, "failed to open a request %u\n", GetLastError()); ok(req != NULL, "failed to open a request %u\n", GetLastError());
ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0); ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0);
ok(ret, "failed to send request %u\n", GetLastError()); if (!ret)
{
SetLastError(0xdeadbeef); error = GetLastError();
ret = WinHttpReceiveResponse(req, NULL); ok(error == ERROR_WINHTTP_INVALID_SERVER_RESPONSE, "got %u\n", error);
error = GetLastError(); }
ok(!ret, "expected failure\n"); else
ok(error == ERROR_WINHTTP_INVALID_SERVER_RESPONSE, "got %u\n", error); {
SetLastError(0xdeadbeef);
ret = WinHttpReceiveResponse(req, NULL);
error = GetLastError();
ok(!ret, "expected failure\n");
ok(error == ERROR_WINHTTP_INVALID_SERVER_RESPONSE, "got %u\n", error);
}
WinHttpCloseHandle(req); WinHttpCloseHandle(req);
WinHttpCloseHandle(con); WinHttpCloseHandle(con);
@ -2135,6 +2139,55 @@ static void test_bad_header( int port )
WinHttpCloseHandle( ses ); WinHttpCloseHandle( ses );
} }
static void test_multiple_reads(int port)
{
static const WCHAR bigW[] = {'b','i','g',0};
HINTERNET ses, con, req;
DWORD total_len = 0;
BOOL ret;
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError());
con = WinHttpConnect(ses, localhostW, port, 0);
ok(con != NULL, "failed to open a connection %u\n", GetLastError());
req = WinHttpOpenRequest(con, NULL, bigW, NULL, NULL, NULL, 0);
ok(req != NULL, "failed to open a request %u\n", GetLastError());
ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0);
ok(ret, "failed to send request %u\n", GetLastError());
ret = WinHttpReceiveResponse(req, NULL);
ok(ret == TRUE, "expected success\n");
for (;;)
{
DWORD len = 0xdeadbeef;
ret = WinHttpQueryDataAvailable( req, &len );
ok( ret, "WinHttpQueryDataAvailable failed with error %u\n", GetLastError() );
if (ret) ok( len != 0xdeadbeef, "WinHttpQueryDataAvailable return wrong length\n" );
if (len)
{
DWORD bytes_read;
char *buf = HeapAlloc( GetProcessHeap(), 0, len + 1 );
ret = WinHttpReadData( req, buf, len, &bytes_read );
ok( len == bytes_read, "only got %u of %u available\n", bytes_read, len );
HeapFree( GetProcessHeap(), 0, buf );
if (!bytes_read) break;
total_len += bytes_read;
}
if (!len) break;
}
ok(total_len == BIG_BUFFER_LEN, "got wrong length: 0x%x\n", total_len);
WinHttpCloseHandle(req);
WinHttpCloseHandle(con);
WinHttpCloseHandle(ses);
}
static void test_connection_info( int port ) static void test_connection_info( int port )
{ {
static const WCHAR basicW[] = {'/','b','a','s','i','c',0}; static const WCHAR basicW[] = {'/','b','a','s','i','c',0};
@ -2319,11 +2372,10 @@ static void test_IWinHttpRequest(void)
{ {
static const WCHAR usernameW[] = {'u','s','e','r','n','a','m','e',0}; static const WCHAR usernameW[] = {'u','s','e','r','n','a','m','e',0};
static const WCHAR passwordW[] = {'p','a','s','s','w','o','r','d',0}; static const WCHAR passwordW[] = {'p','a','s','s','w','o','r','d',0};
static const WCHAR url1W[] = {'h','t','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g',0}; static const WCHAR url1W[] = {'h','t','t','p',':','/','/','t','e','s','t','.','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 url2W[] = {'t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',0};
static const WCHAR url3W[] = {'h','t','t','p',':','/','/','c','r','o','s','s','o','v','e','r','.', static const WCHAR url3W[] = {'h','t','t','p',':','/','/','t','e','s','t','.','w','i','n','e','h','q','.',
'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m','/', 'o','r','g','/','t','e','s','t','s','/','p','o','s','t','.','p','h','p',0};
'p','o','s','t','t','e','s','t','.','p','h','p',0};
static const WCHAR method1W[] = {'G','E','T',0}; static const WCHAR method1W[] = {'G','E','T',0};
static const WCHAR method2W[] = {'I','N','V','A','L','I','D',0}; static const WCHAR method2W[] = {'I','N','V','A','L','I','D',0};
static const WCHAR method3W[] = {'P','O','S','T',0}; static const WCHAR method3W[] = {'P','O','S','T',0};
@ -2764,7 +2816,7 @@ if (0) /* crashes on some win2k systems */
if (!ret) if (!ret)
{ {
ok( error == ERROR_WINHTTP_AUTODETECTION_FAILED, "got %u\n", error ); ok( error == ERROR_WINHTTP_AUTODETECTION_FAILED, "got %u\n", error );
ok( url == (WCHAR *)0xdeadbeef, "got %p\n", url ); ok( !url || broken(url == (WCHAR *)0xdeadbeef), "got %p\n", url );
} }
else else
{ {
@ -2779,7 +2831,7 @@ if (0) /* crashes on some win2k systems */
if (!ret) if (!ret)
{ {
ok( error == ERROR_WINHTTP_AUTODETECTION_FAILED, "got %u\n", error ); ok( error == ERROR_WINHTTP_AUTODETECTION_FAILED, "got %u\n", error );
ok( url == (WCHAR *)0xdeadbeef, "got %p\n", url ); ok( !url || broken(url == (WCHAR *)0xdeadbeef), "got %p\n", url );
} }
else else
{ {
@ -2926,7 +2978,6 @@ static void test_WinHttpGetProxyForUrl(void)
static void test_chunked_read(void) static void test_chunked_read(void)
{ {
static const WCHAR host[] = {'t','e','s','t','.','w','i','n','e','h','q','.','o','r','g',0};
static const WCHAR verb[] = {'/','t','e','s','t','c','h','u','n','k','e','d',0}; static const WCHAR verb[] = {'/','t','e','s','t','c','h','u','n','k','e','d',0};
static const WCHAR chunked[] = {'c','h','u','n','k','e','d',0}; static const WCHAR chunked[] = {'c','h','u','n','k','e','d',0};
WCHAR header[32]; WCHAR header[32];
@ -2940,7 +2991,7 @@ static void test_chunked_read(void)
ok( ses != NULL, "WinHttpOpen failed with error %u\n", GetLastError() ); ok( ses != NULL, "WinHttpOpen failed with error %u\n", GetLastError() );
if (!ses) goto done; if (!ses) goto done;
con = WinHttpConnect( ses, host, 0, 0 ); con = WinHttpConnect( ses, test_winehq, 0, 0 );
ok( con != NULL, "WinHttpConnect failed with error %u\n", GetLastError() ); ok( con != NULL, "WinHttpConnect failed with error %u\n", GetLastError() );
if (!con) goto done; if (!con) goto done;
@ -3028,7 +3079,7 @@ START_TEST (winhttp)
test_WinHttpGetProxyForUrl(); test_WinHttpGetProxyForUrl();
test_chunked_read(); test_chunked_read();
si.event = CreateEvent(NULL, 0, 0, NULL); si.event = CreateEventW(NULL, 0, 0, NULL);
si.port = 7532; si.port = 7532;
thread = CreateThread(NULL, 0, server_thread, (LPVOID)&si, 0, NULL); thread = CreateThread(NULL, 0, server_thread, (LPVOID)&si, 0, NULL);
@ -3044,6 +3095,7 @@ START_TEST (winhttp)
test_no_headers(si.port); test_no_headers(si.port);
test_basic_authentication(si.port); test_basic_authentication(si.port);
test_bad_header(si.port); test_bad_header(si.port);
test_multiple_reads(si.port);
/* send the basic request again to shutdown the server thread */ /* send the basic request again to shutdown the server thread */
test_basic_request(si.port, NULL, quitW); test_basic_request(si.port, NULL, quitW);