summaryrefslogtreecommitdiffstats
path: root/tests/downloadspeed
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2012-03-15 14:53:47 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2012-03-19 16:14:04 +0100
commitbe3b47d0d504a3409ce66bd77bb8c0acff87c4f5 (patch)
tree09dfb02d484a4f395991972b828da71400fb761a /tests/downloadspeed
parent9fd62353cf7f973d78cd2093328ac15b5c4980b6 (diff)
Reorganize the tree, have better ifw.pri. Shadow build support.
Change-Id: I01fb12537f863ed0744979973c7e4153889cc5cb Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
Diffstat (limited to 'tests/downloadspeed')
-rw-r--r--tests/downloadspeed/downloadspeed.pro16
-rw-r--r--tests/downloadspeed/main.cpp203
2 files changed, 219 insertions, 0 deletions
diff --git a/tests/downloadspeed/downloadspeed.pro b/tests/downloadspeed/downloadspeed.pro
new file mode 100644
index 000000000..2ee3923f1
--- /dev/null
+++ b/tests/downloadspeed/downloadspeed.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+DEPENDPATH += . ..
+INCLUDEPATH += . ..
+TARGET = downloadspeed
+
+include(../../installerfw.pri)
+
+QT -= gui
+QT += network
+LIBS += -linstaller
+
+CONFIG += console
+CONFIG -= app_bundle
+DESTDIR = $$IFW_APP_PATH
+
+SOURCES += main.cpp
diff --git a/tests/downloadspeed/main.cpp b/tests/downloadspeed/main.cpp
new file mode 100644
index 000000000..e0516b90b
--- /dev/null
+++ b/tests/downloadspeed/main.cpp
@@ -0,0 +1,203 @@
+/**************************************************************************
+**
+** This file is part of Installer Framework
+**
+** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#include <kdupdaterfiledownloader.h>
+#include <kdupdaterfiledownloaderfactory.h>
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDebug>
+#include <QtCore/QObject>
+#include <QtCore/QUrl>
+
+#include <QtNetwork/QNetworkProxy>
+
+static QString humanReadableSize(quint64 intSize)
+{
+ QString unit;
+ double size;
+
+ if (intSize < 1024 * 1024) {
+ size = 1. + intSize / 1024.;
+ unit = QObject::tr("kB");
+ } else if (intSize < 1024 * 1024 * 1024) {
+ size = 1. + intSize / 1024. / 1024.;
+ unit = QObject::tr("MB");
+ } else {
+ size = 1. + intSize / 1024. / 1024. / 1024.;
+ unit = QObject::tr("GB");
+ }
+
+ size = qRound(size * 10) / 10.0;
+ return QString::fromLatin1("%L1 %2").arg(size, 0, 'g', 4).arg(unit);
+}
+
+// -- Receiver
+
+class Receiver : public QObject
+{
+ Q_OBJECT
+
+public:
+ Receiver() : QObject(), m_downloadFinished(false) {}
+ ~Receiver() {}
+
+ inline bool downloaded() { return m_downloadFinished; }
+
+public slots:
+ void downloadStarted()
+ {
+ m_downloadFinished = false;
+ }
+
+ void downloadFinished()
+ {
+ m_downloadFinished = true;
+ }
+
+ void downloadAborted(const QString &error)
+ {
+ m_downloadFinished = true;
+ qDebug() << "Error:" << error;
+ }
+
+ void downloadSpeed(qint64 speed)
+ {
+ qDebug() << "Download speed:" << humanReadableSize(speed) + QLatin1String("/sec");
+ }
+
+ void downloadProgress(double progress)
+ {
+ qDebug() << "Progress:" << progress;
+ }
+
+ void estimatedDownloadTime(int time)
+ {
+ if (time <= 0) {
+ qDebug() << "Unknown time remaining.";
+ return;
+ }
+
+ const int d = time / 86400;
+ const int h = (time / 3600) - (d * 24);
+ const int m = (time / 60) - (d * 1440) - (h * 60);
+ const int s = time % 60;
+
+ QString days;
+ if (d > 0)
+ days = QString::number(d) + QLatin1String(d < 2 ? " day" : " days") + QLatin1String(", ");
+
+ QString hours;
+ if (h > 0)
+ hours = QString::number(h) + QLatin1String(h < 2 ? " hour" : " hours") + QLatin1String(", ");
+
+ QString minutes;
+ if (m > 0)
+ minutes = QString::number(m) + QLatin1String(m < 2 ? " minute" : " minutes");
+
+ QString seconds;
+ if (s >= 0 && minutes.isEmpty())
+ seconds = QString::number(s) + QLatin1String(s < 2 ? " second" : " seconds");
+
+ qDebug() << days + hours + minutes + seconds + tr("remaining.");
+ }
+
+ void downloadStatus(const QString &status)
+ {
+ qDebug() << status;
+ }
+
+ void downloadProgress(qint64 bytesReceived, qint64 bytesToReceive)
+ {
+ qDebug() << "Bytes received:" << bytesReceived << ", Bytes to receive:" << bytesToReceive;
+ }
+
+private:
+ volatile bool m_downloadFinished;
+};
+
+
+// http://get.qt.nokia.com/qt/source/qt-mac-opensource-4.7.4.dmg
+// ftp://ftp.trolltech.com/qt/source/qt-mac-opensource-4.7.4.dmg
+
+class ProxyFactory : public KDUpdater::FileDownloaderProxyFactory
+{
+public:
+ ProxyFactory() {}
+
+ ProxyFactory *clone() const
+ {
+ return new ProxyFactory();
+ }
+
+ QList<QNetworkProxy> queryProxy(const QNetworkProxyQuery &query = QNetworkProxyQuery())
+ {
+ return QNetworkProxyFactory::systemProxyForQuery(query);
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ if (a.arguments().count() < 2)
+ return EXIT_FAILURE;
+
+ const QUrl url(a.arguments().value(1));
+ qDebug() << url.toString();
+ KDUpdater::FileDownloader *loader = KDUpdater::FileDownloaderFactory::instance().create(url.scheme(), 0);
+ if (loader) {
+ loader->setUrl(url);
+ loader->setProxyFactory(new ProxyFactory());
+
+ Receiver r;
+ r.connect(loader, SIGNAL(downloadStarted()), &r, SLOT(downloadStarted()));
+ r.connect(loader, SIGNAL(downloadCanceled()), &r, SLOT(downloadFinished()));
+ r.connect(loader, SIGNAL(downloadCompleted()), &r, SLOT(downloadFinished()));
+ r.connect(loader, SIGNAL(downloadAborted(QString)), &r, SLOT(downloadAborted(QString)));
+
+ r.connect(loader, SIGNAL(downloadSpeed(qint64)), &r, SLOT(downloadSpeed(qint64)));
+ r.connect(loader, SIGNAL(downloadStatus(QString)), &r, SLOT(downloadStatus(QString)));
+ r.connect(loader, SIGNAL(downloadProgress(double)), &r, SLOT(downloadProgress(double)));
+ r.connect(loader, SIGNAL(estimatedDownloadTime(int)), &r, SLOT(estimatedDownloadTime(int)));
+ r.connect(loader, SIGNAL(downloadProgress(qint64, qint64)), &r, SLOT(downloadProgress(qint64, qint64)));
+
+ loader->download();
+ while (!r.downloaded())
+ QCoreApplication::processEvents();
+
+ delete loader;
+ }
+
+ return EXIT_SUCCESS;
+}
+
+#include "main.moc"