Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/syncenginetestutils.h73
-rw-r--r--test/testsyncmove.cpp17
2 files changed, 88 insertions, 2 deletions
diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h
index bf6f67f96..00f75134e 100644
--- a/test/syncenginetestutils.h
+++ b/test/syncenginetestutils.h
@@ -12,6 +12,7 @@
#include "filesystem.h"
#include "syncengine.h"
#include "common/syncjournaldb.h"
+#include "common/syncjournalfilerecord.h"
#include "common/vfs.h"
#include "csync_exclude.h"
#include <cstring>
@@ -254,17 +255,19 @@ public:
FileInfo *find(PathComponents pathComponents, const bool invalidateEtags = false) {
if (pathComponents.isEmpty()) {
- if (invalidateEtags)
+ if (invalidateEtags) {
etag = generateEtag();
+ }
return this;
}
QString childName = pathComponents.pathRoot();
auto it = children.find(childName);
if (it != children.end()) {
auto file = it->find(std::move(pathComponents).subComponents(), invalidateEtags);
- if (file && invalidateEtags)
+ if (file && invalidateEtags) {
// Update parents on the way back
etag = file->etag;
+ }
return file;
}
return 0;
@@ -1191,6 +1194,7 @@ public:
FileInfo currentRemoteState() { return _fakeQnam->currentRemoteState(); }
FileInfo &uploadState() { return _fakeQnam->uploadState(); }
+ FileInfo dbState() const;
struct ErrorList {
FakeQNAM *_qnam;
@@ -1286,6 +1290,42 @@ private:
}
};
+static FileInfo &findOrCreateDirs(FileInfo &base, PathComponents components)
+{
+ if (components.isEmpty())
+ return base;
+ auto childName = components.pathRoot();
+ auto it = base.children.find(childName);
+ if (it != base.children.end()) {
+ return findOrCreateDirs(*it, components.subComponents());
+ }
+ auto &newDir = base.children[childName] = FileInfo{childName};
+ newDir.parentPath = base.path();
+ return findOrCreateDirs(newDir, components.subComponents());
+}
+
+inline FileInfo FakeFolder::dbState() const
+{
+ FileInfo result;
+ _journalDb->getFilesBelowPath("", [&](const OCC::SyncJournalFileRecord &record) {
+ auto components = PathComponents(QString::fromUtf8(record._path));
+ auto &parentDir = findOrCreateDirs(result, components.parentDirComponents());
+ auto name = components.fileName();
+ auto &item = parentDir.children[name];
+ item.name = name;
+ item.parentPath = parentDir.path();
+ item.size = record._fileSize;
+ item.isDir = record._type == ItemTypeDirectory;
+ item.permissions = record._remotePerm;
+ item.etag = record._etag;
+ item.lastModified = OCC::Utility::qDateTimeFromTime_t(record._modtime);
+ item.fileId = record._fileId;
+ item.checksums = record._checksumHeader;
+ // item.contentChar can't be set from the db
+ });
+ return result;
+}
+
/* Return the FileInfo for a conflict file for the specified relative filename */
inline const FileInfo *findConflict(FileInfo &dir, const QString &filename)
{
@@ -1328,3 +1368,32 @@ inline char *toString(const FileInfo &fi)
addFiles(files, fi);
return QTest::toString(QString("FileInfo with %1 files(%2)").arg(files.size()).arg(files.join(", ")));
}
+
+inline void addFilesDbData(QStringList &dest, const FileInfo &fi)
+{
+ // could include etag, permissions etc, but would need extra work
+ if (fi.isDir) {
+ dest += QString("%1 - %2 %3 %4").arg(
+ fi.name,
+ fi.isDir ? "dir" : "file",
+ QString::number(fi.lastModified.toSecsSinceEpoch()),
+ fi.fileId);
+ foreach (const FileInfo &fi, fi.children)
+ addFilesDbData(dest, fi);
+ } else {
+ dest += QString("%1 - %2 %3 %4 %5").arg(
+ fi.name,
+ fi.isDir ? "dir" : "file",
+ QString::number(fi.size),
+ QString::number(fi.lastModified.toSecsSinceEpoch()),
+ fi.fileId);
+ }
+}
+
+inline char *printDbData(const FileInfo &fi)
+{
+ QStringList files;
+ foreach (const FileInfo &fi, fi.children)
+ addFilesDbData(files, fi);
+ return QTest::toString(QString("FileInfo with %1 files(%2)").arg(files.size()).arg(files.join(", ")));
+}
diff --git a/test/testsyncmove.cpp b/test/testsyncmove.cpp
index ad7aea048..a18b7c562 100644
--- a/test/testsyncmove.cpp
+++ b/test/testsyncmove.cpp
@@ -197,6 +197,7 @@ private slots:
fakeFolder.localModifier().rename("A/a1", "A/a1m");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
QCOMPARE(nPUT, 0);
// Move-and-change, causing a upload and delete
@@ -204,6 +205,7 @@ private slots:
fakeFolder.localModifier().appendByte("A/a2m");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
QCOMPARE(nPUT, 1);
QCOMPARE(nDELETE, 1);
@@ -212,6 +214,7 @@ private slots:
fakeFolder.localModifier().setContents("B/b1m", 'C');
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
QCOMPARE(nPUT, 2);
QCOMPARE(nDELETE, 2);
@@ -222,6 +225,7 @@ private slots:
fakeFolder.localModifier().setModTime("B/b2m", mtime);
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
QCOMPARE(nPUT, 3);
QCOMPARE(nDELETE, 3);
@@ -241,6 +245,7 @@ private slots:
fakeFolder.localModifier().insert("C/c3");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
QCOMPARE(nPUT, 4);
QCOMPARE(nDELETE, 4);
@@ -253,6 +258,7 @@ private slots:
QCOMPARE(nPUT, 5);
QCOMPARE(nDELETE, 5);
QCOMPARE(fakeFolder.currentLocalState(), remoteInfo);
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(remoteInfo));
}
void testDuplicateFileId_data()
@@ -360,6 +366,7 @@ private slots:
remote.setContents("B/b2m", 'A');
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 1);
QCOMPARE(counter.nPUT, 1);
QCOMPARE(counter.nMOVE, 0);
@@ -375,6 +382,7 @@ private slots:
local.setContents("B/b1m", 'B');
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 2);
QCOMPARE(counter.nPUT, 2);
QCOMPARE(counter.nMOVE, 0);
@@ -402,6 +410,7 @@ private slots:
QVERIFY(expectAndWipeConflict(local, fakeFolder.currentLocalState(), "A/a1mt"));
QVERIFY(expectAndWipeConflict(local, fakeFolder.currentLocalState(), "B/b1mt"));
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 3);
QCOMPARE(counter.nPUT, 1);
QCOMPARE(counter.nMOVE, 0);
@@ -424,6 +433,7 @@ private slots:
QVERIFY(expectAndWipeConflict(local, fakeFolder.currentLocalState(), "A/a1N"));
QVERIFY(expectAndWipeConflict(local, fakeFolder.currentLocalState(), "B/b1N"));
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 2);
QCOMPARE(counter.nPUT, 0);
QCOMPARE(counter.nMOVE, 0);
@@ -441,6 +451,7 @@ private slots:
QVERIFY(fakeFolder.syncOnce());
// end up with both files
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 1);
QCOMPARE(counter.nPUT, 1);
QCOMPARE(counter.nMOVE, 0);
@@ -453,6 +464,7 @@ private slots:
QVERIFY(fakeFolder.syncOnce());
// End up with both folders
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 3); // 3 files in C
QCOMPARE(counter.nPUT, 3);
QCOMPARE(counter.nMOVE, 0);
@@ -466,6 +478,7 @@ private slots:
QSignalSpy completeSpy(&fakeFolder.syncEngine(), SIGNAL(itemCompleted(const SyncFileItemPtr &)));
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 0);
QCOMPARE(counter.nPUT, 0);
QCOMPARE(counter.nMOVE, 1);
@@ -489,6 +502,7 @@ private slots:
QSignalSpy completeSpy(&fakeFolder.syncEngine(), SIGNAL(itemCompleted(const SyncFileItemPtr &)));
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 1);
QCOMPARE(counter.nPUT, 1);
QCOMPARE(counter.nMOVE, 1);
@@ -511,6 +525,7 @@ private slots:
remote.rename("B2", "B3");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 1);
QCOMPARE(counter.nPUT, 1);
QCOMPARE(counter.nMOVE, 1);
@@ -547,6 +562,7 @@ private slots:
local.remove(c);
}
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 2);
QCOMPARE(counter.nPUT, 0);
QCOMPARE(counter.nMOVE, 1);
@@ -562,6 +578,7 @@ private slots:
remote.rename("B4", "B5");
QVERIFY(fakeFolder.syncOnce());
QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+ QCOMPARE(printDbData(fakeFolder.dbState()), printDbData(fakeFolder.currentRemoteState()));
QCOMPARE(counter.nGET, 0);
QCOMPARE(counter.nPUT, 0);
QCOMPARE(counter.nMOVE, 2);