Jacek Caban : urlmon: Added HttpSProtocol object tests.

Alexandre Julliard julliard at winehq.org
Tue Jan 13 10:56:35 CST 2009


Module: wine
Branch: master
Commit: 3b84a40cf1c211c015ed6c98a7c2f4781bf8aaf0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3b84a40cf1c211c015ed6c98a7c2f4781bf8aaf0

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jan 12 18:20:06 2009 +0100

urlmon: Added HttpSProtocol object tests.

---

 dlls/urlmon/tests/protocol.c |   75 ++++++++++++++++++++++++++++++------------
 1 files changed, 54 insertions(+), 21 deletions(-)

diff --git a/dlls/urlmon/tests/protocol.c b/dlls/urlmon/tests/protocol.c
index 55a6052..1fff2e4 100644
--- a/dlls/urlmon/tests/protocol.c
+++ b/dlls/urlmon/tests/protocol.c
@@ -74,6 +74,8 @@ DEFINE_EXPECT(ReportProgress_VERIFIEDMIMETYPEAVAILABLE);
 DEFINE_EXPECT(ReportProgress_PROTOCOLCLASSID);
 DEFINE_EXPECT(ReportProgress_COOKIE_SENT);
 DEFINE_EXPECT(ReportProgress_REDIRECTING);
+DEFINE_EXPECT(ReportProgress_ENCODING);
+DEFINE_EXPECT(ReportProgress_ACCEPTRANGES);
 DEFINE_EXPECT(ReportData);
 DEFINE_EXPECT(ReportResult);
 DEFINE_EXPECT(GetBindString_ACCEPT_MIMES);
@@ -124,6 +126,7 @@ static DWORD prot_read;
 static enum {
     FILE_TEST,
     HTTP_TEST,
+    HTTPS_TEST,
     MK_TEST,
     BIND_TEST
 } tested_protocol;
@@ -163,6 +166,13 @@ static const char *debugstr_guid(REFIID riid)
     return buf;
 }
 
+static int strcmp_wa(LPCWSTR strw, const char *stra)
+{
+    WCHAR buf[512];
+    MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR));
+    return lstrcmpW(strw, buf);
+}
+
 static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv)
 {
     if(IsEqualGUID(&IID_IUnknown, riid)
@@ -355,6 +365,8 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
         }
         CHECK_CALLED(ReportProgress_SENDINGREQUEST);
         SET_EXPECT(OnResponse);
+        if(tested_protocol == HTTPS_TEST)
+            SET_EXPECT(ReportProgress_ACCEPTRANGES);
         SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE);
         if(bindf & BINDF_NEEDFILE)
             SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
@@ -368,6 +380,8 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
     if (!state) {
         state = 1;
         CHECK_CALLED(OnResponse);
+        if(tested_protocol == HTTPS_TEST)
+            CHECK_CALLED(ReportProgress_ACCEPTRANGES);
         CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE);
         if(bindf & BINDF_NEEDFILE)
             CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE);
@@ -384,9 +398,6 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
     static const WCHAR null_guid[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-',
         '0','0','0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0','0','}',0};
     static const WCHAR text_plain[] = {'t','e','x','t','/','p','l','a','i','n',0};
-    static const WCHAR post_host[] =
-        {'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 wszCrossoverIP[] =
         {'2','0','9','.','4','6','.','2','5','.','1','3','2',0};
     /* I'm not sure if it's a good idea to hardcode here the IP address... */
@@ -437,11 +448,12 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
         ok(szStatusText != NULL, "szStatusText == NULL\n");
         if(szStatusText)
         {
-            if (!http_post_test)
-                ok(!lstrcmpW(szStatusText, hostW),
-                   "szStatustext != \"www.winehq.org\"\n");
+            if(tested_protocol == HTTPS_TEST)
+                ok(!strcmp_wa(szStatusText, "www.codeweavers.com"), "szStatustext = %s\n", debugstr_w(szStatusText));
+            else if(!http_post_test)
+                ok(!strcmp_wa(szStatusText, "www.winehq.org"), "szStatustext != \"www.winehq.org\"\n");
             else
-                ok(!lstrcmpW(szStatusText, post_host),
+                ok(!strcmp_wa(szStatusText, "crossover.codeweavers.com"),
                    "szStatustext != \"crossover.codeweavers.com\"\n");
         }
         break;
@@ -449,9 +461,8 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
         CHECK_EXPECT(ReportProgress_CONNECTING);
         ok(szStatusText != NULL, "szStatusText == NULL\n");
         if(szStatusText)
-            ok(!lstrcmpW(szStatusText, http_post_test ?
-                         wszCrossoverIP : winehq_ipW),
-               "Unexpected szStatusText\n");
+            ok(!lstrcmpW(szStatusText, http_post_test || tested_protocol == HTTPS_TEST ? wszCrossoverIP : winehq_ipW),
+               "Unexpected szStatusText %s\n", debugstr_w(szStatusText));
         break;
     case BINDSTATUS_SENDINGREQUEST:
         CHECK_EXPECT(ReportProgress_SENDINGREQUEST);
@@ -478,7 +489,15 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
         break;
     case BINDSTATUS_REDIRECTING:
         CHECK_EXPECT(ReportProgress_REDIRECTING);
-        ok(szStatusText == NULL, "szStatusText != NULL\n");
+        ok(szStatusText == NULL, "szStatusText = %s\n", debugstr_w(szStatusText));
+        break;
+    case BINDSTATUS_ENCODING:
+        CHECK_EXPECT(ReportProgress_ENCODING);
+        ok(!strcmp_wa(szStatusText, "gzip"), "szStatusText = %s\n", debugstr_w(szStatusText));
+        break;
+    case BINDSTATUS_ACCEPTRANGES:
+        CHECK_EXPECT(ReportProgress_ACCEPTRANGES);
+        ok(!szStatusText, "szStatusText = %s\n", debugstr_w(szStatusText));
         break;
     default:
         ok(0, "Unexpected status %d\n", ulStatusCode);
@@ -498,7 +517,7 @@ static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWOR
         ok(ulProgressMax == 13, "ulProgressMax=%d, expected 13\n", ulProgressMax);
         ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION),
                 "grcfBSCF = %08x\n", grfBSCF);
-    }else if(!binding_test && tested_protocol == HTTP_TEST) {
+    }else if(!binding_test && (tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST)) {
         if(!(grfBSCF & BSCF_LASTDATANOTIFICATION))
             CHECK_EXPECT(ReportData);
         else if (http_post_test)
@@ -870,7 +889,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
     ok(hres == S_OK, "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08x\n", hres);
     CHECK_CALLED(ReportProgress_SENDINGREQUEST);
 
-    if(tested_protocol == HTTP_TEST) {
+    if(tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST) {
         IServiceProvider *service_provider;
         IHttpNegotiate *http_negotiate;
         IHttpNegotiate2 *http_negotiate2;
@@ -1084,7 +1103,7 @@ static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv,
     }
 
     if((b = !b))
-        return tested_protocol == HTTP_TEST ? E_PENDING : S_FALSE;
+        return tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST ? E_PENDING : S_FALSE;
 
     memset(pv, 'x', 100);
     prot_read += *pcbRead = 100;
@@ -1547,7 +1566,7 @@ static BOOL http_protocol_start(LPCWSTR url, BOOL is_first)
 
 /* is_first refers to whether this is the first call to this function
  * _for this url_ */
-static void test_http_protocol_url(LPCWSTR url, BOOL is_first)
+static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
 {
     IInternetProtocolInfo *protocol_info;
     IClassFactory *factory;
@@ -1557,7 +1576,8 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_first)
     http_url = url;
     http_is_first = is_first;
 
-    hres = CoGetClassObject(&CLSID_HttpProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
+    hres = CoGetClassObject(is_https ? &CLSID_HttpSProtocol : &CLSID_HttpProtocol,
+            CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
     ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres);
     if(FAILED(hres))
         return;
@@ -1676,25 +1696,37 @@ static void test_http_protocol(void)
     trace("Testing http protocol (not from urlmon)...\n");
     tested_protocol = HTTP_TEST;
     bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
-    test_http_protocol_url(winehq_url, TRUE);
+    test_http_protocol_url(winehq_url, FALSE, TRUE);
 
     trace("Testing http protocol (from urlmon)...\n");
     bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON;
-    test_http_protocol_url(winehq_url, FALSE);
+    test_http_protocol_url(winehq_url, FALSE, FALSE);
 
     trace("Testing http protocol (to file)...\n");
     bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NEEDFILE;
-    test_http_protocol_url(winehq_url, FALSE);
+    test_http_protocol_url(winehq_url, FALSE, FALSE);
 
     trace("Testing http protocol (post data)...\n");
     http_post_test = TRUE;
     /* Without this flag we get a ReportProgress_CACHEFILENAMEAVAILABLE
      * notification with BINDVERB_POST */
     bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE;
-    test_http_protocol_url(posttest_url, TRUE);
+    test_http_protocol_url(posttest_url, FALSE, TRUE);
     http_post_test = FALSE;
 }
 
+static void test_https_protocol(void)
+{
+    static const WCHAR codeweavers_url[] =
+        {'h','t','t','p','s',':','/','/','w','w','w','.','c','o','d','e','w','e','a','v','e','r','s',
+         '.','c','o','m','/','t','e','s','t','.','h','t','m','l',0};
+
+    trace("Testing https protocol (from urlmon)...\n");
+    tested_protocol = HTTPS_TEST;
+    bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE;
+    test_http_protocol_url(codeweavers_url, TRUE, TRUE);
+}
+
 static void test_mk_protocol(void)
 {
     IInternetProtocolInfo *protocol_info;
@@ -1939,7 +1971,7 @@ static void test_binding(int prot)
     CHECK_CALLED(SetPriority);
     CHECK_CALLED(Start);
 
-    if(prot == HTTP_TEST) {
+    if(prot == HTTP_TEST || prot == HTTPS_TEST) {
         while(prot_state < 4) {
             WaitForSingleObject(event_complete, INFINITE);
             SET_EXPECT(Continue);
@@ -1981,6 +2013,7 @@ START_TEST(protocol)
 
     test_file_protocol();
     test_http_protocol();
+    test_https_protocol();
     test_mk_protocol();
     test_CreateBinding();
     test_binding(FILE_TEST);




More information about the wine-cvs mailing list