diff options
Diffstat (limited to 'tests/auto/corelib/io/qlockfile')
8 files changed, 60 insertions, 109 deletions
diff --git a/tests/auto/corelib/io/qlockfile/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/CMakeLists.txt index baab320b8c..1dda272d52 100644 --- a/tests/auto/corelib/io/qlockfile/CMakeLists.txt +++ b/tests/auto/corelib/io/qlockfile/CMakeLists.txt @@ -1,13 +1,20 @@ -# Generated from qlockfile.pro. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause ##################################################################### ## tst_qlockfile Test: ##################################################################### -qt_add_test(tst_qlockfile +if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT) + cmake_minimum_required(VERSION 3.16) + project(tst_qlockfile LANGUAGES CXX) + find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST) +endif() + +qt_internal_add_test(tst_qlockfile SOURCES tst_qlockfile.cpp - PUBLIC_LIBRARIES + LIBRARIES Qt::Concurrent Qt::CorePrivate ) @@ -15,8 +22,12 @@ qt_add_test(tst_qlockfile ## Scopes: ##################################################################### -qt_extend_target(tst_qlockfile CONDITION WIN32 - PUBLIC_LIBRARIES +qt_internal_extend_target(tst_qlockfile CONDITION WIN32 + LIBRARIES advapi32 ) add_subdirectory(qlockfiletesthelper) + +if(QT_FEATURE_process AND NOT ANDROID) + add_dependencies(tst_qlockfile qlockfile_test_helper) +endif() diff --git a/tests/auto/corelib/io/qlockfile/qlockfile.pro b/tests/auto/corelib/io/qlockfile/qlockfile.pro deleted file mode 100644 index 91f104305c..0000000000 --- a/tests/auto/corelib/io/qlockfile/qlockfile.pro +++ /dev/null @@ -1,3 +0,0 @@ -TEMPLATE = subdirs - -SUBDIRS += tst_qlockfile.pro qlockfiletesthelper/qlockfile_test_helper.pro diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/.prev_CMakeLists.txt b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/.prev_CMakeLists.txt deleted file mode 100644 index e0f500f8ae..0000000000 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/.prev_CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Generated from qlockfile_test_helper.pro. - -##################################################################### -## qlockfile_test_helper Binary: -##################################################################### - -qt_add_executable(qlockfile_test_helper - OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" - SOURCES - qlockfile_test_helper.cpp -) diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt index 957d60ca1b..c8bde9d606 100644 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt +++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt @@ -1,11 +1,12 @@ -# Generated from qlockfile_test_helper.pro. +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause ##################################################################### ## qlockfile_test_helper Binary: ##################################################################### -qt_add_test_helper(qlockfile_test_helper # special case - OVERRIDE_OUTPUT_DIRECTORY # special case +qt_internal_add_test_helper(qlockfile_test_helper + OVERRIDE_OUTPUT_DIRECTORY OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/" SOURCES qlockfile_test_helper.cpp diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp index e086bf1904..b990209f32 100644 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp +++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp @@ -1,30 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $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$ -** -****************************************************************************/ +// Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QDebug> #include <QCoreApplication> diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro deleted file mode 100644 index 97135d279e..0000000000 --- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.pro +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = qlockfile_test_helper -SOURCES += qlockfile_test_helper.cpp - -CONFIG += cmdline -QT = core -DESTDIR = ./ diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index 42bdf3eabf..b7056e20c9 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -1,46 +1,34 @@ -/**************************************************************************** -** -** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the test suite of the Qt Toolkit. -** -** $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 <QtTest/QtTest> +// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2013 David Faure <faure+bluesystems@kde.org> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses + +#include <QTest> #include <QtConcurrentRun> +#if QT_CONFIG(process) +#include <QProcess> +#endif +#include <QSemaphore> +#include <QFutureSynchronizer> + #include <qlockfile.h> #include <qtemporarydir.h> #include <qsysinfo.h> #if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) #include <unistd.h> + +#include <sys/stat.h> // utimensat #include <sys/time.h> #elif defined(Q_OS_WIN) # include <qt_windows.h> +# include <QOperatingSystemVersion> #endif #include <private/qlockfile_p.h> // for getLockFileHandle() +using namespace std::chrono_literals; + class tst_QLockFile : public QObject { Q_OBJECT @@ -78,7 +66,7 @@ public: void tst_QLockFile::initTestCase() { -#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) +#ifdef Q_OS_ANDROID QSKIP("This test requires deploying and running external console applications"); #elif !QT_CONFIG(process) QSKIP("This test requires QProcess support"); @@ -96,6 +84,7 @@ void tst_QLockFile::lockUnlock() const QString fileName = dir.path() + "/lock1"; QVERIFY(!QFile(fileName).exists()); QLockFile lockFile(fileName); + QCOMPARE(lockFile.fileName(), fileName); QVERIFY(lockFile.lock()); QVERIFY(lockFile.isLocked()); QCOMPARE(int(lockFile.error()), int(QLockFile::NoError)); @@ -110,7 +99,7 @@ void tst_QLockFile::lockUnlock() QVERIFY(lockFile.getLockInfo(&pid, &hostname, &appname)); QCOMPARE(pid, QCoreApplication::applicationPid()); QCOMPARE(appname, qAppName()); - QVERIFY(!lockFile.tryLock(200)); + QVERIFY(!lockFile.tryLock(200ms)); QCOMPARE(int(lockFile.error()), int(QLockFile::LockFailedError)); // Unlock deletes the lock file @@ -248,7 +237,7 @@ void tst_QLockFile::waitForLock() if (!releaseEarly) // only let the thread release the lock now semMainThreadDone.release(); - QVERIFY(ret); // waits for the thread to finish + QVERIFY(ret.result()); // waits for the thread to finish } void tst_QLockFile::staleLockFromCrashedProcess_data() @@ -328,7 +317,7 @@ void tst_QLockFile::staleShortLockFromBusyProcess() QString hostname, appname; QTRY_VERIFY(secondLock.getLockInfo(&pid, &hostname, &appname)); #ifdef Q_OS_UNIX - QCOMPARE(pid, proc.pid()); + QCOMPARE(pid, proc.processId()); #endif secondLock.setStaleLockTime(100); @@ -355,8 +344,8 @@ void tst_QLockFile::staleLongLockFromBusyProcess() QTRY_VERIFY(QFile::exists(fileName)); QLockFile secondLock(fileName); - secondLock.setStaleLockTime(0); - QVERIFY(!secondLock.tryLock(100)); // never stale + secondLock.setStaleLockTime(0ms); + QVERIFY(!secondLock.tryLock(100ms)); // never stale QCOMPARE(int(secondLock.error()), int(QLockFile::LockFailedError)); qint64 pid; QTRY_VERIFY(secondLock.getLockInfo(&pid, NULL, NULL)); @@ -524,15 +513,15 @@ void tst_QLockFile::corruptedLockFile() } QLockFile secondLock(fileName); - secondLock.setStaleLockTime(100); - QVERIFY(secondLock.tryLock(10000)); + secondLock.setStaleLockTime(100ms); + QVERIFY(secondLock.tryLock(10s)); QCOMPARE(int(secondLock.error()), int(QLockFile::NoError)); } void tst_QLockFile::corruptedLockFileInTheFuture() { -#if !defined(Q_OS_UNIX) - QSKIP("This tests needs utimes"); +#if !defined(Q_OS_UNIX) || defined(Q_OS_VXWORKS) + QSKIP("This test needs utimensat"); #else // This test is the same as the previous one, but the corruption was so there is a corrupted // .rmlock whose timestamp is in the future @@ -544,11 +533,12 @@ void tst_QLockFile::corruptedLockFileInTheFuture() QVERIFY(file.open(QFile::WriteOnly)); } - struct timeval times[2]; - gettimeofday(times, 0); - times[1].tv_sec = (times[0].tv_sec += 600); - times[1].tv_usec = times[0].tv_usec; - utimes(fileName.toLocal8Bit(), times); + struct timespec times[2]; + clock_gettime(CLOCK_REALTIME, times); + times[0].tv_sec += 600; + times[1].tv_sec = times[0].tv_sec; + times[1].tv_nsec = times[0].tv_nsec; + utimensat(0 /* ignored */, fileName.toLocal8Bit(), times, 0); QTest::ignoreMessage(QtInfoMsg, "QLockFile: Lock file '" + fileName.toUtf8() + "' has a modification time in the future"); corruptedLockFile(); @@ -577,7 +567,7 @@ void tst_QLockFile::hostnameChange() { // we should fail to lock QLockFile lock2(lockFile); - QVERIFY(!lock2.tryLock(1000)); + QVERIFY(!lock2.tryLock(1s)); } } @@ -604,7 +594,7 @@ void tst_QLockFile::differentMachines() { // we should fail to lock QLockFile lock2(lockFile); - QVERIFY(!lock2.tryLock(1000)); + QVERIFY(!lock2.tryLock(1s)); } } @@ -633,7 +623,7 @@ void tst_QLockFile::reboot() f.close(); // we should succeed in locking - QVERIFY(lock1.tryLock(0)); + QVERIFY(lock1.tryLock(0ms)); } bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid) diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro deleted file mode 100644 index 8ac76b0317..0000000000 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += testcase -TARGET = tst_qlockfile -SOURCES += tst_qlockfile.cpp - -QT = core-private testlib concurrent -win32: QMAKE_USE += advapi32 |