diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-04-08 08:22:05 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-04-08 15:19:53 +0300 |
commit | 83d0f24293b3ea1680cc4e6f60eecfed06c8548b (patch) | |
tree | 6a6e3828aae2204ddf98817bb2d08f21ad851d82 /tests/auto/installer/environmentvariableoperation | |
parent | 3d402f1c16c8ad5d97f5e5eb03ebb0e000d74e1b (diff) |
Add unit tests for environmentvariable operation
Task-number: QTIFW-1719
Change-Id: I91f91e8704ed409a76302154d013e09afb767707
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'tests/auto/installer/environmentvariableoperation')
5 files changed, 214 insertions, 0 deletions
diff --git a/tests/auto/installer/environmentvariableoperation/data/repository/A/1.0.2-1meta.7z b/tests/auto/installer/environmentvariableoperation/data/repository/A/1.0.2-1meta.7z Binary files differnew file mode 100644 index 000000000..26b9ed692 --- /dev/null +++ b/tests/auto/installer/environmentvariableoperation/data/repository/A/1.0.2-1meta.7z diff --git a/tests/auto/installer/environmentvariableoperation/data/repository/Updates.xml b/tests/auto/installer/environmentvariableoperation/data/repository/Updates.xml new file mode 100644 index 000000000..6b1856d51 --- /dev/null +++ b/tests/auto/installer/environmentvariableoperation/data/repository/Updates.xml @@ -0,0 +1,14 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>false</Checksum> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>1.0.2-1</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <Default>true</Default> + <Script>script.qs</Script> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/environmentvariableoperation/environmentvariableoperation.pro b/tests/auto/installer/environmentvariableoperation/environmentvariableoperation.pro new file mode 100644 index 000000000..2d09bc9da --- /dev/null +++ b/tests/auto/installer/environmentvariableoperation/environmentvariableoperation.pro @@ -0,0 +1,11 @@ +include(../../qttest.pri) + +QT -= gui +QT += testlib + +SOURCES = tst_environmentvariableoperation.cpp + +RESOURCES += \ + settings.qrc \ + ..\shared\config.qrc + diff --git a/tests/auto/installer/environmentvariableoperation/settings.qrc b/tests/auto/installer/environmentvariableoperation/settings.qrc new file mode 100644 index 000000000..d030220ab --- /dev/null +++ b/tests/auto/installer/environmentvariableoperation/settings.qrc @@ -0,0 +1,6 @@ +<RCC> + <qresource prefix="/"> + <file>data/repository/Updates.xml</file> + <file>data/repository/A/1.0.2-1meta.7z</file> + </qresource> +</RCC> diff --git a/tests/auto/installer/environmentvariableoperation/tst_environmentvariableoperation.cpp b/tests/auto/installer/environmentvariableoperation/tst_environmentvariableoperation.cpp new file mode 100644 index 000000000..32cc77043 --- /dev/null +++ b/tests/auto/installer/environmentvariableoperation/tst_environmentvariableoperation.cpp @@ -0,0 +1,183 @@ +/************************************************************************** +** +** 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 <environmentvariablesoperation.h> +#include <init.h> +#include <environment.h> +#include <packagemanagercore.h> +#include <fileutils.h> +#include <settings.h> +#include <binarycontent.h> + +#include <QSettings> +#include <QTest> + +using namespace QInstaller; +using namespace KDUpdater; + +class tst_environmentvariableoperation : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase() + { + m_key = "IFW_TestKey"; + m_value = "IFW_TestValue"; + m_oldValue = "IFW_TestOldValue"; + m_settings = new QSettings("HKEY_CURRENT_USER\\Environment", QSettings::NativeFormat); + } + + void cleanup() + { + m_settings->remove(m_key); + m_settings->remove("IFW_UNIT_TEST_PERSISTENT"); //Added from script + } + + void testPersistentNonSystem() + { + #ifndef Q_OS_WIN + QSKIP("This operation only works on Windows"); + #endif + EnvironmentVariableOperation op(nullptr); + op.setArguments( QStringList() << m_key + << m_value + << QLatin1String("true") + << QLatin1String("false")); + const bool ok = op.performOperation(); + + QVERIFY2(ok, qPrintable(op.errorString())); + + QCOMPARE(m_value, m_settings->value(m_key).toString()); + + QVERIFY(op.undoOperation()); + QVERIFY(m_settings->value(m_key).toString().isEmpty()); + } + + void testNonPersistentNonSystem() + { + EnvironmentVariableOperation op(nullptr); + op.setArguments( QStringList() << m_key + << m_value + << QLatin1String("false") + << QLatin1String("false")); + const bool ok = op.performOperation(); + + QVERIFY2(ok, qPrintable(op.errorString())); + + //Make sure it is not written to env variable + QString comp = QString::fromLocal8Bit(qgetenv(qPrintable(m_key))); + QVERIFY(comp.isEmpty()); + + QCOMPARE(m_value, Environment::instance().value(m_key)); + } + + void testPersistentNonSystemOldValue() + { + #ifndef Q_OS_WIN + QSKIP("This operation only works on Windows"); + #endif + m_settings->setValue(m_key, m_oldValue); + + EnvironmentVariableOperation op(nullptr); + op.setArguments( QStringList() << m_key + << m_value + << QLatin1String("true") + << QLatin1String("false")); + const bool ok = op.performOperation(); + + QVERIFY2(ok, qPrintable(op.errorString())); + + QCOMPARE(m_value, m_settings->value(m_key).toString()); + + QVERIFY(op.undoOperation()); + QCOMPARE(m_settings->value(m_key).toString(), m_oldValue); + m_settings->remove(m_key); + } + + void testNonPersistentNonSystemOldValue() + { + m_settings->setValue(m_key, m_oldValue); + Environment::instance().setTemporaryValue(m_key, m_oldValue); + EnvironmentVariableOperation op(nullptr); + op.setArguments( QStringList() << m_key + << m_value + << QLatin1String("false") + << QLatin1String("false")); + const bool ok = op.performOperation(); + + QVERIFY2(ok, qPrintable(op.errorString())); + + QVERIFY(op.undoOperation()); + QCOMPARE(m_oldValue, Environment::instance().value(m_key)); + } + + void testPerformingFromCLI() + { + QInstaller::init(); //This will eat debug output + PackageManagerCore *core = new PackageManagerCore(BinaryContent::MagicInstallerMarker, QList<OperationBlob> ()); + core->setAllowedRunningProcesses(QStringList() << QCoreApplication::applicationFilePath()); + QSet<Repository> repoList; + Repository repo = Repository::fromUserInput(":///data/repository"); + repoList.insert(repo); + core->settings().setDefaultRepositories(repoList); + + QString installDir = QInstaller::generateTemporaryFileName(); + QDir().mkpath(installDir); + core->setValue(scTargetDir, installDir); + core->installDefaultComponentsSilently(); + + QVERIFY(m_settings->value("IFW_UNIT_TEST_LOCAL").toString().isEmpty()); + + // Persistent is in settings in Windows platform only, otherwise it is written to local env. +#ifdef Q_OS_WIN + QCOMPARE(QLatin1String("IFW_UNIT_TEST_PERSISTENT_VALUE"), m_settings->value("IFW_UNIT_TEST_PERSISTENT").toString()); +#else + QCOMPARE(QLatin1String("IFW_UNIT_TEST_PERSISTENT_VALUE"), Environment::instance().value("IFW_UNIT_TEST_PERSISTENT")); +#endif + QCOMPARE(QLatin1String("IFW_UNIT_TEST_VALUE"), Environment::instance().value("IFW_UNIT_TEST_LOCAL")); + + core->commitSessionOperations(); + core->setPackageManager(); + core->uninstallComponentsSilently(QStringList() << "A"); + QVERIFY(m_settings->value("IFW_UNIT_TEST_PERSISTENT").toString().isEmpty()); + QVERIFY(Environment::instance().value("IFW_UNIT_TEST_LOCAL").isEmpty()); + core->deleteLater(); + } + +private: + QSettings *m_settings; + QString m_key; + QString m_value; + QString m_oldValue; +}; + +QTEST_MAIN(tst_environmentvariableoperation) + +#include "tst_environmentvariableoperation.moc" + |