Unit tests. Test .lnk file with a real shortcut file. Test will hang if QFileInfo...
authoralex-z <blackslayer4@gmail.com>
Mon, 15 Apr 2024 04:44:06 +0000 (06:44 +0200)
committerMatthieu Gallien <matthieu.gallien@nextcloud.com>
Wed, 10 Jul 2024 08:29:35 +0000 (10:29 +0200)
Signed-off-by: alex-z <blackslayer4@gmail.com>
test/CMakeLists.txt
test/fakeshortcut.base64 [new file with mode: 0644]
test/testsynccfapi.cpp

index ca00593ac161b28ed578212e020529a095a43ba8..75eaaf7049e2619d6129bfc63d699c376db3acec 100644 (file)
@@ -101,6 +101,7 @@ configure_file(fakefiledrope2eefoldermetadata.json "${PROJECT_BINARY_DIR}/bin/fa
 configure_file(e2etestsfakecert.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecert.pem" COPYONLY)
 configure_file(e2etestsfakecertprivatekey.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecertprivatekey.pem" COPYONLY)
 configure_file(e2etestsfakecertpublickey.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecertpublickey.pem" COPYONLY)
+configure_file(fake2eelocksucceeded.json "${PROJECT_BINARY_DIR}/bin/fakeshortcut.base64" COPYONLY)
 
 
 if(ADD_E2E_TESTS)
diff --git a/test/fakeshortcut.base64 b/test/fakeshortcut.base64
new file mode 100644 (file)
index 0000000..d8238b6
--- /dev/null
@@ -0,0 +1 @@
+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
\ No newline at end of file
index a3d84cbca8765fecb6b94ca7735ea94c2e1e9c80..a306bc44e2b25d8903131ba25c1f6dfd35e143c2 100644 (file)
@@ -1368,6 +1368,8 @@ private slots:
         FakeFolder fakeFolder{FileInfo{}};
         auto vfs = setupVfs(fakeFolder);
 
+        qInfo("Starting .lnk test. It might hand and will get killed after timeout...");
+
         // Create a Windows shortcut (.lnk) file
         fakeFolder.remoteModifier().insert("linkfile.lnk");
 
@@ -1379,6 +1381,33 @@ private slots:
         triggerDownload(fakeFolder, "linkfile.lnk");
         QVERIFY(fakeFolder.syncOnce());
         QVERIFY(itemInstruction(completeSpy, "linkfile.lnk", CSYNC_INSTRUCTION_SYNC));
+
+        // a real .lnk file contents stored as base64 for tests
+        QFile fakeShortcutBase64(QStringLiteral("fakeshortcut.base64"));
+        QVERIFY(fakeShortcutBase64.open(QFile::ReadOnly));
+        const auto fakeShortcutBase64Binary = QByteArray::fromBase64(fakeShortcutBase64.readAll());
+        fakeShortcutBase64.close();
+        
+        // fill the .lnk file with binary data from real shortcut and turn it into OnlineOnly file
+        const QString shortcutFilePathOnDisk = fakeFolder.localPath() + "linkfile.lnk";
+        QFile shorcutFileOnDisk(shortcutFilePathOnDisk);
+        QVERIFY(shorcutFileOnDisk.open(QFile::WriteOnly));
+        QVERIFY(shorcutFileOnDisk.write(fakeShortcutBase64Binary));
+        shorcutFileOnDisk.close();
+
+        // run tests on it
+        ::setPinState(shortcutFilePathOnDisk, PinState::OnlineOnly, cfapi::NoRecurse);
+        QVERIFY(fakeFolder.syncOnce());
+        QVERIFY(vfs->pinState("linkfile.lnk").isValid());
+        QVERIFY(itemInstruction(completeSpy, "linkfile.lnk", CSYNC_INSTRUCTION_SYNC));
+
+        // trigget download of online only .lnk file
+        triggerDownload(fakeFolder, "linkfile.lnk");
+        QVERIFY(fakeFolder.syncOnce());
+        QVERIFY(vfs->pinState("linkfile.lnk").isValid());
+        QVERIFY(itemInstruction(completeSpy, "linkfile.lnk", CSYNC_INSTRUCTION_SYNC));
+
+        qInfo("Finishing .lnk test");
     }
 
     void testFolderDoesNotUpdatePlaceholderMetadata()