Owen Rudge : wsdapi/tests: Expand ProbeHandler tests.

Alexandre Julliard julliard at winehq.org
Wed May 30 15:30:50 CDT 2018


Module: wine
Branch: master
Commit: e207300b4443f551ea1dd368b0d51d579749275a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e207300b4443f551ea1dd368b0d51d579749275a

Author: Owen Rudge <orudge at codeweavers.com>
Date:   Tue May 29 23:14:51 2018 +0100

wsdapi/tests: Expand ProbeHandler tests.

Signed-off-by: Owen Rudge <orudge at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wsdapi/tests/discovery.c | 113 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 102 insertions(+), 11 deletions(-)

diff --git a/dlls/wsdapi/tests/discovery.c b/dlls/wsdapi/tests/discovery.c
index e73ee77..cfdd41f 100644
--- a/dlls/wsdapi/tests/discovery.c
+++ b/dlls/wsdapi/tests/discovery.c
@@ -47,8 +47,27 @@ static const char testProbeMessage[] = "<?xml version=\"1.0\" encoding=\"utf-8\"
     "xmlns:wsd=\"http://schemas.xmlsoap.org/ws/2005/04/discovery\" "
     "xmlns:grog=\"http://more.tests/\"><soap:Header><wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To>"
     "<wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action>"
-    "<wsa:MessageID>urn:uuid:%s</wsa:MessageID></soap:Header>"
-    "<soap:Body><wsd:Probe><wsd:Types>grog:Cider</wsd:Types></wsd:Probe></soap:Body></soap:Envelope>";
+    "<wsa:MessageID>urn:uuid:%s</wsa:MessageID>"
+    "<grog:Perry>ExtraInfo</grog:Perry></soap:Header>"
+    "<soap:Body><wsd:Probe><wsd:Types>grog:Cider</wsd:Types><grog:Lager>MoreInfo</grog:Lager></wsd:Probe></soap:Body></soap:Envelope>";
+
+static const WCHAR discoveryTo[] = {
+    'u','r','n',':',
+    's','c','h','e','m','a','s','-','x','m','l','s','o','a','p','-','o','r','g',':',
+    'w','s',':','2','0','0','5',':','0','4',':',
+    'd','i','s','c','o','v','e','r','y', 0 };
+
+static const WCHAR actionProbe[] = {
+    'h','t','t','p',':','/','/',
+    's','c','h','e','m','a','s','.','x','m','l','s','o','a','p','.','o','r','g','/',
+    'w','s','/','2','0','0','5','/','0','4','/',
+    'd','i','s','c','o','v','e','r','y','/',
+    'P','r','o','b','e', 0 };
+
+static const WCHAR uri_more_tests[] = { 'h','t','t','p',':','/','/','m','o','r','e','.','t','e','s','t','s','/', 0 };
+static const WCHAR uri_more_tests_no_slash[] = { 'h','t','t','p',':','/','/','m','o','r','e','.','t','e','s','t','s', 0 };
+static const WCHAR prefix_grog[] = { 'g','r','o','g', 0 };
+static const WCHAR name_cider[] = { 'C','i','d','e','r', 0 };
 
 static HANDLE probe_event = NULL;
 static UUID probe_message_id;
@@ -449,6 +468,53 @@ static ULONG WINAPI IWSDiscoveryPublisherNotifyImpl_Release(IWSDiscoveryPublishe
     return ref;
 }
 
+static void verify_wsdxml_name(const char *debug_prefix, WSDXML_NAME *name, LPCWSTR uri, LPCWSTR prefix,
+    LPCWSTR local_name)
+{
+    ok(name != NULL, "%s: name == NULL\n", debug_prefix);
+    if (name == NULL) return;
+
+    ok(name->LocalName != NULL && lstrcmpW(name->LocalName, local_name) == 0,
+        "%s: Local name = '%s'\n", debug_prefix, wine_dbgstr_w(name->LocalName));
+
+    ok(name->Space != NULL, "%s: Space == NULL\n", debug_prefix);
+    if (name->Space == NULL) return;
+
+    ok(name->Space->Uri != NULL && lstrcmpW(name->Space->Uri, uri) == 0,
+        "%s: URI == '%s'\n", debug_prefix, wine_dbgstr_w(name->Space->Uri));
+    ok(name->Space->PreferredPrefix != NULL && lstrcmpW(name->Space->PreferredPrefix, prefix) == 0,
+        "%s: Prefix = '%s'\n", debug_prefix, wine_dbgstr_w(name->Space->PreferredPrefix));
+}
+
+static void verify_wsdxml_any_text(const char *debug_prefix, WSDXML_ELEMENT *any, LPCWSTR uri, LPCWSTR prefix,
+    LPCWSTR local_name, LPCWSTR value)
+{
+    WSDXML_TEXT *child;
+
+    ok(any != NULL, "%s: any == NULL\n", debug_prefix);
+    if (any == NULL) return;
+
+    child = (WSDXML_TEXT *) any->FirstChild;
+
+    ok(any->Node.Type == ElementType, "%s: Node type == %d\n", debug_prefix, any->Node.Type);
+    ok(any->Node.Parent == NULL, "%s: Parent == %p\n", debug_prefix, any->Node.Parent);
+    ok(any->Node.Next == NULL, "%s: Next == %p\n", debug_prefix, any->Node.Next);
+    verify_wsdxml_name(debug_prefix, any->Name, uri, prefix, local_name);
+
+    ok(child != NULL, "%s: First child == NULL\n", debug_prefix);
+
+    if (child != NULL)
+    {
+        ok(child->Node.Type == TextType, "%s: Node type == %d\n", debug_prefix, child->Node.Type);
+        ok(child->Node.Parent == any, "%s: Parent == %p\n", debug_prefix, child->Node.Parent);
+        ok(child->Node.Next == NULL, "%s: Next == %p\n", debug_prefix, child->Node.Next);
+
+        if (child->Node.Type == TextType)
+            ok(child->Text != NULL && lstrcmpW(child->Text, value) == 0,
+                "%s: Text == '%s'\n", debug_prefix, wine_dbgstr_w(child->Text));
+    }
+}
+
 static HRESULT WINAPI IWSDiscoveryPublisherNotifyImpl_ProbeHandler(IWSDiscoveryPublisherNotify *This, const WSD_SOAP_MESSAGE *pSoap, IWSDMessageParameters *pMessageParameters)
 {
     trace("IWSDiscoveryPublisherNotifyImpl_ProbeHandler called (%p, %p, %p)\n", This, pSoap, pMessageParameters);
@@ -464,8 +530,15 @@ static HRESULT WINAPI IWSDiscoveryPublisherNotifyImpl_ProbeHandler(IWSDiscoveryP
 
     if (pSoap != NULL)
     {
+        static const WCHAR perry[] = {'P','e','r','r','y',0};
+        static const WCHAR extra_info[] = {'E','x','t','r','a','I','n','f','o',0};
+        WSD_PROBE *probe_msg = (WSD_PROBE *) pSoap->Body;
+
         ok(pSoap->Body != NULL, "pSoap->Body == NULL\n");
-        ok(pSoap->Header.To != NULL, "pSoap->Header.To == NULL\n");
+        ok(pSoap->Header.To != NULL && lstrcmpW(pSoap->Header.To, discoveryTo) == 0,
+            "pSoap->Header.To == '%s'\n", wine_dbgstr_w(pSoap->Header.To));
+        ok(pSoap->Header.Action != NULL && lstrcmpW(pSoap->Header.Action, actionProbe) == 0,
+            "pSoap->Header.Action == '%s'\n", wine_dbgstr_w(pSoap->Header.Action));
 
         ok(pSoap->Header.MessageID != NULL, "pSoap->Header.MessageID == NULL");
 
@@ -482,6 +555,27 @@ static HRESULT WINAPI IWSDiscoveryPublisherNotifyImpl_ProbeHandler(IWSDiscoveryP
                ignore it and wait for another message. */
             if ((ret != RPC_S_OK) || (UuidEqual(&uuid, &probe_message_id, &ret) == FALSE)) return S_OK;
         }
+
+        verify_wsdxml_any_text("pSoap->Header.AnyHeaders", pSoap->Header.AnyHeaders, uri_more_tests_no_slash,
+            prefix_grog, perry, extra_info);
+
+        if (probe_msg != NULL)
+        {
+            static const WCHAR lager[] = {'L','a','g','e','r',0};
+            static const WCHAR more_info[] = {'M','o','r','e','I','n','f','o',0};
+
+            ok(probe_msg->Types != NULL, "Probe message Types == NULL\n");
+
+            if (probe_msg->Types != NULL)
+            {
+                verify_wsdxml_name("probe_msg->Types->Element", probe_msg->Types->Element, uri_more_tests_no_slash,
+                    prefix_grog, name_cider);
+                ok(probe_msg->Types->Next == NULL, "probe_msg->Types->Next == %p\n", probe_msg->Types->Next);
+            }
+
+            ok(probe_msg->Scopes == NULL, "Probe message Scopes != NULL\n");
+            verify_wsdxml_any_text("probe_msg->Any", probe_msg->Any, uri_more_tests_no_slash, prefix_grog, lager, more_info);
+        }
     }
 
     SetEvent(probe_event);
@@ -628,15 +722,12 @@ static void Publish_tests(void)
     WSDXML_NAME header_any_name, another_name;
     WSDXML_NAMESPACE ns, ns2;
     WCHAR header_any_name_text[] = {'B','e','e','r',0};
-    WCHAR another_name_text[] = {'C','i','d','e','r',0};
     static const WCHAR header_any_text[] = {'P','u','b','l','i','s','h','T','e','s','t',0};
     static const WCHAR body_any_text[] = {'B','o','d','y','T','e','s','t',0};
     static const WCHAR endpoint_any_text[] = {'E','n','d','P','T','e','s','t',0};
     static const WCHAR ref_param_any_text[] = {'R','e','f','P','T','e','s','t',0};
     static const WCHAR uri[] = {'h','t','t','p',':','/','/','w','i','n','e','.','t','e','s','t','/',0};
     static const WCHAR prefix[] = {'w','i','n','e',0};
-    static const WCHAR uri2[] = {'h','t','t','p',':','/','/','m','o','r','e','.','t','e','s','t','s','/',0};
-    static const WCHAR prefix2[] = {'g','r','o','g',0};
     static const WCHAR uri3[] = {'h','t','t','p',':','/','/','t','h','i','r','d','.','u','r','l','/',0};
     WSD_NAME_LIST types_list;
     WSD_URI_LIST scopes_list, xaddrs_list;
@@ -722,10 +813,10 @@ static void Publish_tests(void)
     ok(rc == S_OK, "WSDXMLBuildAnyForSingleElement failed with %08x\n", rc);
 
     /* Create types list */
-    ns2.Uri = uri2;
-    ns2.PreferredPrefix = prefix2;
+    ns2.Uri = uri_more_tests;
+    ns2.PreferredPrefix = prefix_grog;
 
-    another_name.LocalName = another_name_text;
+    another_name.LocalName = (WCHAR *) name_cider;
     another_name.Space = &ns2;
 
     types_list.Next = malloc(sizeof(WSD_NAME_LIST));
@@ -739,10 +830,10 @@ static void Publish_tests(void)
     scopes_list.Element = uri;
 
     scopes_list.Next->Next = NULL;
-    scopes_list.Next->Element = uri2;
+    scopes_list.Next->Element = uri_more_tests;
 
     xaddrs_list.Next = malloc(sizeof(WSD_URI_LIST));
-    xaddrs_list.Element = uri2;
+    xaddrs_list.Element = uri_more_tests;
 
     xaddrs_list.Next->Next = NULL;
     xaddrs_list.Next->Element = uri3;




More information about the wine-cvs mailing list