winhttp/tests: Add a no-content header test.

This commit is contained in:
Bruno Jesus 2014-07-30 13:31:17 -03:00 committed by Alexandre Julliard
parent c3d7f5b7ec
commit 1697eb6ee2
1 changed files with 87 additions and 0 deletions

View File

@ -1767,6 +1767,11 @@ static const char okmsg[] =
"Server: winetest\r\n" "Server: winetest\r\n"
"\r\n"; "\r\n";
static const char nocontentmsg[] =
"HTTP/1.1 204 No Content\r\n"
"Server: winetest\r\n"
"\r\n";
static const char noauthmsg[] = static const char noauthmsg[] =
"HTTP/1.1 401 Unauthorized\r\n" "HTTP/1.1 401 Unauthorized\r\n"
"Server: winetest\r\n" "Server: winetest\r\n"
@ -1850,6 +1855,10 @@ static DWORD CALLBACK server_thread(LPVOID param)
{ {
send(c, page1, sizeof page1 - 1, 0); send(c, page1, sizeof page1 - 1, 0);
} }
if (strstr(buffer, "GET /no_content"))
{
send(c, nocontentmsg, sizeof nocontentmsg - 1, 0);
}
if (strstr(buffer, "GET /quit")) if (strstr(buffer, "GET /quit"))
{ {
send(c, okmsg, sizeof okmsg - 1, 0); send(c, okmsg, sizeof okmsg - 1, 0);
@ -2087,6 +2096,83 @@ static void test_no_headers(int port)
WinHttpCloseHandle(ses); WinHttpCloseHandle(ses);
} }
static void test_no_content(int port)
{
static const WCHAR no_contentW[] = {'/','n','o','_','c','o','n','t','e','n','t',0};
HINTERNET ses, con, req;
WCHAR buf[128];
DWORD size, len = sizeof(buf), bytes_read, status;
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, no_contentW, NULL, NULL, NULL, 0);
ok(req != NULL, "failed to open a request %u\n", GetLastError());
size = 12345;
SetLastError(0xdeadbeef);
ret = WinHttpQueryDataAvailable(req, &size);
todo_wine {
ok(!ret, "expected error\n");
ok(GetLastError() == ERROR_WINHTTP_INCORRECT_HANDLE_STATE,
"expected ERROR_WINHTTP_INCORRECT_HANDLE_STATE, got 0x%08x\n", GetLastError());
ok(size == 12345 || broken(size == 0) /* Win <= 2003 */,
"expected 12345, got %u\n", size);
}
ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0);
ok(ret, "expected success\n");
ret = WinHttpReceiveResponse(req, NULL);
ok(ret, "expected success\n");
size = sizeof(status);
ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER,
NULL, &status, &size, NULL);
ok(ret, "expected success\n");
ok(status == 204, "expected status 204, got %d\n", status);
SetLastError(0xdeadbeef);
size = sizeof(status);
status = 12345;
ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_CONTENT_LENGTH | WINHTTP_QUERY_FLAG_NUMBER,
NULL, &status, &size, 0);
ok(!ret, "expected no content-length header\n");
ok(GetLastError() == ERROR_WINHTTP_HEADER_NOT_FOUND,
"wrong error %u\n", GetLastError() );
ok(status == 12345, "expected 0, got %d\n", status);
size = 12345;
ret = WinHttpQueryDataAvailable(req, &size);
ok(ret, "expected success\n");
ok(size == 0, "expected 0, got %d\n", size);
ret = WinHttpReadData(req, buf, len, &bytes_read);
ok( bytes_read == 0, "expected 0, got %u available\n", bytes_read );
size = 12345;
ret = WinHttpQueryDataAvailable(req, &size);
ok(ret, "expected success\n");
ok(size == 0, "expected 0, got %d\n", size);
WinHttpCloseHandle(req);
size = 12345;
SetLastError(0xdeadbeef);
ret = WinHttpQueryDataAvailable(req, &size);
ok(!ret, "expected error\n");
ok(GetLastError() == ERROR_INVALID_HANDLE,
"expected ERROR_INVALID_HANDLE, got 0x%08x\n", GetLastError());
ok(size == 12345, "expected 12345, got %u\n", size);
WinHttpCloseHandle(con);
WinHttpCloseHandle(ses);
}
static void test_bad_header( int port ) static void test_bad_header( int port )
{ {
static const WCHAR bad_headerW[] = static const WCHAR bad_headerW[] =
@ -3078,6 +3164,7 @@ START_TEST (winhttp)
test_connection_info(si.port); test_connection_info(si.port);
test_basic_request(si.port, NULL, basicW); test_basic_request(si.port, NULL, basicW);
test_no_headers(si.port); test_no_headers(si.port);
test_no_content(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); test_multiple_reads(si.port);