1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Dominik Riebeling 2015-12-18 23:05:13 +01:00
parent 4627d4b56e
commit d24a9ea3b2
2 changed files with 26 additions and 2 deletions

View file

@ -17,7 +17,6 @@
****************************************************************************/
#include <QtNetwork>
#include <QtDebug>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
@ -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);

View file

@ -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)