summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp')
-rw-r--r--tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp119
1 files changed, 33 insertions, 86 deletions
diff --git a/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp b/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp
index 1a7cf2e1e8..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();
@@ -137,49 +119,10 @@ void tst_QPlugin::scanInvalidPlugin_data()
QTest::addColumn<bool>("loads");
QTest::addColumn<QString>("errMsg");
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- // Binary JSON metadata
- QByteArray prefix = "QTMETADATA ";
-
- {
- QJsonObject obj;
- obj.insert("IID", "org.qt-project.tst_qplugin");
- obj.insert("className", "tst");
- obj.insert("version", int(QT_VERSION));
-#ifdef QT_NO_DEBUG
- obj.insert("debug", false);
-#else
- obj.insert("debug", true);
-#endif
- obj.insert("MetaData", QJsonObject());
- QTest::newRow("json-control") << (prefix + QJsonDocument(obj).toBinaryData()) << true << "";
- }
-
- QTest::newRow("json-zeroes") << prefix << false << " ";
-
- prefix += "qbjs";
- QTest::newRow("bad-json-version0") << prefix << false << " ";
- QTest::newRow("bad-json-version2") << (prefix + QByteArray("\2\0\0\0", 4)) << false << " ";
-
- // valid qbjs version 1
- prefix += QByteArray("\1\0\0\0");
-
- // too large for the file (100 MB)
- QTest::newRow("bad-json-size-large1") << (prefix + QByteArray("\0\0\x40\x06")) << false << " ";
-
- // too large for binary JSON (512 MB)
- QTest::newRow("bad-json-size-large2") << (prefix + QByteArray("\0\0\0\x20")) << false << " ";
-
- // could overflow
- QTest::newRow("bad-json-size-large3") << (prefix + "\xff\xff\xff\x7f") << false << " ";
-#endif
-
// 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;
@@ -190,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";
@@ -234,6 +177,9 @@ static qsizetype locateMetadata(const uchar *data, qsizetype len)
void tst_QPlugin::scanInvalidPlugin()
{
+#if defined(Q_OS_MACOS) && defined(Q_PROCESSOR_ARM)
+ QSKIP("This test crashes on ARM macOS");
+#endif
const auto fileNames = dir.entryList({"*invalid*"}, QDir::Files);
QString invalidPluginName;
if (fileNames.isEmpty())
@@ -270,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)