branch | RCL_3 |
changeset 4 | 3b1da2848fc7 |
parent 3 | 41300fa6a67c |
child 7 | 3f74d0d4af4c |
3:41300fa6a67c | 4:3b1da2848fc7 |
---|---|
1 /**************************************************************************** |
1 /**************************************************************************** |
2 ** |
2 ** |
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). |
3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). |
4 ** All rights reserved. |
4 ** All rights reserved. |
5 ** Contact: Nokia Corporation (qt-info@nokia.com) |
5 ** Contact: Nokia Corporation (qt-info@nokia.com) |
6 ** |
6 ** |
7 ** This file is part of the test suite of the Qt Toolkit. |
7 ** This file is part of the test suite of the Qt Toolkit. |
8 ** |
8 ** |
52 #include <QtNetwork/QTcpSocket> |
52 #include <QtNetwork/QTcpSocket> |
53 #include <QtNetwork/QLocalSocket> |
53 #include <QtNetwork/QLocalSocket> |
54 #include <QtNetwork/QLocalServer> |
54 #include <QtNetwork/QLocalServer> |
55 #include <QtNetwork/QHostInfo> |
55 #include <QtNetwork/QHostInfo> |
56 #include <QtNetwork/QFtp> |
56 #include <QtNetwork/QFtp> |
57 #include <QtNetwork/QAbstractNetworkCache> |
|
57 #include <QtNetwork/qauthenticator.h> |
58 #include <QtNetwork/qauthenticator.h> |
58 #include <QtNetwork/qnetworkaccessmanager.h> |
59 #include <QtNetwork/qnetworkaccessmanager.h> |
59 #include <QtNetwork/qnetworkrequest.h> |
60 #include <QtNetwork/qnetworkrequest.h> |
60 #include <QtNetwork/qnetworkreply.h> |
61 #include <QtNetwork/qnetworkreply.h> |
61 #include <QtNetwork/qnetworkcookie.h> |
62 #include <QtNetwork/qnetworkcookie.h> |
196 void ioGetFromHttpsWithIgnoreSslErrors(); |
197 void ioGetFromHttpsWithIgnoreSslErrors(); |
197 void ioGetFromHttpsWithSslHandshakeError(); |
198 void ioGetFromHttpsWithSslHandshakeError(); |
198 #endif |
199 #endif |
199 void ioGetFromHttpBrokenServer_data(); |
200 void ioGetFromHttpBrokenServer_data(); |
200 void ioGetFromHttpBrokenServer(); |
201 void ioGetFromHttpBrokenServer(); |
202 void ioGetFromHttpWithCache_data(); |
|
203 void ioGetFromHttpWithCache(); |
|
201 |
204 |
202 void ioGetWithManyProxies_data(); |
205 void ioGetWithManyProxies_data(); |
203 void ioGetWithManyProxies(); |
206 void ioGetWithManyProxies(); |
204 |
207 |
205 void ioPutToFileFromFile_data(); |
208 void ioPutToFileFromFile_data(); |
221 void ioPostToHttpFromMiddleOfFileToEnd(); |
224 void ioPostToHttpFromMiddleOfFileToEnd(); |
222 void ioPostToHttpFromMiddleOfFileFiveBytes(); |
225 void ioPostToHttpFromMiddleOfFileFiveBytes(); |
223 void ioPostToHttpFromMiddleOfQBufferFiveBytes(); |
226 void ioPostToHttpFromMiddleOfQBufferFiveBytes(); |
224 void ioPostToHttpNoBufferFlag(); |
227 void ioPostToHttpNoBufferFlag(); |
225 void ioPostToHttpUploadProgress(); |
228 void ioPostToHttpUploadProgress(); |
226 void ioPostToHttpEmtpyUploadProgress(); |
229 void ioPostToHttpEmptyUploadProgress(); |
227 |
230 |
228 void lastModifiedHeaderForFile(); |
231 void lastModifiedHeaderForFile(); |
229 void lastModifiedHeaderForHttp(); |
232 void lastModifiedHeaderForHttp(); |
230 |
233 |
231 void rateControl_data(); |
234 void rateControl_data(); |
316 |
319 |
317 public: |
320 public: |
318 QByteArray dataToTransmit; |
321 QByteArray dataToTransmit; |
319 QByteArray receivedData; |
322 QByteArray receivedData; |
320 bool doClose; |
323 bool doClose; |
321 |
324 int totalConnections; |
322 MiniHttpServer(const QByteArray &data) : client(0), dataToTransmit(data), doClose(true) |
325 |
326 MiniHttpServer(const QByteArray &data) : client(0), dataToTransmit(data), doClose(true), totalConnections(0) |
|
323 { |
327 { |
324 listen(); |
328 listen(); |
325 connect(this, SIGNAL(newConnection()), this, SLOT(doAccept())); |
329 connect(this, SIGNAL(newConnection()), this, SLOT(doAccept())); |
326 } |
330 } |
327 |
331 |
328 public slots: |
332 public slots: |
329 void doAccept() |
333 void doAccept() |
330 { |
334 { |
331 client = nextPendingConnection(); |
335 client = nextPendingConnection(); |
336 ++totalConnections; |
|
332 connect(client, SIGNAL(readyRead()), this, SLOT(sendData())); |
337 connect(client, SIGNAL(readyRead()), this, SLOT(sendData())); |
333 } |
338 } |
334 |
339 |
335 void sendData() |
340 void sendData() |
336 { |
341 { |
376 lastQuery = query; |
381 lastQuery = query; |
377 ++callCount; |
382 ++callCount; |
378 return toReturn; |
383 return toReturn; |
379 } |
384 } |
380 }; |
385 }; |
386 |
|
387 class MyMemoryCache: public QAbstractNetworkCache |
|
388 { |
|
389 public: |
|
390 typedef QPair<QNetworkCacheMetaData, QByteArray> CachedContent; |
|
391 typedef QHash<QByteArray, CachedContent> CacheData; |
|
392 CacheData cache; |
|
393 |
|
394 MyMemoryCache(QObject *parent) : QAbstractNetworkCache(parent) {} |
|
395 |
|
396 QNetworkCacheMetaData metaData(const QUrl &url) |
|
397 { |
|
398 return cache.value(url.toEncoded()).first; |
|
399 } |
|
400 |
|
401 void updateMetaData(const QNetworkCacheMetaData &metaData) |
|
402 { |
|
403 cache[metaData.url().toEncoded()].first = metaData; |
|
404 } |
|
405 |
|
406 QIODevice *data(const QUrl &url) |
|
407 { |
|
408 CacheData::ConstIterator it = cache.find(url.toEncoded()); |
|
409 if (it == cache.constEnd()) |
|
410 return 0; |
|
411 QBuffer *io = new QBuffer(this); |
|
412 io->setData(it->second); |
|
413 io->open(QIODevice::ReadOnly); |
|
414 io->seek(0); |
|
415 return io; |
|
416 } |
|
417 |
|
418 bool remove(const QUrl &url) |
|
419 { |
|
420 cache.remove(url.toEncoded()); |
|
421 return true; |
|
422 } |
|
423 |
|
424 qint64 cacheSize() const |
|
425 { |
|
426 qint64 total = 0; |
|
427 foreach (const CachedContent &entry, cache) |
|
428 total += entry.second.size(); |
|
429 return total; |
|
430 } |
|
431 |
|
432 QIODevice *prepare(const QNetworkCacheMetaData &) |
|
433 { Q_ASSERT(0 && "Should not have tried to add to the cache"); return 0; } |
|
434 void insert(QIODevice *) |
|
435 { Q_ASSERT(0 && "Should not have tried to add to the cache"); } |
|
436 |
|
437 void clear() { cache.clear(); } |
|
438 }; |
|
439 Q_DECLARE_METATYPE(MyMemoryCache::CachedContent) |
|
440 Q_DECLARE_METATYPE(MyMemoryCache::CacheData) |
|
381 |
441 |
382 class DataReader: public QObject |
442 class DataReader: public QObject |
383 { |
443 { |
384 Q_OBJECT |
444 Q_OBJECT |
385 public: |
445 public: |
760 QVERIFY(!file.exists() || file.remove()); |
820 QVERIFY(!file.exists() || file.remove()); |
761 |
821 |
762 // clear the internal cache |
822 // clear the internal cache |
763 QNetworkAccessManagerPrivate::clearCache(&manager); |
823 QNetworkAccessManagerPrivate::clearCache(&manager); |
764 manager.setProxy(QNetworkProxy()); |
824 manager.setProxy(QNetworkProxy()); |
825 manager.setCache(0); |
|
765 |
826 |
766 // clear cookies |
827 // clear cookies |
767 cookieJar->setAllCookies(QList<QNetworkCookie>()); |
828 cookieJar->setAllCookies(QList<QNetworkCookie>()); |
768 } |
829 } |
769 |
830 |
775 |
836 |
776 QVERIFY(reply.data()); |
837 QVERIFY(reply.data()); |
777 QVERIFY(reply->isOpen()); |
838 QVERIFY(reply->isOpen()); |
778 QVERIFY(reply->isReadable()); |
839 QVERIFY(reply->isReadable()); |
779 QVERIFY(!reply->isWritable()); |
840 QVERIFY(!reply->isWritable()); |
780 QCOMPARE(reply->errorString(), QString("Unknown error")); |
841 |
842 // both behaviours are OK since we might change underlying behaviour again |
|
843 if (!reply->isFinished()) |
|
844 QCOMPARE(reply->errorString(), QString("Unknown error")); |
|
845 else |
|
846 QVERIFY(!reply->errorString().isEmpty()); |
|
847 |
|
781 |
848 |
782 QCOMPARE(reply->manager(), &manager); |
849 QCOMPARE(reply->manager(), &manager); |
783 QCOMPARE(reply->request(), req); |
850 QCOMPARE(reply->request(), req); |
784 QCOMPARE(int(reply->operation()), int(QNetworkAccessManager::GetOperation)); |
851 QCOMPARE(int(reply->operation()), int(QNetworkAccessManager::GetOperation)); |
785 QCOMPARE(reply->error(), QNetworkReply::NoError); |
852 // error and not error are OK since we might change underlying behaviour again |
786 QCOMPARE(reply->isFinished(), false); |
853 if (!reply->isFinished()) |
854 QCOMPARE(reply->error(), QNetworkReply::NoError); |
|
787 QCOMPARE(reply->url(), url); |
855 QCOMPARE(reply->url(), url); |
788 |
856 |
789 reply->abort(); |
857 reply->abort(); |
790 } |
858 } |
791 |
859 |
1088 QFETCH(QString, url); |
1156 QFETCH(QString, url); |
1089 QNetworkRequest request(url); |
1157 QNetworkRequest request(url); |
1090 QNetworkReplyPtr reply = manager.get(request); |
1158 QNetworkReplyPtr reply = manager.get(request); |
1091 reply->setParent(this); // we have expect-fails |
1159 reply->setParent(this); // we have expect-fails |
1092 |
1160 |
1093 QCOMPARE(reply->error(), QNetworkReply::NoError); |
1161 if (!reply->isFinished()) |
1162 QCOMPARE(reply->error(), QNetworkReply::NoError); |
|
1094 |
1163 |
1095 // now run the request: |
1164 // now run the request: |
1096 connect(reply, SIGNAL(finished()), |
1165 connect(reply, SIGNAL(finished()), |
1097 &QTestEventLoop::instance(), SLOT(exitLoop())); |
1166 &QTestEventLoop::instance(), SLOT(exitLoop())); |
1098 QTestEventLoop::instance().enterLoop(10); |
1167 QTestEventLoop::instance().enterLoop(10); |
1449 file.flush(); |
1518 file.flush(); |
1450 QCOMPARE(file.size(), qint64(data.size())); |
1519 QCOMPARE(file.size(), qint64(data.size())); |
1451 |
1520 |
1452 QNetworkRequest request(QUrl::fromLocalFile(file.fileName())); |
1521 QNetworkRequest request(QUrl::fromLocalFile(file.fileName())); |
1453 QNetworkReplyPtr reply = manager.get(request); |
1522 QNetworkReplyPtr reply = manager.get(request); |
1523 QVERIFY(reply->isFinished()); // a file should immediatly be done |
|
1454 DataReader reader(reply); |
1524 DataReader reader(reply); |
1455 |
1525 |
1456 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
1526 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
1457 QTestEventLoop::instance().enterLoop(10); |
1527 QTestEventLoop::instance().enterLoop(10); |
1458 QVERIFY(!QTestEventLoop::instance().timeout()); |
1528 QVERIFY(!QTestEventLoop::instance().timeout()); |
1980 QTestEventLoop::instance().enterLoop(10); |
2050 QTestEventLoop::instance().enterLoop(10); |
1981 QVERIFY(!QTestEventLoop::instance().timeout()); |
2051 QVERIFY(!QTestEventLoop::instance().timeout()); |
1982 |
2052 |
1983 QCOMPARE(reply->url(), request.url()); |
2053 QCOMPARE(reply->url(), request.url()); |
1984 QVERIFY(reply->error() != QNetworkReply::NoError); |
2054 QVERIFY(reply->error() != QNetworkReply::NoError); |
2055 } |
|
2056 |
|
2057 void tst_QNetworkReply::ioGetFromHttpWithCache_data() |
|
2058 { |
|
2059 qRegisterMetaType<MyMemoryCache::CachedContent>(); |
|
2060 QTest::addColumn<QByteArray>("dataToSend"); |
|
2061 QTest::addColumn<QString>("body"); |
|
2062 QTest::addColumn<MyMemoryCache::CachedContent>("cachedReply"); |
|
2063 QTest::addColumn<int>("cacheMode"); |
|
2064 QTest::addColumn<bool>("loadedFromCache"); |
|
2065 QTest::addColumn<bool>("networkUsed"); |
|
2066 |
|
2067 QByteArray reply200 = |
|
2068 "HTTP/1.0 200\r\n" |
|
2069 "Connection: keep-alive\r\n" |
|
2070 "Content-Type: text/plain\r\n" |
|
2071 "Cache-control: no-cache\r\n" |
|
2072 "Content-length: 8\r\n" |
|
2073 "\r\n" |
|
2074 "Reloaded"; |
|
2075 QByteArray reply304 = |
|
2076 "HTTP/1.0 304 Use Cache\r\n" |
|
2077 "Connection: keep-alive\r\n" |
|
2078 "\r\n"; |
|
2079 |
|
2080 QTest::newRow("not-cached,always-network") |
|
2081 << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::AlwaysNetwork) << false << true; |
|
2082 QTest::newRow("not-cached,prefer-network") |
|
2083 << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferNetwork) << false << true; |
|
2084 QTest::newRow("not-cached,prefer-cache") |
|
2085 << reply200 << "Reloaded" << MyMemoryCache::CachedContent() << int(QNetworkRequest::PreferCache) << false << true; |
|
2086 |
|
2087 QDateTime present = QDateTime::currentDateTime().toUTC(); |
|
2088 QDateTime past = present.addSecs(-3600); |
|
2089 QDateTime future = present.addSecs(3600); |
|
2090 static const char dateFormat[] = "ddd, dd MMM yyyy hh:mm:ss 'GMT'"; |
|
2091 |
|
2092 QNetworkCacheMetaData::RawHeaderList rawHeaders; |
|
2093 MyMemoryCache::CachedContent content; |
|
2094 content.second = "Not-reloaded"; |
|
2095 content.first.setLastModified(past); |
|
2096 |
|
2097 // |
|
2098 // Set to expired |
|
2099 // |
|
2100 rawHeaders.clear(); |
|
2101 rawHeaders << QNetworkCacheMetaData::RawHeader("Date", QLocale::c().toString(past, dateFormat).toLatin1()) |
|
2102 << QNetworkCacheMetaData::RawHeader("Cache-control", "max-age=0"); // isn't used in cache loading |
|
2103 content.first.setRawHeaders(rawHeaders); |
|
2104 content.first.setLastModified(past); |
|
2105 |
|
2106 QTest::newRow("expired,200,prefer-network") |
|
2107 << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << false << true; |
|
2108 QTest::newRow("expired,200,prefer-cache") |
|
2109 << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferCache) << false << true; |
|
2110 |
|
2111 QTest::newRow("expired,304,prefer-network") |
|
2112 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << true; |
|
2113 QTest::newRow("expired,304,prefer-cache") |
|
2114 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << true; |
|
2115 |
|
2116 // |
|
2117 // Set to not-expired |
|
2118 // |
|
2119 rawHeaders.clear(); |
|
2120 rawHeaders << QNetworkCacheMetaData::RawHeader("Date", QLocale::c().toString(past, dateFormat).toLatin1()) |
|
2121 << QNetworkCacheMetaData::RawHeader("Cache-control", "max-age=7200"); // isn't used in cache loading |
|
2122 content.first.setRawHeaders(rawHeaders); |
|
2123 content.first.setExpirationDate(future); |
|
2124 |
|
2125 QTest::newRow("not-expired,200,always-network") |
|
2126 << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << false << true; |
|
2127 QTest::newRow("not-expired,200,prefer-network") |
|
2128 << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << false; |
|
2129 QTest::newRow("not-expired,200,prefer-cache") |
|
2130 << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; |
|
2131 QTest::newRow("not-expired,200,always-cache") |
|
2132 << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; |
|
2133 |
|
2134 QTest::newRow("not-expired,304,prefer-network") |
|
2135 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << false; |
|
2136 QTest::newRow("not-expired,304,prefer-cache") |
|
2137 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; |
|
2138 QTest::newRow("not-expired,304,always-cache") |
|
2139 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; |
|
2140 |
|
2141 // |
|
2142 // Set must-revalidate now |
|
2143 // |
|
2144 rawHeaders.clear(); |
|
2145 rawHeaders << QNetworkCacheMetaData::RawHeader("Date", QLocale::c().toString(past, dateFormat).toLatin1()) |
|
2146 << QNetworkCacheMetaData::RawHeader("Cache-control", "max-age=7200, must-revalidate"); // must-revalidate is used |
|
2147 content.first.setRawHeaders(rawHeaders); |
|
2148 |
|
2149 QTest::newRow("must-revalidate,200,always-network") |
|
2150 << reply200 << "Reloaded" << content << int(QNetworkRequest::AlwaysNetwork) << false << true; |
|
2151 QTest::newRow("must-revalidate,200,prefer-network") |
|
2152 << reply200 << "Reloaded" << content << int(QNetworkRequest::PreferNetwork) << false << true; |
|
2153 QTest::newRow("must-revalidate,200,prefer-cache") |
|
2154 << reply200 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; |
|
2155 QTest::newRow("must-revalidate,200,always-cache") |
|
2156 << reply200 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; |
|
2157 |
|
2158 QTest::newRow("must-revalidate,304,prefer-network") |
|
2159 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferNetwork) << true << true; |
|
2160 QTest::newRow("must-revalidate,304,prefer-cache") |
|
2161 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::PreferCache) << true << false; |
|
2162 QTest::newRow("must-revalidate,304,always-cache") |
|
2163 << reply304 << "Not-reloaded" << content << int(QNetworkRequest::AlwaysCache) << true << false; |
|
2164 } |
|
2165 |
|
2166 void tst_QNetworkReply::ioGetFromHttpWithCache() |
|
2167 { |
|
2168 QFETCH(QByteArray, dataToSend); |
|
2169 MiniHttpServer server(dataToSend); |
|
2170 server.doClose = false; |
|
2171 |
|
2172 MyMemoryCache *memoryCache = new MyMemoryCache(&manager); |
|
2173 manager.setCache(memoryCache); |
|
2174 |
|
2175 QFETCH(MyMemoryCache::CachedContent, cachedReply); |
|
2176 QUrl url = "http://localhost:" + QString::number(server.serverPort()); |
|
2177 cachedReply.first.setUrl(url); |
|
2178 if (!cachedReply.second.isNull()) |
|
2179 memoryCache->cache.insert(url.toEncoded(), cachedReply); |
|
2180 |
|
2181 QFETCH(int, cacheMode); |
|
2182 QNetworkRequest request(url); |
|
2183 request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, cacheMode); |
|
2184 request.setAttribute(QNetworkRequest::CacheSaveControlAttribute, false); |
|
2185 QNetworkReplyPtr reply = manager.get(request); |
|
2186 |
|
2187 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
|
2188 QTestEventLoop::instance().enterLoop(10); |
|
2189 QVERIFY(!QTestEventLoop::instance().timeout()); |
|
2190 |
|
2191 QTEST(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), "loadedFromCache"); |
|
2192 QTEST(server.totalConnections > 0, "networkUsed"); |
|
2193 QFETCH(QString, body); |
|
2194 QCOMPARE(reply->readAll().constData(), qPrintable(body)); |
|
1985 } |
2195 } |
1986 |
2196 |
1987 void tst_QNetworkReply::ioGetWithManyProxies_data() |
2197 void tst_QNetworkReply::ioGetWithManyProxies_data() |
1988 { |
2198 { |
1989 QTest::addColumn<QList<QNetworkProxy> >("proxyList"); |
2199 QTest::addColumn<QList<QNetworkProxy> >("proxyList"); |
2919 |
3129 |
2920 incomingSocket->close(); |
3130 incomingSocket->close(); |
2921 server.close(); |
3131 server.close(); |
2922 } |
3132 } |
2923 |
3133 |
2924 void tst_QNetworkReply::ioPostToHttpEmtpyUploadProgress() |
3134 void tst_QNetworkReply::ioPostToHttpEmptyUploadProgress() |
2925 { |
3135 { |
2926 QByteArray ba; |
3136 QByteArray ba; |
2927 ba.resize(0); |
3137 ba.resize(0); |
2928 QBuffer buffer(&ba,0); |
3138 QBuffer buffer(&ba,0); |
2929 QVERIFY(buffer.open(QIODevice::ReadOnly)); |
3139 QVERIFY(buffer.open(QIODevice::ReadOnly)); |
2967 server.close(); |
3177 server.close(); |
2968 } |
3178 } |
2969 |
3179 |
2970 void tst_QNetworkReply::lastModifiedHeaderForFile() |
3180 void tst_QNetworkReply::lastModifiedHeaderForFile() |
2971 { |
3181 { |
2972 QFileInfo fileInfo(SRCDIR "./bigfile"); |
3182 QFileInfo fileInfo(SRCDIR "/bigfile"); |
3183 QVERIFY(fileInfo.exists()); |
|
3184 |
|
2973 QUrl url = QUrl::fromLocalFile(fileInfo.filePath()); |
3185 QUrl url = QUrl::fromLocalFile(fileInfo.filePath()); |
2974 |
3186 |
2975 QNetworkRequest request(url); |
3187 QNetworkRequest request(url); |
2976 QNetworkReplyPtr reply = manager.head(request); |
3188 QNetworkReplyPtr reply = manager.head(request); |
2977 QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); |
|
2978 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
3189 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
2979 QTestEventLoop::instance().enterLoop(10); |
3190 QTestEventLoop::instance().enterLoop(10); |
2980 QVERIFY(!QTestEventLoop::instance().timeout()); |
3191 QVERIFY(!QTestEventLoop::instance().timeout()); |
2981 |
3192 |
2982 QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); |
3193 QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); |
2988 // Tue, 22 May 2007 12:04:57 GMT according to webserver |
3199 // Tue, 22 May 2007 12:04:57 GMT according to webserver |
2989 QUrl url = "http://" + QtNetworkSettings::serverName() + "/gif/fluke.gif"; |
3200 QUrl url = "http://" + QtNetworkSettings::serverName() + "/gif/fluke.gif"; |
2990 |
3201 |
2991 QNetworkRequest request(url); |
3202 QNetworkRequest request(url); |
2992 QNetworkReplyPtr reply = manager.head(request); |
3203 QNetworkReplyPtr reply = manager.head(request); |
2993 QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); |
|
2994 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
3204 connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); |
2995 QTestEventLoop::instance().enterLoop(10); |
3205 QTestEventLoop::instance().enterLoop(10); |
2996 QVERIFY(!QTestEventLoop::instance().timeout()); |
3206 QVERIFY(!QTestEventLoop::instance().timeout()); |
2997 |
3207 |
2998 QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); |
3208 QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); |