|
14 | 14 | #include "lockwatcher.h" |
15 | 15 | #include <syncengine.h> |
16 | 16 | #include <localdiscoverytracker.h> |
| 17 | +#include "discoveryphase.h" |
| 18 | +#include <QThreadPool> |
17 | 19 |
|
18 | 20 | using namespace OCC; |
19 | 21 |
|
@@ -130,6 +132,43 @@ private slots: |
130 | 132 | } |
131 | 133 |
|
132 | 134 | #ifdef Q_OS_WIN |
| 135 | + void testLockDetectionUsesRealFileSystemCheck() |
| 136 | + { |
| 137 | + // Regression guard for #10464: exercise the real FileSystem::isFileLocked path |
| 138 | + QTemporaryDir tmp; |
| 139 | + QVERIFY(tmp.isValid()); |
| 140 | + for (const auto &name : { QStringLiteral("locked.bin"), QStringLiteral("test.txt") }) { |
| 141 | + QFile tmpFile(tmp.filePath(name)); |
| 142 | + QVERIFY(tmpFile.open(QIODevice::WriteOnly)); |
| 143 | + tmpFile.write("x"); |
| 144 | + } |
| 145 | + QVERIFY(QDir(tmp.path()).mkdir(QStringLiteral("subdir"))); |
| 146 | + |
| 147 | + auto handle = makeHandle(tmp.filePath(QStringLiteral("locked.bin")), 0); |
| 148 | + QVERIFY(handle != INVALID_HANDLE_VALUE); |
| 149 | + |
| 150 | + const auto job = new DiscoverySingleLocalDirectoryJob({}, tmp.path(), nullptr, false); |
| 151 | + QSignalSpy finishedSpy(job, &DiscoverySingleLocalDirectoryJob::finished); |
| 152 | + QThreadPool::globalInstance()->start(job); |
| 153 | + QTRY_COMPARE_WITH_TIMEOUT(finishedSpy.count(), 1, 5000); |
| 154 | + |
| 155 | + CloseHandle(handle); |
| 156 | + |
| 157 | + const auto results = finishedSpy.takeFirst().at(0).value<QVector<OCC::LocalInfo>>(); |
| 158 | + QCOMPARE(results.size(), 3); |
| 159 | + for (const auto &info : results) { |
| 160 | + if (info.name == QStringLiteral("locked.bin")) { |
| 161 | + QVERIFY(info.isLocked); |
| 162 | + continue; |
| 163 | + } |
| 164 | + |
| 165 | + QVERIFY(!info.isLocked); |
| 166 | + if (info.name == QStringLiteral("subdir")) { |
| 167 | + QVERIFY(info.isDirectory); |
| 168 | + } |
| 169 | + } |
| 170 | + } |
| 171 | + |
133 | 172 | void testDirectoryLockChecks() |
134 | 173 | { |
135 | 174 | QTemporaryDir tmp; |
|
0 commit comments