diff options
-rw-r--r-- | .gitattributes | 1 | ||||
-rw-r--r-- | tests/auto/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/auto/architecture/CMakeLists.txt | 10 | ||||
-rw-r--r-- | tests/auto/architecture/tst_architecture.cpp | 69 | ||||
-rw-r--r-- | tests/auto/utilities/CMakeLists.txt | 16 | ||||
-rw-r--r-- | tests/auto/utilities/tst_utilities.cpp | 29 | ||||
-rw-r--r-- | tests/data/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/data/binaries/README.md | 52 | ||||
-rw-r--r-- | tests/data/binaries/android-elf.so.zz | bin | 0 -> 2040 bytes | |||
-rw-r--r-- | tests/data/binaries/macos-macho.zz | bin | 0 -> 696 bytes | |||
-rw-r--r-- | tests/data/binaries/macos-universal.zz | bin | 0 -> 1262 bytes | |||
-rw-r--r-- | tests/data/binaries/windows-pe.exe.zz | bin | 0 -> 619 bytes |
12 files changed, 134 insertions, 46 deletions
diff --git a/.gitattributes b/.gitattributes index 98e17a15..723cab5b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,7 @@ *.crt binary *.bin binary +*.zz binary .tag export-subst .gitignore export-ignore diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt index f4b5442a..c507b4b5 100644 --- a/tests/auto/CMakeLists.txt +++ b/tests/auto/CMakeLists.txt @@ -22,7 +22,7 @@ if (NOT ANDROID) endif() add_subdirectory(runtime) add_subdirectory(signature) -add_subdirectory(utilities) +add_subdirectory(architecture) add_subdirectory(yaml) if (LINUX) diff --git a/tests/auto/architecture/CMakeLists.txt b/tests/auto/architecture/CMakeLists.txt new file mode 100644 index 00000000..92eea7a6 --- /dev/null +++ b/tests/auto/architecture/CMakeLists.txt @@ -0,0 +1,10 @@ + +qt_internal_add_test(tst_architecture + SOURCES + ../error-checking.h + tst_architecture.cpp + DEFINES + AM_TESTDATA_DIR="${CMAKE_CURRENT_BINARY_DIR}/../../data/" + LIBRARIES + Qt::AppManCommonPrivate +) diff --git a/tests/auto/architecture/tst_architecture.cpp b/tests/auto/architecture/tst_architecture.cpp new file mode 100644 index 00000000..db8d4055 --- /dev/null +++ b/tests/auto/architecture/tst_architecture.cpp @@ -0,0 +1,69 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include <QtCore> +#include <QtTest> +#include <QtEndian> +#include <QString> + +#include "architecture.h" + +QT_USE_NAMESPACE_AM +using namespace Qt::StringLiterals; + +class tst_Architecture : public QObject +{ + Q_OBJECT + +public: + tst_Architecture() = default; + +private slots: + void initTestCase(); + void architecture_data(); + void architecture(); +}; + + +void tst_Architecture::initTestCase() +{ + if (!QDir(QString::fromLatin1(AM_TESTDATA_DIR "/binaries")).exists()) + QSKIP("No test binaries available in the data/ directory"); +} + +void tst_Architecture::architecture_data() +{ + QTest::addColumn<QString>("path"); + QTest::addColumn<QString>("archId"); + + QTest::newRow("android-elf") << "android-elf.so.zz" << "android_arm_32"; + QTest::newRow("windows-pe") << "windows-pe.exe.zz" << "windows_x86_64"; + QTest::newRow("macos-macho") << "macos-macho.zz" << "macos_arm_64"; + QTest::newRow("macos-universal") << "macos-universal.zz" << "macos_universal_arm_64+x86_64"; +} + +void tst_Architecture::architecture() +{ + QFETCH(QString, path); + QFETCH(QString, archId); + + QString fullPath = QString::fromLatin1(AM_TESTDATA_DIR) + u"/binaries/"_s + path; + QFile src(fullPath); + QVERIFY(src.open(QIODevice::ReadOnly)); + auto content = src.readAll(); + quint32 contentLen = content.size(); + QVERIFY(contentLen > 0); + content = qUncompress(content); + QVERIFY(content.size() > 0); + QTemporaryFile dst; + QVERIFY(dst.open()); + QVERIFY(dst.write(content) == content.size()); + dst.close(); + QString id = Architecture::identify(dst.fileName()); + + QCOMPARE(id, archId); +} + +QTEST_APPLESS_MAIN(tst_Architecture) + +#include "tst_architecture.moc" diff --git a/tests/auto/utilities/CMakeLists.txt b/tests/auto/utilities/CMakeLists.txt deleted file mode 100644 index 7e202ebe..00000000 --- a/tests/auto/utilities/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ - -qt_internal_add_test(tst_utilities - SOURCES - ../error-checking.h - tst_utilities.cpp - DEFINES - AM_TESTDATA_DIR="${CMAKE_CURRENT_BINARY_DIR}/../../data/" - LIBRARIES - Qt::Network - Qt::AppManCommonPrivate -) - -qt_internal_extend_target(tst_utilities CONDITION TARGET Qt::DBus - LIBRARIES - Qt::DBus -) diff --git a/tests/auto/utilities/tst_utilities.cpp b/tests/auto/utilities/tst_utilities.cpp deleted file mode 100644 index 3c9b05e4..00000000 --- a/tests/auto/utilities/tst_utilities.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2021 The Qt Company Ltd. -// Copyright (C) 2019 Luxoft Sweden AB -// Copyright (C) 2018 Pelagicore AG -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 - -#include <QtCore> -#include <QtTest> - -#include "utilities.h" - -QT_USE_NAMESPACE_AM - -class tst_Utilities : public QObject -{ - Q_OBJECT - -public: - tst_Utilities(); - -private slots: -}; - - -tst_Utilities::tst_Utilities() -{ } - -QTEST_APPLESS_MAIN(tst_Utilities) - -#include "tst_utilities.moc" diff --git a/tests/data/CMakeLists.txt b/tests/data/CMakeLists.txt index 31b64799..79f03770 100644 --- a/tests/data/CMakeLists.txt +++ b/tests/data/CMakeLists.txt @@ -15,6 +15,7 @@ file(GLOB_RECURSE TEST_DATA_FILES info.yaml testfile utilities.sh + binaries/*.zz ) add_custom_target(Test-Data-Files SOURCES diff --git a/tests/data/binaries/README.md b/tests/data/binaries/README.md new file mode 100644 index 00000000..199c55c7 --- /dev/null +++ b/tests/data/binaries/README.md @@ -0,0 +1,52 @@ +## Generation + +Here's how to (re)generate the test binaries in this directory: + +- `android-elf.so`: + + This is a copy of `Qt/6.7.0/android_armv7/lib/libQt6QuickParticles_armeabi-v7a.so` + +- `windows-pe.exe`: + + This is a minimal C program, compiled with cmake + MSVC: + - `main.c`: + ``` + int __stdcall WinMainCRTStartup() { return 0; } + ``` + + - `CMakeLists.txt`: + ``` + cmake_minimum_required(VERSION 3.5) + project(windows-pe LANGUAGES C) + add_executable(windows-pe WIN32 main.c) + set_target_properties(windows-pe PROPERTIES LINK_FLAGS "/NODEFAULTLIB") + ``` + +- `macos-macho` and `macos-macho-universal`: + + This is a minimal C program, compiled on the command line: + - `main.c`: + ``` + int main() { return 0; } + ``` + + - Compile with: + ``` + clang main.c -o macos-macho + clang main.c -arch x86_64 -arch arm64 -o macos-macho-universal + ``` + + +## Compression + +The .zz files here are in Qt's `qCompress` format. + +- compress `${file}` on the command line: + ``` + $ printf "0: %08x" `stat -c "%s" $file` | xxd -r > $file.zz ; pigz -z <$file >>$file.zz + ``` + +- decompress `${file}.zz` on the command line: + ``` + $ dd if=${file}.zz bs=4 skip=1 | pigz -d >${file} + ``` diff --git a/tests/data/binaries/android-elf.so.zz b/tests/data/binaries/android-elf.so.zz Binary files differnew file mode 100644 index 00000000..a06f8341 --- /dev/null +++ b/tests/data/binaries/android-elf.so.zz diff --git a/tests/data/binaries/macos-macho.zz b/tests/data/binaries/macos-macho.zz Binary files differnew file mode 100644 index 00000000..db91c82a --- /dev/null +++ b/tests/data/binaries/macos-macho.zz diff --git a/tests/data/binaries/macos-universal.zz b/tests/data/binaries/macos-universal.zz Binary files differnew file mode 100644 index 00000000..b91409f2 --- /dev/null +++ b/tests/data/binaries/macos-universal.zz diff --git a/tests/data/binaries/windows-pe.exe.zz b/tests/data/binaries/windows-pe.exe.zz Binary files differnew file mode 100644 index 00000000..c3fd3454 --- /dev/null +++ b/tests/data/binaries/windows-pe.exe.zz |