From: Bruno Jesus <00cpxxx@gmail.com> Subject: winhttp/tests: Add a no-content header test Message-Id: Date: Wed, 30 Jul 2014 13:31:17 -0300 diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index f214879..0d8f8be 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -1767,6 +1767,11 @@ static const char okmsg[] = "Server: winetest\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[] = "HTTP/1.1 401 Unauthorized\r\n" "Server: winetest\r\n" @@ -1850,6 +1855,10 @@ static DWORD CALLBACK server_thread(LPVOID param) { 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")) { send(c, okmsg, sizeof okmsg - 1, 0); @@ -2087,6 +2096,83 @@ static void test_no_headers(int port) 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 const WCHAR bad_headerW[] = @@ -3078,6 +3164,7 @@ START_TEST (winhttp) test_connection_info(si.port); test_basic_request(si.port, NULL, basicW); test_no_headers(si.port); + test_no_content(si.port); test_basic_authentication(si.port); test_bad_header(si.port); test_multiple_reads(si.port);