summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@digia.com>2013-11-06 13:05:16 +0100
committerKarsten Heimrich <karsten.heimrich@digia.com>2013-11-06 13:51:55 +0100
commitfd26174d2cf0d8b0887007075a6be2933a1f595a (patch)
tree67ca667d01adabe17991831c132e4db6c5d28ff4 /tests
parent113c0e0450b09816aaa43e26f9646e594533b33c (diff)
Always only delete the install directory if it's empty.
We have to reset the force removal flag inside the operation to not delete any other files/ folders than our own created. Once the flag is set to false, the operation will fail on any file/ folder still left in the install path. Note: the config.rcc is a dummy file to calm down settings class parser warnings. Change-Id: I66efb5836e310bdb1b64e5647ee76c058cea2a7e Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/installer/installer.pro3
-rw-r--r--tests/auto/installer/packagemanagercore/installer-config/config.xml5
-rw-r--r--tests/auto/installer/packagemanagercore/packagemanagercore.pro10
-rw-r--r--tests/auto/installer/packagemanagercore/settings.qrc5
-rw-r--r--tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp153
5 files changed, 175 insertions, 1 deletions
diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro
index 414c952d7..c405cf087 100644
--- a/tests/auto/installer/installer.pro
+++ b/tests/auto/installer/installer.pro
@@ -13,5 +13,6 @@ SUBDIRS += \
mkdiroperationtest \
copyoperationtest \
solver \
- binaryformat
+ binaryformat \
+ packagemanagercore
diff --git a/tests/auto/installer/packagemanagercore/installer-config/config.xml b/tests/auto/installer/packagemanagercore/installer-config/config.xml
new file mode 100644
index 000000000..adc24631b
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/installer-config/config.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Installer>
+ <Name>test</Name>
+ <Version>1.0.0</Version>
+</Installer>
diff --git a/tests/auto/installer/packagemanagercore/packagemanagercore.pro b/tests/auto/installer/packagemanagercore/packagemanagercore.pro
new file mode 100644
index 000000000..c78393540
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/packagemanagercore.pro
@@ -0,0 +1,10 @@
+include(../../qttest.pri)
+
+QT += script
+lessThan(QT_MAJOR_VERSION, 5) {
+ QT -= gui
+}
+SOURCES += tst_packagemanagercore.cpp
+
+RESOURCES += \
+ settings.qrc
diff --git a/tests/auto/installer/packagemanagercore/settings.qrc b/tests/auto/installer/packagemanagercore/settings.qrc
new file mode 100644
index 000000000..b25a589a3
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/settings.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/metadata">
+ <file>installer-config/config.xml</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
new file mode 100644
index 000000000..8a7af4a0b
--- /dev/null
+++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
@@ -0,0 +1,153 @@
+/**************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt Installer Framework.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+**************************************************************************/
+
+#include <binaryformat.h>
+#include <component.h>
+#include <errors.h>
+#include <fileutils.h>
+#include <packagemanagercore.h>
+#include <progresscoordinator.h>
+
+#include <QDir>
+#include <QTemporaryFile>
+#include <QTest>
+
+using namespace QInstaller;
+
+class DummyComponent : public Component
+{
+public:
+ DummyComponent(PackageManagerCore *core)
+ : Component(core)
+ {
+ setCheckState(Qt::Checked);
+ }
+
+ void beginInstallation()
+ {
+ throw Error(tr("Force crash to test rollback!"));
+ }
+
+ ~DummyComponent()
+ {
+ }
+};
+
+class tst_PackageManagerCore : public QObject
+{
+ Q_OBJECT
+
+private:
+ void setIgnoreMessage(const QString &testDirectory)
+ {
+ const QString message = "\"\t- arguments: %1\" ";
+ QTest::ignoreMessage(QtDebugMsg, "\"backup operation: Mkdir\" ");
+ QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(testDirectory)));
+ QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(testDirectory)));
+ QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(testDirectory)));
+ QTest::ignoreMessage(QtDebugMsg, "\"perform operation: Mkdir\" ");
+ QTest::ignoreMessage(QtDebugMsg, "Install size: 1 components ");
+ QTest::ignoreMessage(QtDebugMsg, "create Error-Exception: \"Force crash to test rollback!\" ");
+ QTest::ignoreMessage(QtDebugMsg, "\"created critical message box installationError: 'Error"
+ "', Force crash to test rollback!\" ");
+ QTest::ignoreMessage(QtDebugMsg, "ROLLING BACK operations= 1 ");
+ QTest::ignoreMessage(QtDebugMsg, "\"undo operation: Mkdir\" ");
+ QTest::ignoreMessage(QtDebugMsg, "Done ");
+ QTest::ignoreMessage(QtDebugMsg, "Done ");
+ QTest::ignoreMessage(QtDebugMsg, "Done ");
+ }
+
+private slots:
+ void testRollBackInstallationKeepTarget()
+ {
+
+ const QString testDirectory = QInstaller::generateTemporaryFileName();
+ QVERIFY(QDir().mkpath(testDirectory));
+
+ setIgnoreMessage(testDirectory);
+
+ PackageManagerCore core(MagicInstallerMarker);
+ // cancel the installer in error case
+ core.autoRejectMessageBoxes();
+ core.appendRootComponent(new DummyComponent(&core));
+ core.setValue(QLatin1String("TargetDir"), testDirectory);
+ core.setValue(QLatin1String("RemoveTargetDir"), QLatin1String("true"));
+
+ QVERIFY(core.calculateComponentsToInstall());
+ {
+ QTemporaryFile dummy(testDirectory + QLatin1String("/dummy"));
+ dummy.open();
+
+ core.runInstaller();
+
+ QVERIFY(QDir(testDirectory).exists());
+ QVERIFY(QFileInfo(dummy.fileName()).exists());
+ }
+ QDir().rmdir(testDirectory);
+ ProgressCoordinator::instance()->reset();
+ }
+
+ void testRollBackInstallationRemoveTarget()
+ {
+ const QString testDirectory = QInstaller::generateTemporaryFileName();
+ QVERIFY(QDir().mkpath(testDirectory));
+
+ setIgnoreMessage(testDirectory);
+
+ PackageManagerCore core(MagicInstallerMarker);
+ // cancel the installer in error case
+ core.autoRejectMessageBoxes();
+ core.appendRootComponent(new DummyComponent(&core));
+ core.setValue(QLatin1String("TargetDir"), testDirectory);
+ core.setValue(QLatin1String("RemoveTargetDir"), QLatin1String("true"));
+
+ QVERIFY(core.calculateComponentsToInstall());
+
+ core.runInstaller();
+ QVERIFY(!QDir(testDirectory).exists());
+ ProgressCoordinator::instance()->reset();
+ }
+};
+
+
+QTEST_MAIN(tst_PackageManagerCore)
+
+#include "tst_packagemanagercore.moc"