diff options
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r-- | tests/auto/corelib/io/qfile/tst_qfile.cpp | 6 | ||||
-rw-r--r-- | tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp | 10 | ||||
-rw-r--r-- | tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp | 107 | ||||
-rw-r--r-- | tests/auto/corelib/io/qlockfile/tst_qlockfile.pro | 2 | ||||
-rw-r--r-- | tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 6 | ||||
-rw-r--r-- | tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 2 | ||||
-rw-r--r-- | tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp | 6 |
7 files changed, 113 insertions, 26 deletions
diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index c173a87a41..06c3a9578f 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -68,8 +68,6 @@ QT_END_NAMESPACE #elif defined(Q_OS_FREEBSD) # include <sys/param.h> # include <sys/mount.h> -#elif defined(Q_OS_IRIX) -# include <sys/statfs.h> #elif defined(Q_OS_VXWORKS) # include <fcntl.h> #if defined(_WRS_KERNEL) @@ -1957,10 +1955,6 @@ void tst_QFile::largeFileSupport() if (::GetDiskFreeSpaceEx((wchar_t*)QDir::currentPath().utf16(), &free, 0, 0)) freespace = free.QuadPart; if (freespace != 0) { -#elif defined(Q_OS_IRIX) - struct statfs info; - if (statfs(QDir::currentPath().local8Bit(), &info, sizeof(struct statfs), 0) == 0) { - freespace = qlonglong(info.f_bfree * info.f_bsize); #else struct statfs info; if (statfs(const_cast<char *>(QDir::currentPath().toLocal8Bit().constData()), &info) == 0) { diff --git a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp index a0188f8ba9..a485788ec2 100644 --- a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp +++ b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp @@ -551,18 +551,18 @@ public: : QIODevice(), buf(byteArray), offset(0), ownbuf(false) { } virtual ~SequentialReadBuffer() { if (ownbuf) delete buf; } - bool isSequential() const Q_DECL_OVERRIDE { return true; } + bool isSequential() const override { return true; } const QByteArray &buffer() const { return *buf; } protected: - qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE + qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf->size() - offset)); memcpy(data, buf->constData() + offset, maxSize); offset += maxSize; return maxSize; } - qint64 writeData(const char * /* data */, qint64 /* maxSize */) Q_DECL_OVERRIDE + qint64 writeData(const char * /* data */, qint64 /* maxSize */) override { return -1; } @@ -598,13 +598,13 @@ public: RandomAccessBuffer(const char *data) : QIODevice(), buf(data) { } protected: - qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE + qint64 readData(char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); memcpy(data, buf.constData() + pos(), maxSize); return maxSize; } - qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE + qint64 writeData(const char *data, qint64 maxSize) override { maxSize = qMin(maxSize, qint64(buf.size() - pos())); memcpy(buf.data() + pos(), data, maxSize); diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index 835c4a2778..fc7ab70d41 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -39,6 +39,8 @@ # include <qt_windows.h> #endif +#include <private/qlockfile_p.h> // for getLockFileHandle() + class tst_QLockFile : public QObject { Q_OBJECT @@ -61,8 +63,12 @@ private slots: void noPermissionsWindows(); void corruptedLockFile(); void corruptedLockFileInTheFuture(); + void hostnameChange(); + void differentMachines(); + void reboot(); private: + static bool overwriteLineInLockFile(QFile &f, int line, const QString &newLine); static bool overwritePidInLockFile(const QString &filePath, qint64 pid); public: @@ -295,7 +301,7 @@ void tst_QLockFile::staleLockFromCrashedProcessReusedPid() QLockFile secondLock(fileName); qint64 pid = 0; - secondLock.getLockInfo(&pid, 0, 0); + QVERIFY(secondLock.getLockInfo(&pid, 0, 0)); QCOMPARE(pid, QCoreApplication::applicationPid()); secondLock.setStaleLockTime(0); QVERIFY(secondLock.tryLock()); @@ -549,22 +555,109 @@ void tst_QLockFile::corruptedLockFileInTheFuture() #endif } +void tst_QLockFile::hostnameChange() +{ + const QByteArray hostid = QSysInfo::machineUniqueId(); + if (hostid.isEmpty()) + QSKIP("Could not get a unique host ID on this machine"); + + QString lockFile = dir.path() + "/hostnameChangeLock"; + QLockFile lock1(lockFile); + QVERIFY(lock1.lock()); + + { + // now modify it + QFile f; + QVERIFY(f.open(QLockFilePrivate::getLockFileHandle(&lock1), + QIODevice::ReadWrite | QIODevice::Text, + QFile::DontCloseHandle)); + QVERIFY(overwriteLineInLockFile(f, 3, "this is not a hostname")); + } + + { + // we should fail to lock + QLockFile lock2(lockFile); + QVERIFY(!lock2.tryLock(1000)); + } +} + +void tst_QLockFile::differentMachines() +{ + const QByteArray hostid = QSysInfo::machineUniqueId(); + if (hostid.isEmpty()) + QSKIP("Could not get a unique host ID on this machine"); + + QString lockFile = dir.path() + "/differentMachinesLock"; + QLockFile lock1(lockFile); + QVERIFY(lock1.lock()); + + { + // now modify it + QFile f; + QVERIFY(f.open(QLockFilePrivate::getLockFileHandle(&lock1), + QIODevice::ReadWrite | QIODevice::Text, + QFile::DontCloseHandle)); + QVERIFY(overwriteLineInLockFile(f, 1, QT_STRINGIFY(INT_MAX))); + QVERIFY(overwriteLineInLockFile(f, 4, "this is not a UUID")); + } + + { + // we should fail to lock + QLockFile lock2(lockFile); + QVERIFY(!lock2.tryLock(1000)); + } +} + +void tst_QLockFile::reboot() +{ + const QByteArray bootid = QSysInfo::bootUniqueId(); + if (bootid.isEmpty()) + QSKIP("Could not get a unique boot ID on this machine"); + + // create a lock so we can get its contents + QString lockFile = dir.path() + "/rebootLock"; + QLockFile lock1(lockFile); + QVERIFY(lock1.lock()); + + QFile f(lockFile); + QVERIFY(f.open(QFile::ReadOnly | QFile::Text)); + auto lines = f.readAll().split('\n'); + f.close(); + + lock1.unlock(); + + // now recreate the file simulating a reboot + QVERIFY(f.open(QFile::WriteOnly | QFile::Text)); + lines[4] = "this is not a UUID"; + f.write(lines.join('\n')); + f.close(); + + // we should succeed in locking + QVERIFY(lock1.tryLock(0)); +} + bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid) { QFile f(filePath); - if (!f.open(QFile::ReadWrite)) { - qWarning("Cannot open %s.", qPrintable(filePath)); + if (!f.open(QFile::ReadWrite | QFile::Text)) { + qErrnoWarning("Cannot open %s", qPrintable(filePath)); return false; } + return overwriteLineInLockFile(f, 1, QString::number(pid)); +} + +bool tst_QLockFile::overwriteLineInLockFile(QFile &f, int line, const QString &newLine) +{ + f.seek(0); QByteArray buf = f.readAll(); - int i = buf.indexOf('\n'); - if (i < 0) { + QStringList lines = QString::fromUtf8(buf).split('\n'); + if (lines.size() < 3 && lines.size() < line - 1) { qWarning("Unexpected lockfile content."); return false; } - buf.remove(0, i); - buf.prepend(QByteArray::number(pid)); + lines[line - 1] = newLine; f.seek(0); + buf = lines.join('\n').toUtf8(); f.resize(buf.size()); return f.write(buf) == buf.size(); } diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro index 7a304fe779..da2660fd02 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro @@ -2,5 +2,5 @@ CONFIG += testcase TARGET = tst_qlockfile SOURCES += tst_qlockfile.cpp -QT = core testlib concurrent +QT = core-private testlib concurrent win32:!winrt:LIBS += -ladvapi32 diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index de6eb28503..6b4d292fe3 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -285,7 +285,7 @@ void tst_QProcess::startWithOldOpen() class OverriddenOpen : public QProcess { public: - virtual bool open(OpenMode mode) Q_DECL_OVERRIDE + virtual bool open(OpenMode mode) override { return QIODevice::open(mode); } }; @@ -708,7 +708,7 @@ void tst_QProcess::restartProcessDeadlock() QCOMPARE(process.write("", 1), qlonglong(1)); QVERIFY(process.waitForFinished(5000)); - QObject::disconnect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), Q_NULLPTR, Q_NULLPTR); + QObject::disconnect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), nullptr, nullptr); QCOMPARE(process.write("", 1), qlonglong(1)); QVERIFY(process.waitForFinished(5000)); @@ -847,7 +847,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives() QVERIFY(QTestEventLoop::instance().timeout()); QVERIFY(!proc.waitForReadyRead(250)); - QObject::disconnect(&proc, &QIODevice::readyRead, Q_NULLPTR, Q_NULLPTR); + QObject::disconnect(&proc, &QIODevice::readyRead, nullptr, nullptr); proc.write("B"); QVERIFY(proc.waitForReadyRead(5000)); diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 012ce5f2f5..db756ada39 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -207,7 +207,7 @@ void tst_QSettings::getSetCheck() QCOMPARE(true, obj1.fallbacksEnabled()); } -static QString settingsPath(const char *path = Q_NULLPTR) +static QString settingsPath(const char *path = nullptr) { // Temporary path for files that are specified explicitly in the constructor. #ifndef Q_OS_WINRT diff --git a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp index 0e423a56ca..df8746e518 100644 --- a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp @@ -609,14 +609,14 @@ void tst_QTextStream::readLinesFromBufferCRCR() class ErrorDevice : public QIODevice { protected: - qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE + qint64 readData(char *data, qint64 maxlen) override { Q_UNUSED(data) Q_UNUSED(maxlen) return -1; } - qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE + qint64 writeData(const char *data, qint64 len) override { Q_UNUSED(data) Q_UNUSED(len) @@ -634,7 +634,7 @@ void tst_QTextStream::readLineInto() ts.readLineInto(&line); QCOMPARE(line, QStringLiteral("1")); - ts.readLineInto(Q_NULLPTR, 0); // read the second line, but don't store it + ts.readLineInto(nullptr, 0); // read the second line, but don't store it ts.readLineInto(&line); QCOMPARE(line, QStringLiteral("3")); |