quartz/tests: Skip some tests if not allowed to register filters.

Francois Gouget fgouget at free.fr
Sun Sep 18 12:42:15 CDT 2011


---

On Windows 7, if not running the tests with elevated privileges some 
registry keys/values cannot be modified. This fixes the test on my 
Windows 7 VM.

 dlls/quartz/tests/filtergraph.c  |   59 +++++++------
 dlls/quartz/tests/filtermapper.c |  177 ++++++++++++++++++++-----------------
 2 files changed, 128 insertions(+), 108 deletions(-)

diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index 7031199..d8c5ad7 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -1811,39 +1811,44 @@ static void test_render_filter_priority(void)
 
     hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter2, wszFilterInstanceName2, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
-    ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+    if (hr == E_ACCESSDENIED)
+        skip("Not authorized to register filters\n");
+    else
+    {
+        ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
 
-    rgf2.dwMerit = MERIT_PREFERRED;
-    rgPinType[0].clsMinorType = &mediasubtype2;
+        rgf2.dwMerit = MERIT_PREFERRED;
+        rgPinType[0].clsMinorType = &mediasubtype2;
 
-    hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter4, wszFilterInstanceName4, NULL,
+        hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter4, wszFilterInstanceName4, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
-    ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
-
-    S1(U(rgf2)).cPins2 = 2;
-    rgPins2[0].dwFlags = 0;
-    rgPinType[0].clsMinorType = &mediasubtype1;
-
-    rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
-    rgPins2[1].cInstances = 1;
-    rgPins2[1].nMediaTypes = 1;
-    rgPins2[1].lpMediaType = &rgPinType[1];
-    rgPins2[1].nMediums = 0;
-    rgPins2[1].lpMedium = NULL;
-    rgPins2[1].clsPinCategory = NULL;
-    rgPinType[1].clsMajorType = &MEDIATYPE_Video;
-    rgPinType[1].clsMinorType = &mediasubtype2;
-
-    hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter3, wszFilterInstanceName3, NULL,
+        ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+
+        S1(U(rgf2)).cPins2 = 2;
+        rgPins2[0].dwFlags = 0;
+        rgPinType[0].clsMinorType = &mediasubtype1;
+
+        rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
+        rgPins2[1].cInstances = 1;
+        rgPins2[1].nMediaTypes = 1;
+        rgPins2[1].lpMediaType = &rgPinType[1];
+        rgPins2[1].nMediums = 0;
+        rgPins2[1].lpMedium = NULL;
+        rgPins2[1].clsPinCategory = NULL;
+        rgPinType[1].clsMajorType = &MEDIATYPE_Video;
+        rgPinType[1].clsMinorType = &mediasubtype2;
+
+        hr = IFilterMapper2_RegisterFilter(pMapper2, &CLSID_TestFilter3, wszFilterInstanceName3, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
-    ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+        ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
 
-    hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
-    ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
+        hr = IFilterGraph2_Render(pgraph2, ptestfilter->ppPins[0]);
+        ok(hr == S_OK, "IFilterGraph2_Render failed with %08x\n", hr);
 
-    get_connected_filter_name(ptestfilter, ConnectedFilterName1);
-    ok(!lstrcmp(ConnectedFilterName1, "TestfilterInstance3"),
-            "unexpected connected filter: %s\n", ConnectedFilterName1);
+        get_connected_filter_name(ptestfilter, ConnectedFilterName1);
+        ok(!lstrcmp(ConnectedFilterName1, "TestfilterInstance3"),
+           "unexpected connected filter: %s\n", ConnectedFilterName1);
+    }
 
     hr = IFilterMapper2_UnregisterFilter(pMapper2, &CLSID_LegacyAmFilterCategory, NULL,
             &CLSID_TestFilter2);
diff --git a/dlls/quartz/tests/filtermapper.c b/dlls/quartz/tests/filtermapper.c
index 4a8a3bb..cd3ea17 100644
--- a/dlls/quartz/tests/filtermapper.c
+++ b/dlls/quartz/tests/filtermapper.c
@@ -117,58 +117,63 @@ static void test_fm2_enummatchingfilters(void)
 
     hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter1, wszFilterName1, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
-    ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+    if (hr == E_ACCESSDENIED)
+        skip("Not authorized to register filters\n");
+    else
+    {
+        ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
 
-    rgPins2[0].dwFlags = 0;
+        rgPins2[0].dwFlags = 0;
 
-    rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
-    rgPins2[1].cInstances = 1;
-    rgPins2[1].nMediaTypes = 1;
-    rgPins2[1].lpMediaType = &rgPinType;
-    rgPins2[1].nMediums = 0;
-    rgPins2[1].lpMedium = NULL;
-    rgPins2[1].clsPinCategory = NULL;
+        rgPins2[1].dwFlags = REG_PINFLAG_B_OUTPUT;
+        rgPins2[1].cInstances = 1;
+        rgPins2[1].nMediaTypes = 1;
+        rgPins2[1].lpMediaType = &rgPinType;
+        rgPins2[1].nMediums = 0;
+        rgPins2[1].lpMedium = NULL;
+        rgPins2[1].clsPinCategory = NULL;
 
-    S1(U(rgf2)).cPins2 = 2;
+        S1(U(rgf2)).cPins2 = 2;
 
-    hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter2, wszFilterName2, NULL,
+        hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter2, wszFilterName2, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
-    ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
+        ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
 
-    hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
+        hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
                 0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL, &GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
-    if (SUCCEEDED(hr) && pEnum)
-    {
-        found = enum_find_filter(wszFilterName1, pEnum);
-        ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
-    }
+        ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
+        if (SUCCEEDED(hr) && pEnum)
+        {
+            found = enum_find_filter(wszFilterName1, pEnum);
+            ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
+        }
 
-    if (pEnum) IEnumMoniker_Release(pEnum);
-    pEnum = NULL;
+        if (pEnum) IEnumMoniker_Release(pEnum);
+        pEnum = NULL;
 
-    hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
+        hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
                 0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL, &GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
-    if (SUCCEEDED(hr) && pEnum)
-    {
-        found = enum_find_filter(wszFilterName2, pEnum);
-        ok(found, "EnumMatchingFilters failed to return the test filter 2\n");
-    }
+        ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
+        if (SUCCEEDED(hr) && pEnum)
+        {
+            found = enum_find_filter(wszFilterName2, pEnum);
+            ok(found, "EnumMatchingFilters failed to return the test filter 2\n");
+        }
 
-    if (pEnum) IEnumMoniker_Release(pEnum);
-    pEnum = NULL;
+        if (pEnum) IEnumMoniker_Release(pEnum);
+        pEnum = NULL;
 
-    /* Non renderer must not be returned with bRender=TRUE */
+        /* Non renderer must not be returned with bRender=TRUE */
 
-    hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
+        hr = IFilterMapper2_EnumMatchingFilters(pMapper, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
                 0, NULL, NULL, &GUID_NULL, TRUE, FALSE, 0, NULL, NULL, &GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
+        ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
 
-    if (SUCCEEDED(hr) && pEnum)
-    {
-        found = enum_find_filter(wszFilterName1, pEnum);
-        ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
+        if (SUCCEEDED(hr) && pEnum)
+        {
+            found = enum_find_filter(wszFilterName1, pEnum);
+            ok(found, "EnumMatchingFilters failed to return the test filter 1\n");
+        }
     }
 
     if (pEnum) IEnumMoniker_Release(pEnum);
@@ -245,67 +250,72 @@ static void test_legacy_filter_registration(void)
     /* Register---- functions need a filter class key to write pin and pin media type data to. Create a bogus
      * class key for it. */
     lRet = RegCreateKeyExA(HKEY_CLASSES_ROOT, szRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
-    ok(lRet == ERROR_SUCCESS, "RegCreateKeyExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
+    if (lRet == ERROR_ACCESS_DENIED)
+        skip("Not authorized to register filters\n");
+    else
+    {
+        ok(lRet == ERROR_SUCCESS, "RegCreateKeyExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
 
-    /* Set default value - this is interpreted as "friendly name" later. */
-    lRet = RegSetValueExA(hKey, NULL, 0, REG_SZ, (LPBYTE)szFilterName, lstrlenA(szFilterName) + 1);
-    ok(lRet == ERROR_SUCCESS, "RegSetValueExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
+        /* Set default value - this is interpreted as "friendly name" later. */
+        lRet = RegSetValueExA(hKey, NULL, 0, REG_SZ, (LPBYTE)szFilterName, lstrlenA(szFilterName) + 1);
+        ok(lRet == ERROR_SUCCESS, "RegSetValueExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
 
-    if (hKey) RegCloseKey(hKey);
-    hKey = NULL;
+        if (hKey) RegCloseKey(hKey);
+        hKey = NULL;
 
-    hr = IFilterMapper_RegisterFilter(pMapper, clsidFilter, wszFilterName, MERIT_UNLIKELY);
-    ok(hr == S_OK, "IFilterMapper_RegisterFilter failed with %x\n", hr);
+        hr = IFilterMapper_RegisterFilter(pMapper, clsidFilter, wszFilterName, MERIT_UNLIKELY);
+        ok(hr == S_OK, "IFilterMapper_RegisterFilter failed with %x\n", hr);
 
-    hr = IFilterMapper_RegisterPin(pMapper, clsidFilter, wszPinName, TRUE, FALSE, FALSE, FALSE, GUID_NULL, NULL);
-    ok(hr == S_OK, "IFilterMapper_RegisterPin failed with %x\n", hr);
+        hr = IFilterMapper_RegisterPin(pMapper, clsidFilter, wszPinName, TRUE, FALSE, FALSE, FALSE, GUID_NULL, NULL);
+        ok(hr == S_OK, "IFilterMapper_RegisterPin failed with %x\n", hr);
 
-    hr = IFilterMapper_RegisterPinType(pMapper, clsidFilter, wszPinName, GUID_NULL, GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper_RegisterPinType failed with %x\n", hr);
+        hr = IFilterMapper_RegisterPinType(pMapper, clsidFilter, wszPinName, GUID_NULL, GUID_NULL);
+        ok(hr == S_OK, "IFilterMapper_RegisterPinType failed with %x\n", hr);
 
-    hr = IFilterMapper2_EnumMatchingFilters(pMapper2, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
+        hr = IFilterMapper2_EnumMatchingFilters(pMapper2, &pEnum, 0, TRUE, MERIT_UNLIKELY, TRUE,
                 0, NULL, NULL, &GUID_NULL, FALSE, FALSE, 0, NULL, NULL, &GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
-    if (SUCCEEDED(hr) && pEnum)
-    {
-        found = enum_find_filter(wszFilterName, pEnum);
-        ok(found, "IFilterMapper2_EnumMatchingFilters failed to return the test filter\n");
-    }
+        ok(hr == S_OK, "IFilterMapper2_EnumMatchingFilters failed with %x\n", hr);
+        if (SUCCEEDED(hr) && pEnum)
+        {
+            found = enum_find_filter(wszFilterName, pEnum);
+            ok(found, "IFilterMapper2_EnumMatchingFilters failed to return the test filter\n");
+        }
 
-    if (pEnum) IEnumMoniker_Release(pEnum);
-    pEnum = NULL;
+        if (pEnum) IEnumMoniker_Release(pEnum);
+        pEnum = NULL;
 
-    found = FALSE;
-    hr = IFilterMapper_EnumMatchingFilters(pMapper, &pRegEnum, MERIT_UNLIKELY, TRUE, GUID_NULL, GUID_NULL,
+        found = FALSE;
+        hr = IFilterMapper_EnumMatchingFilters(pMapper, &pRegEnum, MERIT_UNLIKELY, TRUE, GUID_NULL, GUID_NULL,
             FALSE, FALSE, GUID_NULL, GUID_NULL);
-    ok(hr == S_OK, "IFilterMapper_EnumMatchingFilters failed with %x\n", hr);
-    if (SUCCEEDED(hr) && pRegEnum)
-    {
-        ULONG cFetched;
-        REGFILTER *prgf;
-
-        while(!found && IEnumRegFilters_Next(pRegEnum, 1, &prgf, &cFetched) == S_OK)
+        ok(hr == S_OK, "IFilterMapper_EnumMatchingFilters failed with %x\n", hr);
+        if (SUCCEEDED(hr) && pRegEnum)
         {
-            CHAR val[512];
+            ULONG cFetched;
+            REGFILTER *prgf;
 
-            WideCharToMultiByte(CP_ACP, 0, prgf->Name, -1, val, sizeof(val), 0, 0);
-            if (!lstrcmpA(val, szFilterName)) found = TRUE;
+            while(!found && IEnumRegFilters_Next(pRegEnum, 1, &prgf, &cFetched) == S_OK)
+            {
+                CHAR val[512];
 
-            CoTaskMemFree(prgf);
-        }
+                WideCharToMultiByte(CP_ACP, 0, prgf->Name, -1, val, sizeof(val), 0, 0);
+                if (!lstrcmpA(val, szFilterName)) found = TRUE;
 
-        IEnumRegFilters_Release(pRegEnum);
-    }
-    ok(found, "IFilterMapper_EnumMatchingFilters failed to return the test filter\n");
+                CoTaskMemFree(prgf);
+            }
 
-    hr = IFilterMapper_UnregisterFilter(pMapper, clsidFilter);
-    ok(hr == S_OK, "FilterMapper_UnregisterFilter failed with %x\n", hr);
+            IEnumRegFilters_Release(pRegEnum);
+        }
+        ok(found, "IFilterMapper_EnumMatchingFilters failed to return the test filter\n");
+
+        hr = IFilterMapper_UnregisterFilter(pMapper, clsidFilter);
+        ok(hr == S_OK, "FilterMapper_UnregisterFilter failed with %x\n", hr);
 
-    lRet = RegOpenKeyExA(HKEY_CLASSES_ROOT, szClsid, 0, KEY_WRITE | DELETE, &hKey);
-    ok(lRet == ERROR_SUCCESS, "RegOpenKeyExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
+        lRet = RegOpenKeyExA(HKEY_CLASSES_ROOT, szClsid, 0, KEY_WRITE | DELETE, &hKey);
+        ok(lRet == ERROR_SUCCESS, "RegOpenKeyExA failed with %x\n", HRESULT_FROM_WIN32(lRet));
 
-    lRet = RegDeleteKeyA(hKey, szGuidstring);
-    ok(lRet == ERROR_SUCCESS, "RegDeleteKeyA failed with %x\n", HRESULT_FROM_WIN32(lRet));
+        lRet = RegDeleteKeyA(hKey, szGuidstring);
+        ok(lRet == ERROR_SUCCESS, "RegDeleteKeyA failed with %x\n", HRESULT_FROM_WIN32(lRet));
+    }
 
     if (hKey) RegCloseKey(hKey);
     hKey = NULL;
@@ -420,6 +430,11 @@ static void test_register_filter_with_null_clsMinorType(void)
 
     hr = IFilterMapper2_RegisterFilter(pMapper, &clsidFilter1, wszFilterName1, NULL,
                     &CLSID_LegacyAmFilterCategory, NULL, &rgf2);
+    if (hr == E_ACCESSDENIED)
+    {
+        skip("Not authorized to register filters\n");
+        goto out;
+    }
     ok(hr == S_OK, "IFilterMapper2_RegisterFilter failed with %x\n", hr);
 
     hr = IFilterMapper2_UnregisterFilter(pMapper, &CLSID_LegacyAmFilterCategory, NULL, &clsidFilter1);
-- 
1.7.5.4




More information about the wine-patches mailing list