From d24a9ea3b2eaec28e44608bfc50d02cb14cea51b Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Fri, 18 Dec 2015 23:05:13 +0100 Subject: Add support file:// URLs in HttpGet. QNetworkAccessManager can handle file:// URLs without additional work. Make HttpGet aware of that so you can now also use it to retrieve file:// URLs. Add a unit test for it as well. Change-Id: If64b57453460b70bca9e5b0c725bb78344617bcd --- rbutil/rbutilqt/base/httpget.cpp | 6 ++++-- rbutil/rbutilqt/test/test-httpget.cpp | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/rbutil/rbutilqt/base/httpget.cpp b/rbutil/rbutilqt/base/httpget.cpp index 4b08faf33b..4d10301bc0 100644 --- a/rbutil/rbutilqt/base/httpget.cpp +++ b/rbutil/rbutilqt/base/httpget.cpp @@ -17,7 +17,6 @@ ****************************************************************************/ #include -#include #include #include @@ -155,7 +154,10 @@ void HttpGet::requestFinished(QNetworkReply* reply) startRequest(url); return; } - else if(m_lastStatusCode == 200) { + else if(m_lastStatusCode == 200 || + (reply->url().isLocalFile() && reply->error() == 0)) { + // callers might not be aware if the request is file:// so fake 200. + m_lastStatusCode = 200; m_data = reply->readAll(); if(m_outputFile && m_outputFile->open(QIODevice::WriteOnly)) { m_outputFile->write(m_data); diff --git a/rbutil/rbutilqt/test/test-httpget.cpp b/rbutil/rbutilqt/test/test-httpget.cpp index c9ae86bc6c..a062203e70 100644 --- a/rbutil/rbutilqt/test/test-httpget.cpp +++ b/rbutil/rbutilqt/test/test-httpget.cpp @@ -118,6 +118,7 @@ class TestHttpGet : public QObject { Q_OBJECT private slots: + void testFileUrlRequest(void); void testCachedRequest(void); void testUncachedRepeatedRequest(void); void testUncachedMovedRequest(void); @@ -188,6 +189,27 @@ void TestHttpGet::cleanup(void) if(m_doneSpy) delete m_doneSpy; } +void TestHttpGet::testFileUrlRequest(void) +{ + QTimer::singleShot(TEST_HTTP_TIMEOUT, this, SLOT(waitTimeout(void))); + + QString teststring = "The quick brown fox jumps over the lazy dog."; + QTemporaryFile datafile; + datafile.open(); + datafile.write(teststring.toLatin1()); + m_getter->getFile("file://" + datafile.fileName()); + datafile.close(); + while(m_doneSpy->count() == 0 && m_waitTimeoutOccured == false) + QCoreApplication::processEvents(); + + QCOMPARE(m_doneSpy->count(), 1); + QCOMPARE(m_waitTimeoutOccured, false); + QCOMPARE(m_daemon->lastRequestData().size(), 0); + QCOMPARE(m_getter->readAll(), teststring.toLatin1()); + QCOMPARE(m_getter->httpResponse(), 200); +} + + /* On uncached requests, HttpGet is supposed to sent a GET request only. */ void TestHttpGet::testUncachedRepeatedRequest(void) -- cgit v1.2.3