[1/3] wininet/tests: Add tests for overriding host header.

Sebastian Lackner sebastian at fds-team.de
Thu Jun 25 05:27:30 CDT 2015


From: Michael Müller <michael at fds-team.de>

---
 dlls/wininet/tests/http.c |  109 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)

diff --git a/dlls/wininet/tests/http.c b/dlls/wininet/tests/http.c
index df7dd07..b841795 100644
--- a/dlls/wininet/tests/http.c
+++ b/dlls/wininet/tests/http.c
@@ -2051,6 +2051,7 @@ static DWORD CALLBACK server_thread(LPVOID param)
     WSADATA wsaData;
     int last_request = 0;
     char host_header[22];
+    char host_header_override[30];
     static BOOL test_b = FALSE;
     static int test_no_cache = 0;
 
@@ -2077,6 +2078,7 @@ static DWORD CALLBACK server_thread(LPVOID param)
     SetEvent(si->hEvent);
 
     sprintf(host_header, "Host: localhost:%d", si->port);
+    sprintf(host_header_override, "Host: test.local:%d\r\n", si->port);
 
     do
     {
@@ -2351,6 +2353,13 @@ static DWORD CALLBACK server_thread(LPVOID param)
             else
                 send(c, notokmsg, sizeof notokmsg-1, 0);
         }
+        if (strstr(buffer, "/test_host_override"))
+        {
+            if (strstr(buffer, host_header_override))
+                send(c, okmsg, sizeof okmsg-1, 0);
+            else
+                send(c, notokmsg, sizeof notokmsg-1, 0);
+        }
         shutdown(c, 2);
         closesocket(c);
         c = -1;
@@ -2946,6 +2955,105 @@ static void test_connection_header(int port)
     InternetCloseHandle(ses);
 }
 
+static void test_header_override(int port)
+{
+    char buffer[128], host_header_override[30], full_url[128];
+    HINTERNET ses, con, req;
+    DWORD size, count, err;
+    BOOL ret;
+
+    sprintf(host_header_override, "Host: test.local:%d\r\n", port);
+    sprintf(full_url, "http://localhost:%d/test_host_override", port);
+
+    ses = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+    ok(ses != NULL, "InternetOpen failed\n");
+
+    con = InternetConnectA(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+    ok(con != NULL, "InternetConnect failed\n");
+
+    req = HttpOpenRequestA(con, NULL, "/test_host_override", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+    ok(req != NULL, "HttpOpenRequest failed\n");
+
+    size = sizeof(buffer) - 1;
+    count = 0;
+    memset(buffer, 0, sizeof(buffer));
+    ret = HttpQueryInfoA(req, HTTP_QUERY_HOST | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, &count);
+    err = GetLastError();
+    todo_wine ok(!ret, "HttpQueryInfo succeeded\n");
+    todo_wine ok(err == ERROR_HTTP_HEADER_NOT_FOUND, "Expected error ERROR_HTTP_HEADER_NOT_FOUND, got %d\n", err);
+
+    size = sizeof(buffer) - 1;
+    memset(buffer, 0, sizeof(buffer));
+    ret = InternetQueryOptionA(req, INTERNET_OPTION_URL, buffer, &size);
+    ok(ret, "InternetQueryOption failed\n");
+    ok(!strcmp(full_url, buffer), "Expected %s, got %s\n", full_url, buffer);
+
+    ret = HttpAddRequestHeadersA(req, host_header_override, ~0u, HTTP_ADDREQ_FLAG_COALESCE);
+    ok(ret, "HttpAddRequestHeaders failed\n");
+
+    size = sizeof(buffer) - 1;
+    count = 0;
+    memset(buffer, 0, sizeof(buffer));
+    ret = HttpQueryInfoA(req, HTTP_QUERY_HOST | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, &count);
+    ok(ret, "HttpQueryInfo failed\n");
+
+    size = sizeof(buffer) - 1;
+    memset(buffer, 0, sizeof(buffer));
+    ret = InternetQueryOptionA(req, INTERNET_OPTION_URL, buffer, &size);
+    ok(ret, "InternetQueryOption failed\n");
+    todo_wine ok(!strcmp(full_url, buffer), "Expected %s, got %s\n", full_url, buffer);
+
+    ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
+    ok(ret, "HttpSendRequest failed\n");
+
+    test_status_code_todo(req, 200);
+
+    InternetCloseHandle(req);
+    req = HttpOpenRequestA(con, NULL, "/test_host_override", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+    ok(req != NULL, "HttpOpenRequest failed\n");
+
+    ret = HttpAddRequestHeadersA(req, host_header_override, ~0u, HTTP_ADDREQ_FLAG_COALESCE);
+    ok(ret, "HttpAddRequestHeaders failed\n");
+
+    ret = HttpAddRequestHeadersA(req, host_header_override, ~0u, HTTP_ADDREQ_FLAG_COALESCE);
+    ok(ret, "HttpAddRequestHeaders failed\n");
+
+    ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
+    ok(ret, "HttpSendRequest failed\n");
+
+    test_status_code(req, 400);
+
+    InternetCloseHandle(req);
+    req = HttpOpenRequestA(con, NULL, "/test_host_override", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+    ok(req != NULL, "HttpOpenRequest failed\n");
+
+    ret = HttpAddRequestHeadersA(req, host_header_override, ~0u, HTTP_ADDREQ_FLAG_ADD);
+    ok(ret, "HttpAddRequestHeaders failed\n");
+
+    ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
+    ok(ret, "HttpSendRequest failed\n");
+
+    test_status_code(req, 200);
+
+    InternetCloseHandle(req);
+    req = HttpOpenRequestA(con, NULL, "/test_host_override", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+    ok(req != NULL, "HttpOpenRequest failed\n");
+
+    ret = HttpAddRequestHeadersA(req, host_header_override, ~0u, HTTP_ADDREQ_FLAG_REPLACE);
+    err = GetLastError();
+    todo_wine ok(!ret, "HttpAddRequestHeaders succeeded\n");
+    todo_wine ok(err == ERROR_HTTP_HEADER_NOT_FOUND, "Expected error ERROR_HTTP_HEADER_NOT_FOUND, got %d\n", err);
+
+    ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
+    ok(ret, "HttpSendRequest failed\n");
+
+    test_status_code_todo(req, 400);
+
+    InternetCloseHandle(req);
+    InternetCloseHandle(con);
+    InternetCloseHandle(ses);
+}
+
 static void test_http1_1(int port)
 {
     HINTERNET ses, con, req;
@@ -4322,6 +4430,7 @@ static void test_http_connection(void)
     test_basic_request(si.port, "GET", "/test6");
     test_basic_request(si.port, "GET", "/testF");
     test_connection_header(si.port);
+    test_header_override(si.port);
     test_http1_1(si.port);
     test_cookie_header(si.port);
     test_basic_authentication(si.port);
-- 
2.4.3



More information about the wine-patches mailing list