From b79e9eccedb13a6a544cc8fa415d059095c200bc Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Wed, 1 Apr 2020 13:31:56 +0300 Subject: Add unit and CLI tests for DeleteOperation Task-number: QTIFW-1721 Change-Id: I874095cfbbb3b80925b1fa1c61774b4858955887 Reviewed-by: Katja Marttila --- .../data/repository/A/1.0.2-1meta.7z | Bin 0 -> 871 bytes .../deleteoperation/data/repository/Updates.xml | 13 ++ .../installer/deleteoperation/deleteoperation.pro | 10 ++ tests/auto/installer/deleteoperation/settings.qrc | 6 + .../deleteoperation/tst_deleteoperation.cpp | 144 +++++++++++++++++++++ tests/auto/installer/installer.pro | 3 +- 6 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 tests/auto/installer/deleteoperation/data/repository/A/1.0.2-1meta.7z create mode 100644 tests/auto/installer/deleteoperation/data/repository/Updates.xml create mode 100644 tests/auto/installer/deleteoperation/deleteoperation.pro create mode 100644 tests/auto/installer/deleteoperation/settings.qrc create mode 100644 tests/auto/installer/deleteoperation/tst_deleteoperation.cpp (limited to 'tests') diff --git a/tests/auto/installer/deleteoperation/data/repository/A/1.0.2-1meta.7z b/tests/auto/installer/deleteoperation/data/repository/A/1.0.2-1meta.7z new file mode 100644 index 000000000..c87d8642e Binary files /dev/null and b/tests/auto/installer/deleteoperation/data/repository/A/1.0.2-1meta.7z differ diff --git a/tests/auto/installer/deleteoperation/data/repository/Updates.xml b/tests/auto/installer/deleteoperation/data/repository/Updates.xml new file mode 100644 index 000000000..77b5a9956 --- /dev/null +++ b/tests/auto/installer/deleteoperation/data/repository/Updates.xml @@ -0,0 +1,13 @@ + + {AnyApplication} + 1.0.0 + + A + A + Example component A + 1.0.2-1 + 2015-01-01 + true + + + diff --git a/tests/auto/installer/deleteoperation/deleteoperation.pro b/tests/auto/installer/deleteoperation/deleteoperation.pro new file mode 100644 index 000000000..8dca91226 --- /dev/null +++ b/tests/auto/installer/deleteoperation/deleteoperation.pro @@ -0,0 +1,10 @@ +include(../../qttest.pri) + +QT -= gui +QT += testlib + +SOURCES += tst_deleteoperation.cpp + +RESOURCES += \ + settings.qrc \ + ..\shared\config.qrc diff --git a/tests/auto/installer/deleteoperation/settings.qrc b/tests/auto/installer/deleteoperation/settings.qrc new file mode 100644 index 000000000..d030220ab --- /dev/null +++ b/tests/auto/installer/deleteoperation/settings.qrc @@ -0,0 +1,6 @@ + + + data/repository/Updates.xml + data/repository/A/1.0.2-1meta.7z + + diff --git a/tests/auto/installer/deleteoperation/tst_deleteoperation.cpp b/tests/auto/installer/deleteoperation/tst_deleteoperation.cpp new file mode 100644 index 000000000..93db333fe --- /dev/null +++ b/tests/auto/installer/deleteoperation/tst_deleteoperation.cpp @@ -0,0 +1,144 @@ +/************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $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$ +** +**************************************************************************/ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace KDUpdater; +using namespace QInstaller; + +class tst_deleteoperation : public QObject +{ + Q_OBJECT + +private slots: + void testMissingArguments() + { + DeleteOperation op; + + QVERIFY(op.testOperation()); + QVERIFY(!op.performOperation()); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::InvalidArguments); + QCOMPARE(op.errorString(), QString("Invalid arguments in Delete: " + "0 arguments given, exactly 1 arguments expected.")); + + op.setArguments(QStringList() << ""); + QTest::ignoreMessage(QtWarningMsg, "QFile::copy: Empty or null file name"); + op.backup(); + + QCOMPARE(UpdateOperation::Error(op.error()), UpdateOperation::UserDefinedError); + QCOMPARE(op.errorString(), QString("Cannot create backup of file \"\": Unknown error")); + + // Returns true with empty file argument but does not do anything + QVERIFY(op.performOperation()); + } + + void testDeleteRestore_data() + { + QTest::addColumn("path"); + QTest::newRow("relative") << "test"; + QTest::newRow("absolute") << qApp->applicationDirPath() + QDir::toNativeSeparators("/test"); + } + + void testDeleteRestore() + { + QFETCH(QString, path); + + QByteArray testString("Generated by QTest\n"); + QFile testFile(path); + QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Text)); + QTextStream out(&testFile); + out << testString; + testFile.close(); + + QVERIFY(QFileInfo(path).exists()); + QByteArray testFileHash = QInstaller::calculateHash(path, QCryptographicHash::Sha1); + + DeleteOperation op; + op.setArguments(QStringList() << path); + + op.backup(); + QVERIFY(QFileInfo(op.value("backupOfExistingFile").toString()).exists()); + + QVERIFY2(op.performOperation(), op.errorString().toLatin1()); + QVERIFY(!QFileInfo(path).exists()); + + QVERIFY2(op.undoOperation(), op.errorString().toLatin1()); + QByteArray restoredFileHash = QInstaller::calculateHash(path, QCryptographicHash::Sha1); + QVERIFY(testFileHash == restoredFileHash); + + QVERIFY(QFile(path).remove()); + } + + void testPerformingFromCLI() + { + QInstaller::init(); //This will eat debug output + PackageManagerCore *core = new PackageManagerCore(BinaryContent::MagicInstallerMarker, QList ()); + core->setAllowedRunningProcesses(QStringList() << QCoreApplication::applicationFilePath()); + QSet repoList; + Repository repo = Repository::fromUserInput(":///data/repository"); + repoList.insert(repo); + core->settings().setDefaultRepositories(repoList); + + QString installDir = QInstaller::generateTemporaryFileName(); + QDir().mkpath(installDir); + + // Matches filename in component install script + QFile file(installDir + QDir::toNativeSeparators("/test")); + QVERIFY(file.open(QIODevice::ReadWrite)); + file.close(); + + core->setValue(scTargetDir, installDir); + core->installDefaultComponentsSilently(); + QVERIFY(!file.exists()); + + core->setPackageManager(); + core->commitSessionOperations(); + core->uninstallComponentsSilently(QStringList() << "A"); + QVERIFY(file.exists()); + + QDir dir(installDir); + QVERIFY(dir.removeRecursively()); + core->deleteLater(); + } +}; + +QTEST_MAIN(tst_deleteoperation) + +#include "tst_deleteoperation.moc" diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro index 9d271fe54..a05842922 100644 --- a/tests/auto/installer/installer.pro +++ b/tests/auto/installer/installer.pro @@ -28,7 +28,8 @@ SUBDIRS += \ cliinterface \ linereplaceoperation \ metadatajob \ - simplemovefileoperation + simplemovefileoperation \ + deleteoperation win32 { SUBDIRS += registerfiletypeoperation -- cgit v1.2.3