File indexing completed on 2024-04-28 08:49:15
0001 /** 0002 * SPDX-FileCopyrightText: 2015 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include <QCoreApplication> 0008 #include <QSignalSpy> 0009 #include <QSocketNotifier> 0010 #include <QStandardPaths> 0011 #include <QTemporaryFile> 0012 #include <QTest> 0013 #include <backends/lan/uploadjob.h> 0014 #include <core/filetransferjob.h> 0015 #include <kdeconnectconfig.h> 0016 0017 #include "core/daemon.h" 0018 #include "core/device.h" 0019 #include "core/kdeconnectplugin.h" 0020 #include "kdeconnect-version.h" 0021 #include "testdaemon.h" 0022 #include <backends/lan/compositeuploadjob.h> 0023 #include <backends/pairinghandler.h> 0024 #include <plugins/share/shareplugin.h> 0025 0026 class TestSendFile : public QObject 0027 { 0028 Q_OBJECT 0029 public: 0030 TestSendFile() 0031 { 0032 QStandardPaths::setTestModeEnabled(true); 0033 m_daemon = new TestDaemon; 0034 } 0035 0036 private Q_SLOTS: 0037 void testSend() 0038 { 0039 if (!(m_daemon->getLinkProviders().size() > 0)) { 0040 QFAIL("No links available, but loopback should have been provided by the test"); 0041 } 0042 0043 Device *d = nullptr; 0044 const QList<Device *> devicesList = m_daemon->devicesList(); 0045 for (Device *id : devicesList) { 0046 if (id->isReachable()) { 0047 if (!id->isPaired()) 0048 id->requestPairing(); 0049 d = id; 0050 } 0051 } 0052 if (d == nullptr) { 0053 QFAIL("Unable to determine device"); 0054 } 0055 QCOMPARE(d->isReachable(), true); 0056 QCOMPARE(d->isPaired(), true); 0057 0058 QByteArray content("12312312312313213123213123"); 0059 0060 QTemporaryFile temp; 0061 temp.open(); 0062 temp.write(content); 0063 temp.close(); 0064 0065 KdeConnectPlugin *plugin = d->plugin(QStringLiteral("kdeconnect_share")); 0066 QVERIFY(plugin); 0067 plugin->metaObject()->invokeMethod(plugin, "shareUrl", Q_ARG(QString, QUrl::fromLocalFile(temp.fileName()).toString())); 0068 0069 QSignalSpy spy(plugin, SIGNAL(shareReceived(QString))); 0070 QVERIFY(spy.wait(2000)); 0071 0072 QVariantList args = spy.takeFirst(); 0073 QUrl sentFile(args.first().toUrl()); 0074 0075 QFile file(sentFile.toLocalFile()); 0076 QCOMPARE(file.size(), content.size()); 0077 QVERIFY(file.open(QIODevice::ReadOnly)); 0078 QCOMPARE(file.readAll(), content); 0079 } 0080 0081 void testSslJobs() 0082 { 0083 const QString aFile = QFINDTESTDATA("sendfiletest.cpp"); 0084 const QString destFile = QDir::tempPath() + QStringLiteral("/kdeconnect-test-sentfile"); 0085 QFile(destFile).remove(); 0086 0087 DeviceInfo deviceInfo = KdeConnectConfig::instance().deviceInfo(); 0088 KdeConnectConfig::instance().addTrustedDevice(deviceInfo); 0089 0090 // We need the device to be loaded on the daemon, otherwise CompositeUploadJob will get a null device 0091 Device *device = new Device(this, deviceInfo.id); 0092 m_daemon->addDevice(device); 0093 0094 QSharedPointer<QFile> f(new QFile(aFile)); 0095 NetworkPacket np(PACKET_TYPE_SHARE_REQUEST); 0096 np.setPayload(f, f->size()); 0097 0098 CompositeUploadJob *job = new CompositeUploadJob(deviceInfo.id, false); 0099 UploadJob *uj = new UploadJob(np); 0100 job->addSubjob(uj); 0101 0102 QSignalSpy spyUpload(job, &KJob::result); 0103 job->start(); 0104 0105 f->open(QIODevice::ReadWrite); 0106 0107 FileTransferJob *ft = np.createPayloadTransferJob(QUrl::fromLocalFile(destFile)); 0108 0109 QSignalSpy spyTransfer(ft, &KJob::result); 0110 0111 ft->start(); 0112 0113 QVERIFY(spyTransfer.count() || spyTransfer.wait()); 0114 0115 if (ft->error()) { 0116 qWarning() << "fterror" << ft->errorString(); 0117 } 0118 0119 QCOMPARE(ft->error(), 0); 0120 0121 QCOMPARE(spyUpload.count(), 1); 0122 0123 QFile resultFile(destFile), originFile(aFile); 0124 QVERIFY(resultFile.open(QIODevice::ReadOnly)); 0125 QVERIFY(originFile.open(QIODevice::ReadOnly)); 0126 0127 const QByteArray resultContents = resultFile.readAll(), originContents = originFile.readAll(); 0128 QCOMPARE(resultContents.size(), originContents.size()); 0129 QCOMPARE(resultFile.readAll(), originFile.readAll()); 0130 } 0131 0132 private: 0133 TestDaemon *m_daemon; 0134 }; 0135 0136 QTEST_MAIN(TestSendFile); 0137 0138 #include "sendfiletest.moc"