summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2019-07-24 16:45:39 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2019-08-30 07:22:30 +0000
commitc410e4250266a04e7897ecd0c98c49f040f67205 (patch)
tree81a3ebf3ec4cab211d03fd107a33110c318b88bf /tests
parent8f7af86198935849c74c71add7c9ca081347fb85 (diff)
Refactor setting and checking of file permissions
Create methods to explicitly set default file permissions on Unix platforms, use these on installer created files and installation target directory. Add unit test for introduced functions. Remove method introduced in 46aecc23b2983c807ff2232ae9cb9651b4d2fdc2 as the same effect is achieved more efficiently by ensuring target directory will be written with explicit permissions on initial installation. Unlike the removed method, this will also not break if an installed component contains owner non-writable directories. Further simplify PackageManagerCore::directoryWritable() introduced in 89f772f819178ee2502768c3d259d22ecb910fbe. Remove orphan unit test for removed PackageManagerCore::subdirectoriesWritable(). This does not change permissions of files and directories extracted for installed components. Task-number: QTIFW-1412 Change-Id: I59698c78aceef874b1f79482bff5a618b9a1b536 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/installer/fileutils/fileutils.pro6
-rw-r--r--tests/auto/installer/fileutils/tst_fileutils.cpp107
-rw-r--r--tests/auto/installer/installer.pro1
-rw-r--r--tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp29
4 files changed, 114 insertions, 29 deletions
diff --git a/tests/auto/installer/fileutils/fileutils.pro b/tests/auto/installer/fileutils/fileutils.pro
new file mode 100644
index 000000000..eee7ec537
--- /dev/null
+++ b/tests/auto/installer/fileutils/fileutils.pro
@@ -0,0 +1,6 @@
+include(../../qttest.pri)
+
+QT -= gui
+QT += testlib
+
+SOURCES += tst_fileutils.cpp
diff --git a/tests/auto/installer/fileutils/tst_fileutils.cpp b/tests/auto/installer/fileutils/tst_fileutils.cpp
new file mode 100644
index 000000000..feb96d30c
--- /dev/null
+++ b/tests/auto/installer/fileutils/tst_fileutils.cpp
@@ -0,0 +1,107 @@
+/**************************************************************************
+**
+** Copyright (C) 2019 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 <qinstallerglobal.h>
+#include <fileutils.h>
+
+#include <QObject>
+#include <QTest>
+#include <QFile>
+#include <QDir>
+
+using namespace QInstaller;
+
+class tst_fileutils : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void testSetDefaultFilePermissions()
+ {
+#if defined(Q_OS_WIN)
+ QVERIFY(setDefaultFilePermissions(QInstaller::generateTemporaryFileName(),
+ DefaultFilePermissions::NonExecutable));
+
+ QVERIFY(setDefaultFilePermissions(QInstaller::generateTemporaryFileName(),
+ DefaultFilePermissions::Executable));
+#elif defined(Q_OS_UNIX)
+ // Need to include the "user" flags here as they will be returned
+ // by QFile::permissions(). Same as owner permissions of the file.
+ QFlags<QFileDevice::Permission> permissions(QFileDevice::ReadOwner
+ | QFileDevice::WriteOwner | QFileDevice::ReadUser | QFileDevice::WriteUser
+ | QFileDevice::ReadGroup | QFileDevice::ReadOther);
+
+ QFlags<QFileDevice::Permission> exePermissions(permissions | QFileDevice::ExeOwner
+ | QFileDevice::ExeUser | QFileDevice::ExeGroup | QFileDevice::ExeOther);
+
+ QString fileName = QInstaller::generateTemporaryFileName();
+ QFile testFile(fileName);
+
+ const QString message = "Target \"%1\" does not exists.";
+
+ // Test non-existing file
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message.arg(fileName)));
+ QVERIFY(!setDefaultFilePermissions(fileName, DefaultFilePermissions::NonExecutable));
+
+ QTest::ignoreMessage(QtWarningMsg, qPrintable(message.arg(testFile.fileName())));
+ QVERIFY(!setDefaultFilePermissions(&testFile, DefaultFilePermissions::NonExecutable));
+
+ QVERIFY(testFile.open(QIODevice::ReadWrite));
+ QVERIFY(testFile.exists());
+ testFile.close();
+
+ // Test with file name
+ QVERIFY(setDefaultFilePermissions(fileName, DefaultFilePermissions::NonExecutable));
+ QCOMPARE(QFile().permissions(fileName), permissions);
+
+ QVERIFY(setDefaultFilePermissions(fileName, DefaultFilePermissions::Executable));
+ QCOMPARE(QFile().permissions(fileName), exePermissions);
+
+ // Test with QFile object
+ QVERIFY(setDefaultFilePermissions(&testFile, DefaultFilePermissions::NonExecutable));
+ QCOMPARE(QFile().permissions(fileName), permissions);
+
+ QVERIFY(setDefaultFilePermissions(&testFile, DefaultFilePermissions::Executable));
+ QCOMPARE(QFile().permissions(fileName), exePermissions);
+
+ // Test with directory path
+ QString testDir = QDir().tempPath() + QLatin1String("/testDir");
+ QVERIFY(QDir().mkdir(testDir));
+
+ QVERIFY(setDefaultFilePermissions(testDir, DefaultFilePermissions::Executable));
+ QCOMPARE(QFile().permissions(testDir), exePermissions);
+
+ QVERIFY(QDir().rmdir(testDir));
+ QVERIFY(testFile.remove());
+#endif
+ }
+};
+
+QTEST_MAIN(tst_fileutils)
+
+#include "tst_fileutils.moc"
diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro
index db94a23cb..6db98d9e9 100644
--- a/tests/auto/installer/installer.pro
+++ b/tests/auto/installer/installer.pro
@@ -10,6 +10,7 @@ SUBDIRS += \
messageboxhandler \
extractarchiveoperationtest \
lib7zfacade \
+ fileutils \
unicodeexecutable \
scriptengine \
consumeoutputoperationtest \
diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
index 67fa7e2c5..cf5a53b8b 100644
--- a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
+++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp
@@ -284,35 +284,6 @@ private slots:
#endif
QVERIFY(QDir().rmdir(testDirectory));
}
-
- void testSubdirectoriesWritable()
- {
- PackageManagerCore core;
-
- const QString testDirectory = QInstaller::generateTemporaryFileName();
- QVERIFY(QDir().mkpath(testDirectory));
- QVERIFY(QDir(testDirectory).exists());
-
- const QString testSubdirectory = testDirectory + "/" + QString::number(qrand() % 1000);
-
- QVERIFY(QDir().mkpath(testSubdirectory));
- QVERIFY(QDir(testSubdirectory).exists());
-
- // should be writable
- QVERIFY(core.subdirectoriesWritable(testDirectory));
-
-#if defined(Q_OS_LINUX) || defined(Q_OS_MACOS)
- QFile dirDevice(testSubdirectory);
- dirDevice.setPermissions(QFileDevice::ReadOwner | QFileDevice::ExeOwner);
-
- // should not be writable
- QVERIFY(!core.subdirectoriesWritable(testDirectory));
-
- dirDevice.setPermissions(QFileDevice::ReadOwner | QFileDevice::WriteOwner | QFileDevice::ExeOwner);
-#endif
- QVERIFY(QDir().rmdir(testSubdirectory));
- QVERIFY(QDir().rmdir(testDirectory));
- }
};