[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:28:55 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=d835d01

The following commit has been merged in the master branch:
commit d835d01a0936504dd8c3df40b6eaa29c88003216
Author: Aleix Pol <aleixpol at kde.org>
Date:   Mon Sep 7 14:54:33 2015 +0200

    Add a test for file sending, using the loopback device
    
    Extends unit testing by making sure that file sharing works locally.
    
    REVIEW: 125086
---
 core/backends/loopback/loopbackdevicelink.cpp |   4 +
 core/daemon.cpp                               |  17 ++--
 core/daemon.h                                 |  10 ++-
 core/device.cpp                               |   5 ++
 core/device.h                                 |   2 +
 core/filetransferjob.cpp                      |   1 +
 core/filetransferjob.h                        |   4 +-
 plugins/share/shareplugin.cpp                 |   6 +-
 plugins/share/shareplugin.h                   |   3 +
 tests/CMakeLists.txt                          |   1 +
 tests/sendfiletest.cpp                        | 108 ++++++++++++++++++++++++++
 11 files changed, 150 insertions(+), 11 deletions(-)

diff --git a/core/backends/loopback/loopbackdevicelink.cpp b/core/backends/loopback/loopbackdevicelink.cpp
index 718c5b8..ac174d4 100644
--- a/core/backends/loopback/loopbackdevicelink.cpp
+++ b/core/backends/loopback/loopbackdevicelink.cpp
@@ -46,6 +46,8 @@ bool LoopbackDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackag
 
     //LoopbackDeviceLink does not need deviceTransferInfo
     if (input.hasPayload()) {
+        bool b = input.payload()->open(QIODevice::ReadOnly);
+        Q_ASSERT(b);
         output.setPayload(input.payload(), input.payloadSize());
     }
 
@@ -61,6 +63,8 @@ bool LoopbackDeviceLink::sendPackage(NetworkPackage& input)
 
     //LoopbackDeviceLink does not need deviceTransferInfo
     if (input.hasPayload()) {
+        bool b = input.payload()->open(QIODevice::ReadOnly);
+        Q_ASSERT(b);
         output.setPayload(input.payload(), input.payloadSize());
     }
 
diff --git a/core/daemon.cpp b/core/daemon.cpp
index cb6999e..1aa5ad6 100644
--- a/core/daemon.cpp
+++ b/core/daemon.cpp
@@ -52,7 +52,7 @@ Daemon* Daemon::instance()
     return *s_instance;
 }
 
-Daemon::Daemon(QObject *parent)
+Daemon::Daemon(QObject *parent, bool testMode)
     : QObject(parent)
     , d(new DaemonPrivate)
 {
@@ -61,8 +61,10 @@ Daemon::Daemon(QObject *parent)
     qCDebug(KDECONNECT_CORE) << "KdeConnect daemon starting";
 
     //Load backends
-    d->mLinkProviders.insert(new LanLinkProvider());
-    //d->mLinkProviders.insert(new LoopbackLinkProvider());
+    if (testMode)
+        d->mLinkProviders.insert(new LoopbackLinkProvider());
+    else
+        d->mLinkProviders.insert(new LanLinkProvider());
 
     //Read remebered paired devices
     const QStringList& list = KdeConnectConfig::instance()->trustedDevices();
@@ -106,12 +108,12 @@ void Daemon::forceOnNetworkChange()
     }
 }
 
-QStringList Daemon::devices(bool onlyReachable, bool onlyVisible) const
+QStringList Daemon::devices(bool onlyReachable, bool onlyPaired) const
 {
     QStringList ret;
     Q_FOREACH(Device* device, d->mDevices) {
         if (onlyReachable && !device->isReachable()) continue;
-        if (onlyVisible && !device->isPaired()) continue;
+        if (onlyPaired && !device->isPaired()) continue;
         ret.append(device->id());
     }
     return ret;
@@ -182,6 +184,11 @@ QNetworkAccessManager* Daemon::networkAccessManager()
     return manager;
 }
 
+QList<Device*> Daemon::devicesList() const
+{
+    return d->mDevices.values();
+}
+
 Daemon::~Daemon()
 {
 
diff --git a/core/daemon.h b/core/daemon.h
index d263163..6da87e9 100644
--- a/core/daemon.h
+++ b/core/daemon.h
@@ -39,7 +39,7 @@ class KDECONNECTCORE_EXPORT Daemon
     Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.daemon")
 
 public:
-    explicit Daemon(QObject *parent);
+    explicit Daemon(QObject *parent, bool testMode = false);
     ~Daemon();
 
 public Q_SLOTS:
@@ -55,16 +55,18 @@ public Q_SLOTS:
 
     Q_SCRIPTABLE void forceOnNetworkChange();
 
-    Q_SCRIPTABLE QString announcedName();
-    Q_SCRIPTABLE void setAnnouncedName(QString name);
+    QString announcedName();
+    void setAnnouncedName(QString name);
 
     //Returns a list of ids. The respective devices can be manipulated using the dbus path: "/modules/kdeconnect/Devices/"+id
-    Q_SCRIPTABLE QStringList devices(bool onlyReachable = false, bool onlyVisible = false) const;
+    Q_SCRIPTABLE QStringList devices(bool onlyReachable = false, bool onlyPaired = false) const;
 
     virtual void requestPairing(Device *d) = 0;
     virtual void reportError(const QString &title, const QString &description) = 0;
     virtual QNetworkAccessManager* networkAccessManager();
 
+    QList<Device*> devicesList() const;
+
 Q_SIGNALS:
     Q_SCRIPTABLE void deviceAdded(const QString& id);
     Q_SCRIPTABLE void deviceRemoved(const QString& id); //Note that paired devices will never be removed
diff --git a/core/device.cpp b/core/device.cpp
index d53b3c5..7305be6 100644
--- a/core/device.cpp
+++ b/core/device.cpp
@@ -522,3 +522,8 @@ void Device::setName(const QString &name)
         Q_EMIT nameChanged(name);
     }
 }
+
+KdeConnectPlugin* Device::plugin(const QString& pluginName) const
+{
+    return m_plugins[pluginName];
+}
diff --git a/core/device.h b/core/device.h
index 03f528c..bba396d 100644
--- a/core/device.h
+++ b/core/device.h
@@ -102,6 +102,8 @@ public:
 
     Q_SCRIPTABLE QString pluginsConfigFile() const;
 
+    KdeConnectPlugin* plugin(const QString& plugin) const;
+
 public Q_SLOTS:
     ///sends a @p np package to the device
     virtual bool sendPackage(NetworkPackage& np);
diff --git a/core/filetransferjob.cpp b/core/filetransferjob.cpp
index f503f6a..f10f527 100644
--- a/core/filetransferjob.cpp
+++ b/core/filetransferjob.cpp
@@ -39,6 +39,7 @@ FileTransferJob::FileTransferJob(const QSharedPointer<QIODevice>& origin, qint64
     , mWritten(0)
 {
     Q_ASSERT(mOrigin);
+    Q_ASSERT(mOrigin->isReadable());
     if (mDestination.scheme().isEmpty()) {
         qWarning() << "Destination QUrl" << mDestination << "lacks a scheme. Setting its scheme to 'file'.";
         mDestination.setScheme("file");
diff --git a/core/filetransferjob.h b/core/filetransferjob.h
index 859a303..1c5c3b8 100644
--- a/core/filetransferjob.h
+++ b/core/filetransferjob.h
@@ -33,13 +33,15 @@
 #include <QNetworkReply>
 #include <QBuffer>
 
+#include "kdeconnectcore_export.h"
+
 /**
  * @short It will stream a device into a url destination
  *
  * Given a QIODevice, the file transfer job will use the system's QNetworkAccessManager
  * for putting the stream into the requested location.
  */
-class FileTransferJob
+class KDECONNECTCORE_EXPORT FileTransferJob
     : public KJob
 {
     Q_OBJECT
diff --git a/plugins/share/shareplugin.cpp b/plugins/share/shareplugin.cpp
index b4331b3..4a92537 100644
--- a/plugins/share/shareplugin.cpp
+++ b/plugins/share/shareplugin.cpp
@@ -129,7 +129,11 @@ bool SharePlugin::receivePackage(const NetworkPackage& np)
 
 void SharePlugin::finished(KJob* job)
 {
-    qCDebug(KDECONNECT_PLUGIN_SHARE) << "File transfer finished. Success:" << (!job->error());
+    FileTransferJob* ftjob = qobject_cast<FileTransferJob*>(job);
+    if (ftjob)
+        fileReceived(ftjob->destination());
+
+    qCDebug(KDECONNECT_PLUGIN_SHARE) << "File transfer finished. Success:" << (!job->error()) << (ftjob ? ftjob->destination() : QUrl());
 }
 
 void SharePlugin::openDestinationFolder()
diff --git a/plugins/share/shareplugin.h b/plugins/share/shareplugin.h
index de00693..615b86f 100644
--- a/plugins/share/shareplugin.h
+++ b/plugins/share/shareplugin.h
@@ -47,6 +47,9 @@ private Q_SLOTS:
     void finished(KJob*);
     void openDestinationFolder();
 
+Q_SIGNALS:
+    void fileReceived(const QUrl& url);
+
 private:
     void shareUrl(const QUrl& url);
 
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index b00a574..42d1f4c 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -13,5 +13,6 @@ set(kdeconnect_libraries
     qca-qt5
 )
 
+ecm_add_test(sendfiletest.cpp LINK_LIBRARIES ${kdeconnect_libraries})
 ecm_add_test(networkpackagetests.cpp LINK_LIBRARIES ${kdeconnect_libraries})
 ecm_add_test(testsocketlinereader.cpp ../core/backends/lan/socketlinereader.cpp TEST_NAME testsocketlinereader LINK_LIBRARIES ${kdeconnect_libraries})
diff --git a/tests/sendfiletest.cpp b/tests/sendfiletest.cpp
new file mode 100644
index 0000000..8e96c0b
--- /dev/null
+++ b/tests/sendfiletest.cpp
@@ -0,0 +1,108 @@
+/**
+ * Copyright 2015 Aleix Pol Gonzalez <aleixpol at kde.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <QSocketNotifier>
+#include <QApplication>
+#include <QNetworkAccessManager>
+#include <QTest>
+#include <QTemporaryFile>
+#include <QSignalSpy>
+
+#include <KIO/AccessManager>
+
+#include "core/daemon.h"
+#include "core/device.h"
+#include "core/kdeconnectplugin.h"
+#include "kdeconnect-version.h"
+
+class TestDaemon : public Daemon
+{
+Q_OBJECT
+public:
+    TestDaemon(QObject* parent = Q_NULLPTR)
+        : Daemon(parent, true)
+        , m_nam(Q_NULLPTR)
+    {
+    }
+
+    void requestPairing(Device* d) Q_DECL_OVERRIDE
+    {
+        d->acceptPairing();
+    }
+
+    void reportError(const QString & title, const QString & description) Q_DECL_OVERRIDE
+    {
+        qWarning() << "error:" << title << description;
+    }
+
+    QNetworkAccessManager* networkAccessManager() Q_DECL_OVERRIDE
+    {
+        if (!m_nam) {
+            m_nam = new KIO::AccessManager(this);
+        }
+        return m_nam;
+    }
+
+private:
+    QNetworkAccessManager* m_nam;
+};
+
+class TestSendFile : public QObject
+{
+    Q_OBJECT
+    public:
+        TestSendFile() : mDaemon(new TestDaemon) {}
+
+    private Q_SLOTS:
+        void testSend() {
+            Device* d = mDaemon->devicesList().first();
+            QCOMPARE(d->isReachable(), true);
+            QCOMPARE(d->isPaired(), true);
+
+            QByteArray content("12312312312313213123213123");
+
+            QTemporaryFile temp;
+            temp.open();
+            temp.write(content);
+            temp.close();
+
+            KdeConnectPlugin* plugin = d->plugin("kdeconnect_share");
+            QVERIFY(plugin);
+            plugin->metaObject()->invokeMethod(plugin, "shareUrl", Q_ARG(QString, QUrl::fromLocalFile(temp.fileName()).toString()));
+
+            QSignalSpy spy(plugin, SIGNAL(fileReceived(QUrl)));
+            QVERIFY(spy.wait(2000));
+
+            QVariantList args = spy.takeFirst();
+            QUrl sentFile = args.first().toUrl();
+
+            QFile file(sentFile.toLocalFile());
+            QCOMPARE(file.size(), content.size());
+            QVERIFY(file.open(QIODevice::ReadOnly));
+            QCOMPARE(file.readAll(), content);
+        }
+
+    private:
+        TestDaemon* mDaemon;
+};
+
+QTEST_MAIN(TestSendFile);
+
+#include "sendfiletest.moc"

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list