mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[WININET_WINETEST]
- Sync to Wine 1.5.4 svn path=/trunk/; revision=56759
This commit is contained in:
parent
cbe36a0d88
commit
b2ba0a3a03
5 changed files with 405 additions and 184 deletions
|
@ -2,8 +2,7 @@
|
|||
remove_definitions(-DWINVER=0x502 -D_WIN32_IE=0x600 -D_WIN32_WINNT=0x502)
|
||||
|
||||
add_definitions(
|
||||
-D__ROS_LONG64__
|
||||
-D_DLL -D__USE_CRTIMP)
|
||||
-D__ROS_LONG64__)
|
||||
|
||||
list(APPEND SOURCE
|
||||
ftp.c
|
||||
|
|
|
@ -726,8 +726,7 @@ static void test_command(HINTERNET hFtp, HINTERNET hConnect)
|
|||
{ TRUE, ERROR_SUCCESS, "SIZE\t/welcome.msg" },
|
||||
{ TRUE, ERROR_SUCCESS, "SIZE /welcome.msg" },
|
||||
{ FALSE, ERROR_INTERNET_EXTENDED_ERROR, "PWD /welcome.msg" },
|
||||
{ TRUE, ERROR_SUCCESS, "PWD" },
|
||||
{ TRUE, ERROR_SUCCESS, "PWD\r\n" }
|
||||
{ TRUE, ERROR_SUCCESS, "PWD" }
|
||||
};
|
||||
|
||||
if (!pFtpCommandA)
|
||||
|
|
|
@ -103,11 +103,11 @@ static int expect[MAX_INTERNET_STATUS], optional[MAX_INTERNET_STATUS],
|
|||
static const char *status_string[MAX_INTERNET_STATUS];
|
||||
|
||||
static HANDLE hCompleteEvent, conn_close_event;
|
||||
static DWORD req_error;
|
||||
|
||||
#define TESTF_REDIRECT 0x01
|
||||
#define TESTF_COMPRESSED 0x02
|
||||
#define TESTF_ALLOW_COOKIE 0x04
|
||||
#define TESTF_CHUNKED 0x08
|
||||
#define TESTF_CHUNKED 0x04
|
||||
|
||||
typedef struct {
|
||||
const char *url;
|
||||
|
@ -143,7 +143,7 @@ static const test_data_t test_data[] = {
|
|||
"www.codeweavers.com",
|
||||
"",
|
||||
"Accept-Encoding: gzip, deflate",
|
||||
TESTF_COMPRESSED|TESTF_ALLOW_COOKIE
|
||||
TESTF_COMPRESSED
|
||||
},
|
||||
{
|
||||
"http://test.winehq.org/tests/post.php",
|
||||
|
@ -178,6 +178,48 @@ static BOOL proxy_active(void)
|
|||
return proxy_enable != 0;
|
||||
}
|
||||
|
||||
#define test_status_code(a,b) _test_status_code(__LINE__,a,b)
|
||||
static void _test_status_code(unsigned line, HINTERNET req, DWORD excode)
|
||||
{
|
||||
DWORD code, size, index;
|
||||
char exbuf[10], bufa[10];
|
||||
BOOL res;
|
||||
|
||||
code = 0xdeadbeef;
|
||||
size = sizeof(code);
|
||||
res = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &code, &size, NULL);
|
||||
ok_(__FILE__,line)(res, "HttpQueryInfo(HTTP_QUERY_STATUS_CODE|number) failed: %u\n", GetLastError());
|
||||
ok_(__FILE__,line)(code == excode, "code = %d, expected %d\n", code, excode);
|
||||
|
||||
code = 0xdeadbeef;
|
||||
index = 0;
|
||||
size = sizeof(code);
|
||||
res = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &code, &size, &index);
|
||||
ok_(__FILE__,line)(res, "HttpQueryInfo(HTTP_QUERY_STATUS_CODE|number index) failed: %u\n", GetLastError());
|
||||
ok_(__FILE__,line)(code == excode, "code = %d, expected %d\n", code, excode);
|
||||
ok_(__FILE__,line)(!index, "index = %d, expected 0\n", code);
|
||||
|
||||
sprintf(exbuf, "%u", excode);
|
||||
|
||||
size = sizeof(bufa);
|
||||
res = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE, bufa, &size, NULL);
|
||||
ok_(__FILE__,line)(res, "HttpQueryInfo(HTTP_QUERY_STATUS_CODE) failed: %u\n", GetLastError());
|
||||
ok_(__FILE__,line)(!strcmp(bufa, exbuf), "unexpected status code %s, expected %s", bufa, exbuf);
|
||||
|
||||
code = 0xdeadbeef;
|
||||
index = 1;
|
||||
size = sizeof(code);
|
||||
res = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE||HTTP_QUERY_FLAG_NUMBER, &code, &size, &index);
|
||||
ok_(__FILE__,line)(!res && GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND,
|
||||
"HttpQueryInfo failed: %x(%d)\n", res, GetLastError());
|
||||
|
||||
code = 0xdeadbeef;
|
||||
size = sizeof(code);
|
||||
res = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE||HTTP_QUERY_FLAG_REQUEST_HEADERS, &code, &size, NULL);
|
||||
ok_(__FILE__,line)(!res && GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND,
|
||||
"HttpQueryInfo failed: %x(%d)\n", res, GetLastError());
|
||||
}
|
||||
|
||||
static int close_handle_cnt;
|
||||
|
||||
static VOID WINAPI callback(
|
||||
|
@ -287,9 +329,11 @@ static VOID WINAPI callback(
|
|||
ok(dwStatusInformationLength == sizeof(INTERNET_ASYNC_RESULT),
|
||||
"info length should be sizeof(INTERNET_ASYNC_RESULT) instead of %d\n",
|
||||
dwStatusInformationLength);
|
||||
ok(iar->dwResult == 1 || iar->dwResult == 0, "iar->dwResult = %ld\n", iar->dwResult);
|
||||
trace("%04x:Callback %p 0x%lx INTERNET_STATUS_REQUEST_COMPLETE {%ld,%d} %d\n",
|
||||
GetCurrentThreadId(), hInternet, dwContext,
|
||||
iar->dwResult,iar->dwError,dwStatusInformationLength);
|
||||
req_error = iar->dwError;
|
||||
SetEvent(hCompleteEvent);
|
||||
break;
|
||||
}
|
||||
|
@ -396,10 +440,8 @@ static void InternetReadFile_test(int flags, const test_data_t *test)
|
|||
CHECK_NOTIFIED(INTERNET_STATUS_HANDLE_CREATED);
|
||||
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
|
||||
CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
|
||||
if(test->flags & TESTF_ALLOW_COOKIE) {
|
||||
SET_OPTIONAL(INTERNET_STATUS_COOKIE_SENT);
|
||||
SET_OPTIONAL(INTERNET_STATUS_COOKIE_RECEIVED);
|
||||
}
|
||||
SET_OPTIONAL2(INTERNET_STATUS_COOKIE_SENT,2);
|
||||
SET_OPTIONAL2(INTERNET_STATUS_COOKIE_RECEIVED,2);
|
||||
if (first_connection_to_test_url)
|
||||
{
|
||||
SET_EXPECT(INTERNET_STATUS_RESOLVING_NAME);
|
||||
|
@ -431,6 +473,8 @@ static void InternetReadFile_test(int flags, const test_data_t *test)
|
|||
goto abort;
|
||||
}
|
||||
|
||||
test_status_code(hor, 0);
|
||||
|
||||
trace("HttpSendRequestA -->\n");
|
||||
if(test->post_data) {
|
||||
post_len = strlen(test->post_data);
|
||||
|
@ -447,14 +491,14 @@ static void InternetReadFile_test(int flags, const test_data_t *test)
|
|||
"Synchronous HttpSendRequest returning 0, error %u\n", GetLastError());
|
||||
trace("HttpSendRequestA <--\n");
|
||||
|
||||
if (flags & INTERNET_FLAG_ASYNC)
|
||||
if (flags & INTERNET_FLAG_ASYNC) {
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
}
|
||||
HeapFree(GetProcessHeap(), 0, post_data);
|
||||
|
||||
if(test->flags & TESTF_ALLOW_COOKIE) {
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_SENT);
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_RECEIVED);
|
||||
}
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_SENT);
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_RECEIVED);
|
||||
if (first_connection_to_test_url)
|
||||
{
|
||||
if (! proxy_active())
|
||||
|
@ -549,6 +593,7 @@ static void InternetReadFile_test(int flags, const test_data_t *test)
|
|||
ok(!length, "InternetQueryDataAvailable returned ERROR_IO_PENDING and %u length\n", length);
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
ok(req_error, "req_error = 0\n");
|
||||
continue;
|
||||
}else {
|
||||
ok(0, "InternetQueryDataAvailable failed: %u\n", GetLastError());
|
||||
|
@ -760,6 +805,7 @@ static void InternetReadFileExA_test(int flags)
|
|||
SET_EXPECT(INTERNET_STATUS_RESOLVING_NAME);
|
||||
SET_EXPECT(INTERNET_STATUS_NAME_RESOLVED);
|
||||
}
|
||||
SET_OPTIONAL2(INTERNET_STATUS_COOKIE_SENT, 2);
|
||||
SET_EXPECT(INTERNET_STATUS_CONNECTING_TO_SERVER);
|
||||
SET_EXPECT(INTERNET_STATUS_CONNECTED_TO_SERVER);
|
||||
SET_EXPECT2(INTERNET_STATUS_SENDING_REQUEST, 2);
|
||||
|
@ -787,8 +833,10 @@ static void InternetReadFileExA_test(int flags)
|
|||
"Synchronous HttpSendRequest returning 0, error %u\n", GetLastError());
|
||||
trace("HttpSendRequestA <--\n");
|
||||
|
||||
if (!rc && (GetLastError() == ERROR_IO_PENDING))
|
||||
if (!rc && (GetLastError() == ERROR_IO_PENDING)) {
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
}
|
||||
|
||||
if (first_connection_to_test_url)
|
||||
{
|
||||
|
@ -811,6 +859,7 @@ static void InternetReadFileExA_test(int flags)
|
|||
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
else
|
||||
todo_wine CHECK_NOT_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_SENT);
|
||||
/* Sent on WinXP only if first_connection_to_test_url is TRUE, on Win98 always sent */
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTING_TO_SERVER);
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTED_TO_SERVER);
|
||||
|
@ -841,7 +890,7 @@ static void InternetReadFileExA_test(int flags)
|
|||
SET_EXPECT(INTERNET_STATUS_RESPONSE_RECEIVED);
|
||||
rc = InternetReadFileEx(hor, &inetbuffers, 0, 0xdeadcafe);
|
||||
ok(rc, "InternetReadFileEx failed with error %u\n", GetLastError());
|
||||
trace("read %i bytes\n", inetbuffers.dwBufferLength);
|
||||
trace("read %i bytes\n", inetbuffers.dwBufferLength);
|
||||
todo_wine
|
||||
{
|
||||
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RECEIVING_RESPONSE);
|
||||
|
@ -879,6 +928,7 @@ static void InternetReadFileExA_test(int flags)
|
|||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESPONSE_RECEIVED);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1842,7 +1892,7 @@ static void test_last_error(int port)
|
|||
static void test_proxy_indirect(int port)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
DWORD r, sz, val;
|
||||
DWORD r, sz;
|
||||
char buffer[0x40];
|
||||
|
||||
hi = InternetOpen(NULL, 0, NULL, NULL, 0);
|
||||
|
@ -1867,15 +1917,7 @@ static void test_proxy_indirect(int port)
|
|||
}
|
||||
ok(!strcmp(buffer, "Basic realm=\"placebo\""), "proxy auth info wrong\n");
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE, buffer, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "407"), "proxy code wrong\n");
|
||||
|
||||
sz = sizeof val;
|
||||
r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &val, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(val == 407, "proxy code wrong\n");
|
||||
test_status_code(hr, 407);
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_TEXT, buffer, &sz, NULL);
|
||||
|
@ -1925,11 +1967,7 @@ static void test_proxy_direct(int port)
|
|||
r = HttpSendRequest(hr, NULL, 0, NULL, 0);
|
||||
ok(r, "HttpSendRequest failed\n");
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE, buffer, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "407"), "proxy code wrong\n");
|
||||
|
||||
test_status_code(hr, 407);
|
||||
|
||||
/* set the user + password then try again */
|
||||
todo_wine {
|
||||
|
@ -1980,11 +2018,7 @@ static void test_header_handling_order(int port)
|
|||
ret = HttpSendRequest(request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo( request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL );
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(request, 200);
|
||||
|
||||
InternetCloseHandle(request);
|
||||
|
||||
|
@ -2025,7 +2059,6 @@ static void test_header_handling_order(int port)
|
|||
static void test_connection_header(int port)
|
||||
{
|
||||
HINTERNET ses, con, req;
|
||||
DWORD size, status;
|
||||
BOOL ret;
|
||||
|
||||
ses = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
|
@ -2040,11 +2073,7 @@ static void test_connection_header(int port)
|
|||
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(req, 200);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
|
||||
|
@ -2054,11 +2083,7 @@ static void test_connection_header(int port)
|
|||
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(req, 200);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
|
||||
|
@ -2068,11 +2093,7 @@ static void test_connection_header(int port)
|
|||
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(req, 200);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
|
||||
|
@ -2082,11 +2103,7 @@ static void test_connection_header(int port)
|
|||
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(req, 200);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
|
@ -2165,6 +2182,7 @@ static void test_no_content(int port)
|
|||
ok(!res && (GetLastError() == ERROR_IO_PENDING),
|
||||
"Asynchronous HttpSendRequest NOT returning 0 with error ERROR_IO_PENDING\n");
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_SENT);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_CONNECTING_TO_SERVER);
|
||||
|
@ -2222,6 +2240,7 @@ static void test_conn_close(int port)
|
|||
ok(!res && (GetLastError() == ERROR_IO_PENDING),
|
||||
"Asynchronous HttpSendRequest NOT returning 0 with error ERROR_IO_PENDING\n");
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
|
||||
CLEAR_NOTIFIED(INTERNET_STATUS_COOKIE_SENT);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_CONNECTING_TO_SERVER);
|
||||
|
@ -2251,6 +2270,7 @@ static void test_conn_close(int port)
|
|||
SET_EXPECT(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
SetEvent(conn_close_event);
|
||||
WaitForSingleObject(hCompleteEvent, INFINITE);
|
||||
ok(req_error == ERROR_SUCCESS, "req_error = %u\n", req_error);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
|
||||
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
|
||||
|
@ -2292,7 +2312,7 @@ static void test_HttpSendRequestW(int port)
|
|||
static void test_cookie_header(int port)
|
||||
{
|
||||
HINTERNET ses, con, req;
|
||||
DWORD size, status, error;
|
||||
DWORD size, error;
|
||||
BOOL ret;
|
||||
char buffer[64];
|
||||
|
||||
|
@ -2327,11 +2347,7 @@ static void test_cookie_header(int port)
|
|||
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed: %u\n", GetLastError());
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(req, 200);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
|
@ -2347,7 +2363,6 @@ static void test_cookie_header(int port)
|
|||
static void test_basic_authentication(int port)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
DWORD size, status;
|
||||
BOOL ret;
|
||||
|
||||
session = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
|
@ -2362,11 +2377,7 @@ static void test_basic_authentication(int port)
|
|||
ret = HttpSendRequest(request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed %u\n", GetLastError());
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo( request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL );
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 200, "request failed with status %u\n", status);
|
||||
test_status_code(request, 200);
|
||||
|
||||
InternetCloseHandle(request);
|
||||
InternetCloseHandle(connect);
|
||||
|
@ -2376,7 +2387,7 @@ static void test_basic_authentication(int port)
|
|||
static void test_invalid_response_headers(int port)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
DWORD size, status;
|
||||
DWORD size;
|
||||
BOOL ret;
|
||||
char buffer[256];
|
||||
|
||||
|
@ -2392,11 +2403,7 @@ static void test_invalid_response_headers(int port)
|
|||
ret = HttpSendRequest(request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed %u\n", GetLastError());
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
ret = HttpQueryInfo( request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL );
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(status == 401, "unexpected status %u\n", status);
|
||||
test_status_code(request, 401);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
|
@ -2419,7 +2426,7 @@ static void test_invalid_response_headers(int port)
|
|||
static void test_response_without_headers(int port)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
DWORD r, count, size, status;
|
||||
DWORD r, count, size;
|
||||
char buffer[1024];
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
|
@ -2446,12 +2453,7 @@ static void test_response_without_headers(int port)
|
|||
todo_wine ok(count == sizeof page1 - 1, "count was wrong\n");
|
||||
todo_wine ok(!memcmp(buffer, page1, sizeof page1), "http data wrong\n");
|
||||
|
||||
status = 0;
|
||||
size = sizeof(status);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL );
|
||||
todo_wine ok(r, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
todo_wine ok(status == 200, "expected status 200 got %u\n", status);
|
||||
test_status_code(hr, 200);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
|
@ -2536,17 +2538,7 @@ static void test_HttpQueryInfo(int port)
|
|||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
test_status_code(hr, 200);
|
||||
|
||||
index = 0xdeadbeef;
|
||||
size = sizeof(buffer);
|
||||
|
@ -2685,6 +2677,27 @@ static void test_options(int port)
|
|||
ok(ret, "InternetQueryOption failed %u\n", GetLastError());
|
||||
ok(ctx == 3, "expected 3 got %lu\n", ctx);
|
||||
|
||||
/* INTERNET_OPTION_PROXY */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = InternetQueryOptionA(ses, INTERNET_OPTION_PROXY, NULL, NULL);
|
||||
error = GetLastError();
|
||||
ok(!ret, "InternetQueryOption succeeded\n");
|
||||
ok(error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %u\n", error);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = InternetQueryOptionA(ses, INTERNET_OPTION_PROXY, &ctx, NULL);
|
||||
error = GetLastError();
|
||||
ok(!ret, "InternetQueryOption succeeded\n");
|
||||
ok(error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %u\n", error);
|
||||
|
||||
size = 0;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = InternetQueryOptionA(ses, INTERNET_OPTION_PROXY, NULL, &size);
|
||||
error = GetLastError();
|
||||
ok(!ret, "InternetQueryOption succeeded\n");
|
||||
ok(error == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", error);
|
||||
ok(size >= sizeof(INTERNET_PROXY_INFOA), "expected size to be greater or equal to the struct size\n");
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
InternetCloseHandle(ses);
|
||||
|
@ -3052,7 +3065,7 @@ static void test_bogus_accept_types_array(void)
|
|||
{
|
||||
HINTERNET ses, con, req;
|
||||
static const char *types[] = { (const char *)6240, "*/*", "%p", "", (const char *)0xffffffff, "*/*", NULL };
|
||||
DWORD size;
|
||||
DWORD size, error;
|
||||
char buffer[32];
|
||||
BOOL ret;
|
||||
|
||||
|
@ -3064,11 +3077,14 @@ static void test_bogus_accept_types_array(void)
|
|||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = HttpQueryInfo(req, HTTP_QUERY_ACCEPT | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed: %u\n", GetLastError());
|
||||
ok(!strcmp(buffer, ", */*, %p, , , */*") || /* IE6 */
|
||||
!strcmp(buffer, "*/*, %p, */*"),
|
||||
"got '%s' expected '*/*, %%p, */*' or ', */*, %%p, , , */*'\n", buffer);
|
||||
error = GetLastError();
|
||||
ok(!ret || broken(ret), "HttpQueryInfo succeeded\n");
|
||||
if (!ret) ok(error == ERROR_HTTP_HEADER_NOT_FOUND, "expected ERROR_HTTP_HEADER_NOT_FOUND, got %u\n", error);
|
||||
ok(broken(!strcmp(buffer, ", */*, %p, , , */*")) /* IE6 */ ||
|
||||
broken(!strcmp(buffer, "*/*, %p, */*")) /* IE7/8 */ ||
|
||||
!strcmp(buffer, ""), "got '%s' expected ''\n", buffer);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
|
@ -3185,6 +3201,8 @@ struct info
|
|||
HANDLE wait;
|
||||
DWORD thread;
|
||||
unsigned int line;
|
||||
DWORD expect_result;
|
||||
BOOL is_aborted;
|
||||
};
|
||||
|
||||
static CRITICAL_SECTION notification_cs;
|
||||
|
@ -3197,11 +3215,27 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
|
|||
|
||||
EnterCriticalSection( ¬ification_cs );
|
||||
|
||||
if(info->is_aborted) {
|
||||
LeaveCriticalSection(¬ification_cs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (status == INTERNET_STATUS_HANDLE_CREATED)
|
||||
{
|
||||
DWORD size = sizeof(struct info *);
|
||||
HttpQueryInfoA( handle, INTERNET_OPTION_CONTEXT_VALUE, &info, &size, 0 );
|
||||
}else if(status == INTERNET_STATUS_REQUEST_COMPLETE) {
|
||||
INTERNET_ASYNC_RESULT *ar = (INTERNET_ASYNC_RESULT*)buffer;
|
||||
|
||||
ok(buflen == sizeof(*ar), "unexpected buflen = %d\n", buflen);
|
||||
if(info->expect_result == ERROR_SUCCESS) {
|
||||
ok(ar->dwResult == 1, "ar->dwResult = %ld, expected 1\n", ar->dwResult);
|
||||
}else {
|
||||
ok(!ar->dwResult, "ar->dwResult = %ld, expected 1\n", ar->dwResult);
|
||||
ok(ar->dwError == info->expect_result, "ar->dwError = %d, expected %d\n", ar->dwError, info->expect_result);
|
||||
}
|
||||
}
|
||||
|
||||
i = info->index;
|
||||
if (i >= info->count)
|
||||
{
|
||||
|
@ -3209,7 +3243,8 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
|
|||
return;
|
||||
}
|
||||
|
||||
while (info->test[i].status != status && info->test[i].optional &&
|
||||
while (info->test[i].status != status &&
|
||||
(info->test[i].optional || info->test[i].todo) &&
|
||||
i < info->count - 1 &&
|
||||
info->test[i].function == info->test[i + 1].function)
|
||||
{
|
||||
|
@ -3240,17 +3275,30 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
|
|||
LeaveCriticalSection( ¬ification_cs );
|
||||
}
|
||||
|
||||
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, DWORD expect_result )
|
||||
{
|
||||
info->function = function;
|
||||
info->line = line;
|
||||
info->expect_result = expect_result;
|
||||
}
|
||||
|
||||
struct notification_data
|
||||
{
|
||||
const struct notification *test;
|
||||
const unsigned int count;
|
||||
const char *method;
|
||||
const char *host;
|
||||
const char *path;
|
||||
const char *data;
|
||||
BOOL expect_conn_failure;
|
||||
};
|
||||
|
||||
static const struct notification async_send_request_ex_test[] =
|
||||
{
|
||||
{ internet_connect, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_open_request, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_DETECTING_PROXY, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_COOKIE_SENT, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_RESOLVING_NAME, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_NAME_RESOLVED, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_CONNECTING_TO_SERVER, 1 },
|
||||
|
@ -3269,7 +3317,71 @@ static const struct notification async_send_request_ex_test[] =
|
|||
{ internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, }
|
||||
};
|
||||
|
||||
static void test_async_HttpSendRequestEx(void)
|
||||
static const struct notification async_send_request_ex_test2[] =
|
||||
{
|
||||
{ internet_connect, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_open_request, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_DETECTING_PROXY, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_COOKIE_SENT, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_RESOLVING_NAME, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_NAME_RESOLVED, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_CONNECTING_TO_SERVER, 1, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_CONNECTED_TO_SERVER, 1, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_SENDING_REQUEST, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_REQUEST_SENT, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
|
||||
{ http_end_request, INTERNET_STATUS_RECEIVING_RESPONSE, 1 },
|
||||
{ http_end_request, INTERNET_STATUS_RESPONSE_RECEIVED, 1 },
|
||||
{ http_end_request, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_CLOSING_CONNECTION, 0, 0, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_CONNECTION_CLOSED, 0, 0, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, },
|
||||
{ internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, }
|
||||
};
|
||||
|
||||
static const struct notification async_send_request_ex_resolve_failure_test[] =
|
||||
{
|
||||
{ internet_connect, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_open_request, INTERNET_STATUS_HANDLE_CREATED, 0 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_DETECTING_PROXY, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_RESOLVING_NAME, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_DETECTING_PROXY, 1, 0, 1 },
|
||||
{ http_send_request_ex, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
|
||||
{ http_end_request, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_CLOSING_CONNECTION, 0, 0, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_CONNECTION_CLOSED, 0, 0, 1 },
|
||||
{ internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, },
|
||||
{ internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, }
|
||||
};
|
||||
|
||||
static const struct notification_data notification_data[] = {
|
||||
{
|
||||
async_send_request_ex_test,
|
||||
sizeof(async_send_request_ex_test)/sizeof(async_send_request_ex_test[0]),
|
||||
"POST",
|
||||
"test.winehq.org",
|
||||
"tests/posttest.php",
|
||||
"Public ID=codeweavers"
|
||||
},
|
||||
{
|
||||
async_send_request_ex_test2,
|
||||
sizeof(async_send_request_ex_test)/sizeof(async_send_request_ex_test[0]),
|
||||
"POST",
|
||||
"test.winehq.org",
|
||||
"tests/posttest.php"
|
||||
},
|
||||
{
|
||||
async_send_request_ex_resolve_failure_test,
|
||||
sizeof(async_send_request_ex_resolve_failure_test)/sizeof(async_send_request_ex_resolve_failure_test[0]),
|
||||
"GET",
|
||||
"brokenhost",
|
||||
"index.html",
|
||||
NULL,
|
||||
TRUE
|
||||
}
|
||||
};
|
||||
|
||||
static void test_async_HttpSendRequestEx(const struct notification_data *nd)
|
||||
{
|
||||
BOOL ret;
|
||||
HINTERNET ses, req, con;
|
||||
|
@ -3277,72 +3389,90 @@ static void test_async_HttpSendRequestEx(void)
|
|||
DWORD size, written, error;
|
||||
INTERNET_BUFFERSA b;
|
||||
static const char *accept[2] = {"*/*", NULL};
|
||||
static char data[] = "Public ID=codeweavers";
|
||||
char buffer[32];
|
||||
|
||||
trace("Async HttpSendRequestEx test (%s %s)\n", nd->method, nd->host);
|
||||
|
||||
InitializeCriticalSection( ¬ification_cs );
|
||||
|
||||
info.test = async_send_request_ex_test;
|
||||
info.count = sizeof(async_send_request_ex_test)/sizeof(async_send_request_ex_test[0]);
|
||||
info.test = nd->test;
|
||||
info.count = nd->count;
|
||||
info.index = 0;
|
||||
info.wait = CreateEvent( NULL, FALSE, FALSE, NULL );
|
||||
info.thread = GetCurrentThreadId();
|
||||
info.is_aborted = FALSE;
|
||||
|
||||
ses = InternetOpen( "winetest", 0, NULL, NULL, INTERNET_FLAG_ASYNC );
|
||||
ok( ses != NULL, "InternetOpen failed\n" );
|
||||
|
||||
pInternetSetStatusCallbackA( ses, check_notification );
|
||||
|
||||
setup_test( &info, internet_connect, __LINE__ );
|
||||
con = InternetConnect( ses, "crossover.codeweavers.com", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)&info );
|
||||
setup_test( &info, internet_connect, __LINE__, ERROR_SUCCESS );
|
||||
con = InternetConnect( ses, nd->host, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)&info );
|
||||
ok( con != NULL, "InternetConnect failed %u\n", GetLastError() );
|
||||
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
|
||||
setup_test( &info, http_open_request, __LINE__ );
|
||||
req = HttpOpenRequest( con, "POST", "posttest.php", NULL, NULL, accept, 0, (DWORD_PTR)&info );
|
||||
setup_test( &info, http_open_request, __LINE__, ERROR_SUCCESS );
|
||||
req = HttpOpenRequest( con, nd->method, nd->path, NULL, NULL, accept, 0, (DWORD_PTR)&info );
|
||||
ok( req != NULL, "HttpOpenRequest failed %u\n", GetLastError() );
|
||||
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
|
||||
memset( &b, 0, sizeof(INTERNET_BUFFERSA) );
|
||||
b.dwStructSize = sizeof(INTERNET_BUFFERSA);
|
||||
b.lpcszHeader = "Content-Type: application/x-www-form-urlencoded";
|
||||
b.dwHeadersLength = strlen( b.lpcszHeader );
|
||||
b.dwBufferTotal = strlen( data );
|
||||
if(nd->data) {
|
||||
memset( &b, 0, sizeof(INTERNET_BUFFERSA) );
|
||||
b.dwStructSize = sizeof(INTERNET_BUFFERSA);
|
||||
b.lpcszHeader = "Content-Type: application/x-www-form-urlencoded";
|
||||
b.dwHeadersLength = strlen( b.lpcszHeader );
|
||||
b.dwBufferTotal = nd->data ? strlen( nd->data ) : 0;
|
||||
}
|
||||
|
||||
setup_test( &info, http_send_request_ex, __LINE__ );
|
||||
ret = HttpSendRequestExA( req, &b, NULL, 0x28, 0 );
|
||||
setup_test( &info, http_send_request_ex, __LINE__,
|
||||
nd->expect_conn_failure ? ERROR_INTERNET_NAME_NOT_RESOLVED : ERROR_SUCCESS );
|
||||
ret = HttpSendRequestExA( req, nd->data ? &b : NULL, NULL, 0x28, 0 );
|
||||
ok( !ret && GetLastError() == ERROR_IO_PENDING, "HttpSendRequestExA failed %d %u\n", ret, GetLastError() );
|
||||
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
error = WaitForSingleObject( info.wait, 10000 );
|
||||
if(error != WAIT_OBJECT_0) {
|
||||
skip("WaitForSingleObject returned %d, assuming DNS problem\n", error);
|
||||
info.is_aborted = TRUE;
|
||||
goto abort;
|
||||
}
|
||||
|
||||
size = sizeof(buffer);
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = HttpQueryInfoA( req, HTTP_QUERY_CONTENT_ENCODING, buffer, &size, 0 );
|
||||
error = GetLastError();
|
||||
ok( !ret, "HttpQueryInfoA failed %u\n", GetLastError() );
|
||||
todo_wine
|
||||
ok( error == ERROR_INTERNET_INCORRECT_HANDLE_STATE,
|
||||
"expected ERROR_INTERNET_INCORRECT_HANDLE_STATE got %u\n", error );
|
||||
if(nd->expect_conn_failure) {
|
||||
ok(error == ERROR_HTTP_HEADER_NOT_FOUND, "expected ERROR_HTTP_HEADER_NOT_FOUND got %u\n", error );
|
||||
}else {
|
||||
todo_wine
|
||||
ok(error == ERROR_INTERNET_INCORRECT_HANDLE_STATE,
|
||||
"expected ERROR_INTERNET_INCORRECT_HANDLE_STATE got %u\n", error );
|
||||
}
|
||||
|
||||
written = 0;
|
||||
size = strlen( data );
|
||||
setup_test( &info, internet_writefile, __LINE__ );
|
||||
ret = InternetWriteFile( req, data, size, &written );
|
||||
ok( ret, "InternetWriteFile failed %u\n", GetLastError() );
|
||||
ok( written == size, "expected %u got %u\n", written, size );
|
||||
if (nd->data)
|
||||
{
|
||||
written = 0;
|
||||
size = strlen( nd->data );
|
||||
setup_test( &info, internet_writefile, __LINE__, ERROR_SUCCESS );
|
||||
ret = InternetWriteFile( req, nd->data, size, &written );
|
||||
ok( ret, "InternetWriteFile failed %u\n", GetLastError() );
|
||||
ok( written == size, "expected %u got %u\n", written, size );
|
||||
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = HttpEndRequestA( req, (void *)nd->data, 0x28, 0 );
|
||||
error = GetLastError();
|
||||
ok( !ret, "HttpEndRequestA succeeded\n" );
|
||||
ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error );
|
||||
}
|
||||
|
||||
SetLastError( 0xdeadbeef );
|
||||
ret = HttpEndRequestA( req, (void *)data, 0x28, 0 );
|
||||
error = GetLastError();
|
||||
ok( !ret, "HttpEndRequestA succeeded\n" );
|
||||
ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error );
|
||||
|
||||
SetLastError( 0xdeadbeef );
|
||||
setup_test( &info, http_end_request, __LINE__ );
|
||||
setup_test( &info, http_end_request, __LINE__,
|
||||
nd->expect_conn_failure ? ERROR_INTERNET_OPERATION_CANCELLED : ERROR_SUCCESS);
|
||||
ret = HttpEndRequestA( req, NULL, 0x28, 0 );
|
||||
error = GetLastError();
|
||||
ok( !ret, "HttpEndRequestA succeeded\n" );
|
||||
|
@ -3350,7 +3480,8 @@ static void test_async_HttpSendRequestEx(void)
|
|||
|
||||
WaitForSingleObject( info.wait, 10000 );
|
||||
|
||||
setup_test( &info, internet_close_handle, __LINE__ );
|
||||
setup_test( &info, internet_close_handle, __LINE__, ERROR_SUCCESS );
|
||||
abort:
|
||||
InternetCloseHandle( req );
|
||||
InternetCloseHandle( con );
|
||||
InternetCloseHandle( ses );
|
||||
|
@ -3488,7 +3619,9 @@ START_TEST(http)
|
|||
InternetReadFile_test(0, &test_data[2]);
|
||||
InternetReadFileExA_test(INTERNET_FLAG_ASYNC);
|
||||
test_open_url_async();
|
||||
test_async_HttpSendRequestEx();
|
||||
test_async_HttpSendRequestEx(¬ification_data[0]);
|
||||
test_async_HttpSendRequestEx(¬ification_data[1]);
|
||||
test_async_HttpSendRequestEx(¬ification_data[2]);
|
||||
InternetOpenRequest_test();
|
||||
test_http_cache();
|
||||
InternetOpenUrlA_test();
|
||||
|
|
|
@ -41,16 +41,6 @@ static BOOL (WINAPI *pIsDomainLegalCookieDomainW)(LPCWSTR, LPCWSTR);
|
|||
static DWORD (WINAPI *pPrivacyGetZonePreferenceW)(DWORD, DWORD, LPDWORD, LPWSTR, LPDWORD);
|
||||
static DWORD (WINAPI *pPrivacySetZonePreferenceW)(DWORD, DWORD, DWORD, LPCWSTR);
|
||||
|
||||
/* Win9x and WinMe don't have lstrcmpW */
|
||||
static int strcmp_ww(const WCHAR *str1, const WCHAR *str2)
|
||||
{
|
||||
DWORD len1 = lstrlenW(str1);
|
||||
DWORD len2 = lstrlenW(str2);
|
||||
|
||||
if (len1 != len2) return 1;
|
||||
return memcmp(str1, str2, len1 * sizeof(WCHAR));
|
||||
}
|
||||
|
||||
/* ############################### */
|
||||
|
||||
static void test_InternetCanonicalizeUrlA(void)
|
||||
|
@ -169,6 +159,7 @@ static void test_InternetQueryOptionA(void)
|
|||
static const char useragent[] = {"Wininet Test"};
|
||||
char *buffer;
|
||||
int retval;
|
||||
BOOL res;
|
||||
|
||||
hinet = InternetOpenA(useragent,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL, 0);
|
||||
ok((hinet != 0x0),"InternetOpen Failed\n");
|
||||
|
@ -247,20 +238,65 @@ static void test_InternetQueryOptionA(void)
|
|||
ok(retval == 0,"Got wrong return value %d\n",retval);
|
||||
ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
|
||||
|
||||
len = sizeof(val);
|
||||
val = 0xdeadbeef;
|
||||
res = InternetQueryOptionA(hinet, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, &len);
|
||||
ok(!res, "InternetQueryOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
|
||||
ok(GetLastError() == ERROR_INTERNET_INVALID_OPERATION, "GetLastError() = %u\n", GetLastError());
|
||||
|
||||
val = 2;
|
||||
res = InternetSetOptionA(hinet, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, sizeof(val));
|
||||
ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
|
||||
ok(GetLastError() == ERROR_INTERNET_INVALID_OPERATION, "GetLastError() = %u\n", GetLastError());
|
||||
|
||||
InternetCloseHandle(hinet);
|
||||
}
|
||||
|
||||
len = sizeof(val);
|
||||
retval = InternetQueryOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, &len);
|
||||
ok(retval == TRUE,"Got wrong return value %d\n", retval);
|
||||
ok(len == sizeof(val), "got %d\n", len);
|
||||
ok(val == 2, "got %d\n", val);
|
||||
static void test_max_conns(void)
|
||||
{
|
||||
DWORD len, val;
|
||||
BOOL res;
|
||||
|
||||
len = sizeof(val);
|
||||
retval = InternetQueryOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, &val, &len);
|
||||
ok(retval == TRUE,"Got wrong return value %d\n", retval);
|
||||
ok(len == sizeof(val), "got %d\n", len);
|
||||
ok(val == 4, "got %d\n", val);
|
||||
len = sizeof(val);
|
||||
val = 0xdeadbeef;
|
||||
res = InternetQueryOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, &len);
|
||||
ok(res,"Got wrong return value %x\n", res);
|
||||
ok(len == sizeof(val), "got %d\n", len);
|
||||
ok(val == 2, "got %d\n", val);
|
||||
|
||||
len = sizeof(val);
|
||||
val = 0xdeadbeef;
|
||||
res = InternetQueryOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, &val, &len);
|
||||
ok(res,"Got wrong return value %x\n", res);
|
||||
ok(len == sizeof(val), "got %d\n", len);
|
||||
ok(val == 4, "got %d\n", val);
|
||||
|
||||
val = 3;
|
||||
res = InternetSetOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, sizeof(val));
|
||||
ok(res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) failed: %x\n", res);
|
||||
|
||||
len = sizeof(val);
|
||||
val = 0xdeadbeef;
|
||||
res = InternetQueryOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, &len);
|
||||
ok(res,"Got wrong return value %x\n", res);
|
||||
ok(len == sizeof(val), "got %d\n", len);
|
||||
ok(val == 3, "got %d\n", val);
|
||||
|
||||
val = 0;
|
||||
res = InternetSetOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, sizeof(val));
|
||||
ok(!res || broken(res), /* <= w2k3 */
|
||||
"InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER, 0) succeeded\n");
|
||||
if (!res) ok(GetLastError() == ERROR_BAD_ARGUMENTS, "GetLastError() = %u\n", GetLastError());
|
||||
|
||||
val = 2;
|
||||
res = InternetSetOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, sizeof(val)-1);
|
||||
ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
|
||||
ok(GetLastError() == ERROR_INTERNET_BAD_OPTION_LENGTH, "GetLastError() = %u\n", GetLastError());
|
||||
|
||||
val = 2;
|
||||
res = InternetSetOptionA(NULL, INTERNET_OPTION_MAX_CONNS_PER_SERVER, &val, sizeof(val)+1);
|
||||
ok(!res, "InternetSetOptionA(INTERNET_OPTION_MAX_CONNS_PER_SERVER) succeeded\n");
|
||||
ok(GetLastError() == ERROR_INTERNET_BAD_OPTION_LENGTH, "GetLastError() = %u\n", GetLastError());
|
||||
}
|
||||
|
||||
static void test_get_cookie(void)
|
||||
|
@ -497,7 +533,7 @@ static void test_null(void)
|
|||
ok( sz == 1 + lstrlenW(buffer) || sz == lstrlenW(buffer), "sz wrong %d\n", sz);
|
||||
|
||||
/* before XP SP2, buffer is "server; server" */
|
||||
ok( !strcmp_ww(szExpect, buffer) || !strcmp_ww(szServer, buffer), "cookie data wrong\n");
|
||||
ok( !lstrcmpW(szExpect, buffer) || !lstrcmpW(szServer, buffer), "cookie data wrong\n");
|
||||
|
||||
sz = sizeof(buffer);
|
||||
r = InternetQueryOptionA(NULL, INTERNET_OPTION_CONNECTED_STATE, buffer, &sz);
|
||||
|
@ -995,7 +1031,7 @@ static void test_Option_PerConnectionOption(void)
|
|||
ret = InternetQueryOptionW(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION,
|
||||
&list, &size);
|
||||
ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
|
||||
ok(!strcmp_ww(list.pOptions[0].Value.pszValue, proxy_srvW),
|
||||
ok(!lstrcmpW(list.pOptions[0].Value.pszValue, proxy_srvW),
|
||||
"Retrieved proxy server should've been %s, was: %s\n",
|
||||
wine_dbgstr_w(proxy_srvW), wine_dbgstr_w(list.pOptions[0].Value.pszValue));
|
||||
ok(list.pOptions[1].Value.dwValue == PROXY_TYPE_PROXY,
|
||||
|
@ -1321,6 +1357,7 @@ START_TEST(internet)
|
|||
test_Option_PerConnectionOption();
|
||||
test_Option_PerConnectionOptionA();
|
||||
test_InternetErrorDlg();
|
||||
test_max_conns();
|
||||
|
||||
if (!pInternetTimeFromSystemTimeA)
|
||||
win_skip("skipping the InternetTime tests\n");
|
||||
|
|
|
@ -69,6 +69,7 @@ static void test_find_url_cache_entriesA(void)
|
|||
if (!strcmp(lpCacheEntryInfo->lpszSourceUrlName, TEST_URL))
|
||||
{
|
||||
found = TRUE;
|
||||
ret = TRUE;
|
||||
break;
|
||||
}
|
||||
SetLastError(0xdeadbeef);
|
||||
|
@ -83,11 +84,11 @@ static void test_find_url_cache_entriesA(void)
|
|||
ret = FindNextUrlCacheEntry(hEnumHandle, lpCacheEntryInfo, &cbCacheEntryInfo);
|
||||
}
|
||||
}
|
||||
ok(ret, "FindNextUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
if (!ret)
|
||||
break;
|
||||
}
|
||||
ok(found, "committed url cache entry not found during enumeration\n");
|
||||
ok(ret, "FindNextUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
ok(found, "Committed url cache entry not found during enumeration\n");
|
||||
|
||||
ret = FindCloseUrlCache(hEnumHandle);
|
||||
ok(ret, "FindCloseUrlCache failed with error %d\n", GetLastError());
|
||||
|
@ -133,7 +134,7 @@ static void test_GetUrlCacheEntryInfoExA(void)
|
|||
ret = GetUrlCacheEntryInfoEx(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, NULL, NULL, NULL, 0);
|
||||
ok(ret, "GetUrlCacheEntryInfoEx failed with error %d\n", GetLastError());
|
||||
|
||||
check_cache_entry_infoA("GetUrlCacheEntryInfoEx", lpCacheEntryInfo);
|
||||
if (ret) check_cache_entry_infoA("GetUrlCacheEntryInfoEx", lpCacheEntryInfo);
|
||||
|
||||
cbCacheEntryInfo = 100000;
|
||||
SetLastError(0xdeadbeef);
|
||||
|
@ -146,10 +147,12 @@ static void test_GetUrlCacheEntryInfoExA(void)
|
|||
/* Querying the redirect URL fails with ERROR_INVALID_PARAMETER */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, NULL, NULL, &cbRedirectUrl, NULL, 0);
|
||||
ok(!ret, "GetUrlCacheEntryInfoEx should have failed\n");
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, &cbRedirectUrl, NULL, 0);
|
||||
ok(!ret, "GetUrlCacheEntryInfoEx should have failed\n");
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
}
|
||||
|
@ -234,6 +237,7 @@ static void test_IsUrlCacheEntryExpiredA(void)
|
|||
"expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
info = HeapAlloc(GetProcessHeap(), 0, size);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, info, &size);
|
||||
ok(ret, "GetUrlCacheEntryInfo failed: %d\n", GetLastError());
|
||||
GetSystemTimeAsFileTime(&info->ExpireTime);
|
||||
exp_time.u.LowPart = info->ExpireTime.dwLowDateTime;
|
||||
exp_time.u.HighPart = info->ExpireTime.dwHighDateTime;
|
||||
|
@ -344,6 +348,7 @@ static void test_urlcacheA(void)
|
|||
HANDLE hFile;
|
||||
BYTE zero_byte = 0;
|
||||
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo;
|
||||
LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo2;
|
||||
DWORD cbCacheEntryInfo;
|
||||
static const FILETIME filetime_zero;
|
||||
FILETIME now;
|
||||
|
@ -358,7 +363,7 @@ static void test_urlcacheA(void)
|
|||
|
||||
create_and_write_file(filenameA, &zero_byte, sizeof(zero_byte));
|
||||
|
||||
ret = CommitUrlCacheEntry(TEST_URL1, NULL, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY, NULL, 0, NULL, NULL);
|
||||
ret = CommitUrlCacheEntry(TEST_URL1, NULL, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY, NULL, 0, "html", NULL);
|
||||
ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
cbCacheEntryInfo = 0;
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL1, NULL, &cbCacheEntryInfo);
|
||||
|
@ -378,9 +383,11 @@ static void test_urlcacheA(void)
|
|||
lpCacheEntryInfo->CacheEntryType);
|
||||
ok(!U(*lpCacheEntryInfo).dwExemptDelta, "expected dwExemptDelta 0, got %d\n",
|
||||
U(*lpCacheEntryInfo).dwExemptDelta);
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
|
||||
/* A subsequent commit with a different time/type doesn't change the type */
|
||||
/* Make sure there is a notable change in timestamps */
|
||||
Sleep(1000);
|
||||
|
||||
/* A subsequent commit with a different time/type doesn't change most of the entry */
|
||||
GetSystemTimeAsFileTime(&now);
|
||||
ret = CommitUrlCacheEntry(TEST_URL1, NULL, now, now, NORMAL_CACHE_ENTRY,
|
||||
(LPBYTE)ok_header, strlen(ok_header), NULL, NULL);
|
||||
|
@ -390,26 +397,41 @@ static void test_urlcacheA(void)
|
|||
ok(!ret, "GetUrlCacheEntryInfo should have failed\n");
|
||||
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL1, lpCacheEntryInfo, &cbCacheEntryInfo);
|
||||
lpCacheEntryInfo2 = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL1, lpCacheEntryInfo2, &cbCacheEntryInfo);
|
||||
ok(ret, "GetUrlCacheEntryInfo failed with error %d\n", GetLastError());
|
||||
/* but it does change the time.. */
|
||||
todo_wine
|
||||
ok(memcmp(&lpCacheEntryInfo->ExpireTime, &filetime_zero, sizeof(FILETIME)),
|
||||
ok(memcmp(&lpCacheEntryInfo2->ExpireTime, &filetime_zero, sizeof(FILETIME)),
|
||||
"expected positive ExpireTime\n");
|
||||
todo_wine
|
||||
ok(memcmp(&lpCacheEntryInfo->LastModifiedTime, &filetime_zero, sizeof(FILETIME)),
|
||||
ok(memcmp(&lpCacheEntryInfo2->LastModifiedTime, &filetime_zero, sizeof(FILETIME)),
|
||||
"expected positive LastModifiedTime\n");
|
||||
ok(lpCacheEntryInfo->CacheEntryType == (NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY) ||
|
||||
broken(lpCacheEntryInfo->CacheEntryType == NORMAL_CACHE_ENTRY /* NT4/W2k */),
|
||||
ok(lpCacheEntryInfo2->CacheEntryType == (NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY) ||
|
||||
broken(lpCacheEntryInfo2->CacheEntryType == NORMAL_CACHE_ENTRY /* NT4/W2k */),
|
||||
"expected type NORMAL_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY, got %08x\n",
|
||||
lpCacheEntryInfo->CacheEntryType);
|
||||
lpCacheEntryInfo2->CacheEntryType);
|
||||
/* and set the headers. */
|
||||
todo_wine
|
||||
ok(lpCacheEntryInfo->dwHeaderInfoSize == 19,
|
||||
"expected headers size 19, got %d\n",
|
||||
lpCacheEntryInfo->dwHeaderInfoSize);
|
||||
ok(lpCacheEntryInfo2->dwHeaderInfoSize == 19,
|
||||
"expected headers size 19, got %d\n",
|
||||
lpCacheEntryInfo2->dwHeaderInfoSize);
|
||||
/* Hit rate gets incremented by 1 */
|
||||
todo_wine
|
||||
ok((lpCacheEntryInfo->dwHitRate + 1) == lpCacheEntryInfo2->dwHitRate,
|
||||
"HitRate not incremented by one on commit\n");
|
||||
/* Last access time should be updated */
|
||||
todo_wine
|
||||
ok(!(lpCacheEntryInfo->LastAccessTime.dwHighDateTime == lpCacheEntryInfo2->LastAccessTime.dwHighDateTime &&
|
||||
lpCacheEntryInfo->LastAccessTime.dwLowDateTime == lpCacheEntryInfo2->LastAccessTime.dwLowDateTime),
|
||||
"Last accessed time was not updated by commit\n");
|
||||
/* File extension should be unset */
|
||||
todo_wine
|
||||
ok(lpCacheEntryInfo2->lpszFileExtension == NULL,
|
||||
"Fileextension isn't unset: %s\n",
|
||||
lpCacheEntryInfo2->lpszFileExtension);
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo2);
|
||||
|
||||
ret = CommitUrlCacheEntry(TEST_URL, filenameA, filetime_zero, filetime_zero, NORMAL_CACHE_ENTRY, NULL, 0, "html", NULL);
|
||||
ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
|
@ -425,7 +447,7 @@ static void test_urlcacheA(void)
|
|||
ret = RetrieveUrlCacheEntryFile(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo, 0);
|
||||
ok(ret, "RetrieveUrlCacheEntryFile failed with error %d\n", GetLastError());
|
||||
|
||||
check_cache_entry_infoA("RetrieveUrlCacheEntryFile", lpCacheEntryInfo);
|
||||
if (ret) check_cache_entry_infoA("RetrieveUrlCacheEntryFile", lpCacheEntryInfo);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
|
||||
|
@ -491,7 +513,7 @@ static void test_urlcacheA(void)
|
|||
cbCacheEntryInfo = 0;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, NULL, &cbCacheEntryInfo);
|
||||
ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
|
||||
ok(!ret, "GetUrlCacheEntryInfo should have failed\n");
|
||||
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
|
@ -550,18 +572,25 @@ static void test_urlcacheA(void)
|
|||
if (pDeleteUrlCacheEntryA)
|
||||
{
|
||||
ret = pDeleteUrlCacheEntryA(TEST_URL);
|
||||
todo_wine
|
||||
ok(!ret, "Expected failure\n");
|
||||
todo_wine
|
||||
ok(GetLastError() == ERROR_SHARING_VIOLATION,
|
||||
"Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
|
||||
check_file_exists(filenameA);
|
||||
}
|
||||
|
||||
lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
memset(lpCacheEntryInfo, 0, cbCacheEntryInfo);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo);
|
||||
ok(ret, "GetUrlCacheEntryInfo failed with error %d\n", GetLastError());
|
||||
ok(lpCacheEntryInfo->CacheEntryType & DELETED_CACHE_ENTRY,
|
||||
"CacheEntryType hasn't DELETED_CACHE_ENTRY set, (flags %08x)\n",
|
||||
lpCacheEntryInfo->CacheEntryType);
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
|
||||
if (pUnlockUrlCacheEntryFileA)
|
||||
{
|
||||
check_file_exists(filenameA);
|
||||
ret = pUnlockUrlCacheEntryFileA(TEST_URL, 0);
|
||||
todo_wine
|
||||
ok(ret, "UnlockUrlCacheEntryFileA failed: %d\n", GetLastError());
|
||||
/* By unlocking the already-deleted cache entry, the file associated
|
||||
* with it is deleted..
|
||||
|
@ -634,6 +663,7 @@ static void test_urlcacheA(void)
|
|||
ok(!ret, "expected failure\n");
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
|
||||
|
||||
ret = CreateUrlCacheEntry(TEST_URL, 0, "html", filenameA, 0);
|
||||
ok(ret, "CreateUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
create_and_write_file(filenameA, &zero_byte, sizeof(zero_byte));
|
||||
|
@ -644,7 +674,7 @@ static void test_urlcacheA(void)
|
|||
cbCacheEntryInfo = 0;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, NULL, &cbCacheEntryInfo);
|
||||
ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
|
||||
ok(!ret, "GetUrlCacheEntryInfo should have failed\n");
|
||||
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
|
@ -654,7 +684,7 @@ static void test_urlcacheA(void)
|
|||
"expected cache entry type NORMAL_CACHE_ENTRY | STICKY_CACHE_ENTRY, got %d (0x%08x)\n",
|
||||
lpCacheEntryInfo->CacheEntryType, lpCacheEntryInfo->CacheEntryType);
|
||||
ok(U(*lpCacheEntryInfo).dwExemptDelta == 86400,
|
||||
"expected dwExemptDelta 864000, got %d\n",
|
||||
"expected dwExemptDelta 86400, got %d\n",
|
||||
U(*lpCacheEntryInfo).dwExemptDelta);
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
if (pDeleteUrlCacheEntryA)
|
||||
|
@ -676,7 +706,7 @@ static void test_urlcacheA(void)
|
|||
cbCacheEntryInfo = 0;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, NULL, &cbCacheEntryInfo);
|
||||
ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
|
||||
ok(!ret, "GetUrlCacheEntryInfo should have failed\n");
|
||||
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
|
||||
"expected ERROR_INSUFFICIENT_BUFFER, got %d\n", GetLastError());
|
||||
lpCacheEntryInfo = HeapAlloc(GetProcessHeap(), 0, cbCacheEntryInfo);
|
||||
|
@ -686,7 +716,7 @@ static void test_urlcacheA(void)
|
|||
"expected cache entry type NORMAL_CACHE_ENTRY | STICKY_CACHE_ENTRY, got %d (0x%08x)\n",
|
||||
lpCacheEntryInfo->CacheEntryType, lpCacheEntryInfo->CacheEntryType);
|
||||
ok(U(*lpCacheEntryInfo).dwExemptDelta == 86400,
|
||||
"expected dwExemptDelta 864000, got %d\n",
|
||||
"expected dwExemptDelta 86400, got %d\n",
|
||||
U(*lpCacheEntryInfo).dwExemptDelta);
|
||||
U(*lpCacheEntryInfo).dwExemptDelta = 0;
|
||||
ret = SetUrlCacheEntryInfoA(TEST_URL, lpCacheEntryInfo,
|
||||
|
@ -702,7 +732,30 @@ static void test_urlcacheA(void)
|
|||
ok(lpCacheEntryInfo->CacheEntryType & (NORMAL_CACHE_ENTRY|STICKY_CACHE_ENTRY),
|
||||
"expected cache entry type NORMAL_CACHE_ENTRY | STICKY_CACHE_ENTRY, got %d (0x%08x)\n",
|
||||
lpCacheEntryInfo->CacheEntryType, lpCacheEntryInfo->CacheEntryType);
|
||||
|
||||
/* Recommit of Url entry keeps dwExemptDelta */
|
||||
U(*lpCacheEntryInfo).dwExemptDelta = 8600;
|
||||
ret = SetUrlCacheEntryInfoA(TEST_URL, lpCacheEntryInfo,
|
||||
CACHE_ENTRY_EXEMPT_DELTA_FC);
|
||||
ok(ret, "SetUrlCacheEntryInfo failed: %d\n", GetLastError());
|
||||
|
||||
ret = CreateUrlCacheEntry(TEST_URL, 0, "html", filenameA1, 0);
|
||||
ok(ret, "CreateUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
create_and_write_file(filenameA1, &zero_byte, sizeof(zero_byte));
|
||||
|
||||
ret = CommitUrlCacheEntry(TEST_URL, filenameA1, filetime_zero, filetime_zero,
|
||||
NORMAL_CACHE_ENTRY|STICKY_CACHE_ENTRY,
|
||||
(LPBYTE)ok_header, strlen(ok_header), "html", NULL);
|
||||
ok(ret, "CommitUrlCacheEntry failed with error %d\n", GetLastError());
|
||||
|
||||
ret = GetUrlCacheEntryInfo(TEST_URL, lpCacheEntryInfo, &cbCacheEntryInfo);
|
||||
ok(ret, "GetUrlCacheEntryInfo failed with error %d\n", GetLastError());
|
||||
ok(U(*lpCacheEntryInfo).dwExemptDelta == 8600,
|
||||
"expected dwExemptDelta 8600, got %d\n",
|
||||
U(*lpCacheEntryInfo).dwExemptDelta);
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
|
||||
|
||||
if (pDeleteUrlCacheEntryA)
|
||||
{
|
||||
ret = pDeleteUrlCacheEntryA(TEST_URL);
|
||||
|
|
Loading…
Reference in a new issue