diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2016-02-15 15:10:03 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2016-02-15 16:56:43 +0000 |
commit | d83fb2b2dea1296885fdefda6804c1dea961d48a (patch) | |
tree | 9ec93436af448ccf3e043877754c7f6f084ec71a /vcl/qa | |
parent | c0d4f3ad3307c7a0d0fddd8c413ef0cc91d382ae (diff) |
Unit test for opengl blocklist parsing and evaluating
Parsing unit test checks that the xml values are parsed correctly
and that the DriverInfo structure is populated with the expected
values.
Evaluate unit test checks that blacklisting / whitelisting
logic blocks OS/vendor/driver/device as expected.
Change-Id: Ib1b0926606f0835207c324193bbe19ba83f86bdc
Reviewed-on: https://gerrit.libreoffice.org/22371
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'vcl/qa')
-rw-r--r-- | vcl/qa/cppunit/blocklistparsertest.cxx | 161 | ||||
-rwxr-xr-x | vcl/qa/cppunit/test_blocklist_evaluate.xml | 47 | ||||
-rwxr-xr-x | vcl/qa/cppunit/test_blocklist_parse.xml | 75 |
3 files changed, 283 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/blocklistparsertest.cxx b/vcl/qa/cppunit/blocklistparsertest.cxx new file mode 100644 index 000000000000..66a4f7051651 --- /dev/null +++ b/vcl/qa/cppunit/blocklistparsertest.cxx @@ -0,0 +1,161 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sal/types.h> + +#include <cppunit/TestAssert.h> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> +#include <cppunit/plugin/TestPlugIn.h> + +#include <unotest/bootstrapfixturebase.hxx> + +#include "opengl/win/blocklist_parser.hxx" + +namespace +{ + +class BlocklistParserTest : public test::BootstrapFixtureBase +{ + void testParse(); + void testEvaluate(); + + CPPUNIT_TEST_SUITE(BlocklistParserTest); + CPPUNIT_TEST(testParse); + CPPUNIT_TEST(testEvaluate); + CPPUNIT_TEST_SUITE_END(); +}; + +void BlocklistParserTest::testParse() +{ + std::vector<wgl::DriverInfo> aDriveInfos; + + WinBlocklistParser aBlocklistParser(getURLFromSrc("vcl/qa/cppunit/") + "test_blocklist_parse.xml", aDriveInfos); + aBlocklistParser.parse(); + + CPPUNIT_ASSERT_EQUAL(20U, aDriveInfos.size()); + + size_t i = 0; + + for (bool bIsWhitelisted : {true, false}) + { + wgl::DriverInfo& aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); // "all" + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_LESS_THAN, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(10,20,30,40), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorIntel), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_LESS_THAN_OR_EQUAL, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(11,21,31,41), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorATI), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_GREATER_THAN, aDriveInfo.meComparisonOp); + CPPUNIT_ASSERT_EQUAL(wgl::V(12,22,32,42), aDriveInfo.mnDriverVersion); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAMD), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_GREATER_THAN_OR_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorNVIDIA), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorMicrosoft), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_NOT_EQUAL, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_EXCLUSIVE, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_INCLUSIVE, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_BETWEEN_INCLUSIVE_START, aDriveInfo.meComparisonOp); + + aDriveInfo = aDriveInfos[i++]; + CPPUNIT_ASSERT_EQUAL(bIsWhitelisted, aDriveInfo.mbWhitelisted); + CPPUNIT_ASSERT_EQUAL(WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAll), aDriveInfo.maAdapterVendor); + CPPUNIT_ASSERT_EQUAL(wgl::VersionComparisonOp::DRIVER_COMPARISON_IGNORED, aDriveInfo.meComparisonOp); + } +} + +void BlocklistParserTest::testEvaluate() +{ + std::vector<wgl::DriverInfo> aDriveInfos; + + WinBlocklistParser aBlocklistParser(getURLFromSrc("vcl/qa/cppunit/") + "test_blocklist_evaluate.xml", aDriveInfos); + aBlocklistParser.parse(); + + OUString vendorAMD = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorAMD); + OUString vendorNVIDIA = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorNVIDIA); + OUString vendorIntel = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorIntel); + OUString vendorMicrosoft = WinOpenGLDeviceInfo::GetDeviceVendor(wgl::VendorMicrosoft); + + uint32_t osWindowsXP = 0x00050001; + uint32_t osWindowsVista = 0x00060000; + uint32_t osWindows7 = 0x00060001; + uint32_t osWindows8 = 0x00060002; + uint32_t osWindows10 = 0x000A0000; + + // Check OS + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindowsXP)); + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindowsVista)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows8)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorNVIDIA, "all", osWindows10)); + + + // Check Vendors + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorMicrosoft, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorMicrosoft, "all", osWindows10)); + + // Check Versions + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.39", vendorAMD, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.40", vendorAMD, "all", osWindows7)); + CPPUNIT_ASSERT_EQUAL(false, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "10.20.30.41", vendorAMD, "all", osWindows7)); + + // Check + CPPUNIT_ASSERT_EQUAL(true, WinOpenGLDeviceInfo::FindBlocklistedDeviceInList( + aDriveInfos, "9.17.10.4229", vendorIntel, "all", osWindows7)); + + +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(BlocklistParserTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/qa/cppunit/test_blocklist_evaluate.xml b/vcl/qa/cppunit/test_blocklist_evaluate.xml new file mode 100755 index 000000000000..7ffbe3a1b588 --- /dev/null +++ b/vcl/qa/cppunit/test_blocklist_evaluate.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +* This file is part of the LibreOffice project. +* +* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. +--> + +<!-- + entry attributes: + os - "all", "xp", "server2003", "vista", "7", "8", "8_1", "10" + vendor - "all", "intel", "ati", "amd", "nvidia", "microsoft" + compare - "less", "less_equal", "greater", "greater_equal", "equal", "not_equal", "between_exclusive", "between_inclusive", "between_inclusive_start" + version + minVersion + maxVersion +--> + +<root> + <whitelist> + </whitelist> + <blacklist> + <entry os="xp" vendor="all"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="all"> + <device id="all"/> + </entry> + <entry os="vista" vendor="all"> + <device id="all"/> + </entry> + + <entry os="all" vendor="amd" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + + <entry os="all" vendor="microsoft"> + <device id="all"/> + </entry> + + <entry os="all" vendor="intel" compare="less" version="10.18.14.4264"> + <device id="all"/> + </entry> + + </blacklist> +</root> diff --git a/vcl/qa/cppunit/test_blocklist_parse.xml b/vcl/qa/cppunit/test_blocklist_parse.xml new file mode 100755 index 000000000000..65646685aa7d --- /dev/null +++ b/vcl/qa/cppunit/test_blocklist_parse.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +* This file is part of the LibreOffice project. +* +* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. +--> + +<root> + <whitelist> + <entry os="all" vendor="all" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="xp" vendor="intel" compare="less_equal" version="11.21.31.41"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="ati" compare="greater" version="12.22.32.42"> + <device id="all"/> + </entry> + <entry os="vista" vendor="amd" compare="greater_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="7" vendor="nvidia" compare="equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8" vendor="microsoft" compare="not_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8_1" compare="between_exclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="10" compare="between_inclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all" compare="between_inclusive_start" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all"> + <device id="all"/> + </entry> + </whitelist> + <blacklist> + <entry os="all" vendor="all" compare="less" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="xp" vendor="intel" compare="less_equal" version="11.21.31.41"> + <device id="all"/> + </entry> + <entry os="server2003" vendor="ati" compare="greater" version="12.22.32.42"> + <device id="all"/> + </entry> + <entry os="vista" vendor="amd" compare="greater_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="7" vendor="nvidia" compare="equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8" vendor="microsoft" compare="not_equal" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="8_1" compare="between_exclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="10" compare="between_inclusive" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all" compare="between_inclusive_start" version="10.20.30.40"> + <device id="all"/> + </entry> + <entry os="all"> + <device id="all"/> + </entry> + </blacklist> +</root> |