diff options
Diffstat (limited to 'tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp')
-rw-r--r-- | tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp b/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp index 8b221dfc7a..3d3cb8330d 100644 --- a/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp +++ b/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp @@ -1,31 +1,6 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2018 Intel Corporation. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// Copyright (C) 2021 Intel Corporation. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> #include <QCoreApplication> @@ -54,8 +29,15 @@ private slots: }; tst_QPlugin::tst_QPlugin() - : dir(QFINDTESTDATA("plugins")) { + // On Android the plugins must be located in the APK's libs subdir +#ifndef Q_OS_ANDROID + dir = QFINDTESTDATA("plugins"); +#else + const QStringList paths = QCoreApplication::libraryPaths(); + if (!paths.isEmpty()) + dir = paths.first(); +#endif } void tst_QPlugin::initTestCase() @@ -75,7 +57,7 @@ void tst_QPlugin::loadDebugPlugin() if (!QLibrary::isLibrary(fileName)) continue; QPluginLoader loader(dir.filePath(fileName)); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) // we can always load a plugin on unix QVERIFY(loader.load()); QObject *object = loader.instance(); @@ -108,7 +90,7 @@ void tst_QPlugin::loadReleasePlugin() if (!QLibrary::isLibrary(fileName)) continue; QPluginLoader loader(dir.filePath(fileName)); -#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) // we can always load a plugin on unix QVERIFY(loader.load()); QObject *object = loader.instance(); @@ -138,11 +120,9 @@ void tst_QPlugin::scanInvalidPlugin_data() QTest::addColumn<QString>("errMsg"); // CBOR metadata - QByteArray cprefix = "QTMETADATA !1234"; - cprefix[12] = 0; // current version - cprefix[13] = QT_VERSION_MAJOR; - cprefix[14] = QT_VERSION_MINOR; - cprefix[15] = qPluginArchRequirements(); + static constexpr QPluginMetaData::MagicHeader header = {}; + static constexpr qsizetype MagicLen = sizeof(header.magic); + QByteArray cprefix(reinterpret_cast<const char *>(&header), sizeof(header)); QByteArray cborValid = [] { QCborMap m; @@ -153,27 +133,27 @@ void tst_QPlugin::scanInvalidPlugin_data() }(); QTest::newRow("cbor-control") << (cprefix + cborValid) << true << ""; - cprefix[12] = 1; - QTest::newRow("cbor-major-too-new") << (cprefix + cborValid) << false - << " Invalid metadata version"; - - cprefix[12] = 0; - cprefix[13] = QT_VERSION_MAJOR + 1; + cprefix[MagicLen + 1] = QT_VERSION_MAJOR + 1; QTest::newRow("cbor-major-too-new") << (cprefix + cborValid) << false << ""; - cprefix[13] = QT_VERSION_MAJOR - 1; + cprefix[MagicLen + 1] = QT_VERSION_MAJOR - 1; QTest::newRow("cbor-major-too-old") << (cprefix + cborValid) << false << ""; - cprefix[13] = QT_VERSION_MAJOR; - cprefix[14] = QT_VERSION_MINOR + 1; + cprefix[MagicLen + 1] = QT_VERSION_MAJOR; + cprefix[MagicLen + 2] = QT_VERSION_MINOR + 1; QTest::newRow("cbor-minor-too-new") << (cprefix + cborValid) << false << ""; + cprefix[MagicLen + 2] = QT_VERSION_MINOR; QTest::newRow("cbor-invalid") << (cprefix + "\xff") << false << " Metadata parsing error: Invalid CBOR stream: unexpected 'break' byte"; QTest::newRow("cbor-not-map1") << (cprefix + "\x01") << false << " Unexpected metadata contents"; QTest::newRow("cbor-not-map2") << (cprefix + "\x81\x01") << false << " Unexpected metadata contents"; + + ++cprefix[MagicLen + 0]; + QTest::newRow("cbor-major-too-new-invalid") + << (cprefix + cborValid) << false << " Invalid metadata version"; } static const char invalidPluginSignature[] = "qplugin testfile"; @@ -236,13 +216,14 @@ void tst_QPlugin::scanInvalidPlugin() memset(data + offset + metadata.size(), 0, 512 - metadata.size()); } +#if defined(Q_OS_QNX) + // On QNX plugin access is still too early + QTest::qSleep(1000); +#endif + // now try to load this QFETCH(bool, loads); QFETCH(QString, errMsg); - if (!errMsg.isEmpty()) - QTest::ignoreMessage(QtWarningMsg, - "Found invalid metadata in lib " + QFile::encodeName(newName) + - ":" + errMsg.toUtf8()); QPluginLoader loader(newName); QCOMPARE(loader.load(), loads); if (loads) |