summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@digia.com>2012-11-27 15:57:02 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-08 11:13:27 +0100
commit41acb58f23c78133657d3fb7d126b6df67e8846f (patch)
treea2befa43331981daacecbcd838bad1ddf7b0bffa /tests
parenta36a19365cc4376a2e972efaa49307fd837d4ebf (diff)
Add auto test for HTTP cache fix for QTBUG-28035.
Adds an auto test that verifies that the replies to POST and PUT requests are not cached even though they contain a max-age header and that subsequent GET requests are reloaded from the server. Change-Id: I188ae1200cb5551e164722c0f479719be8d11bfb Reviewed-by: Peter Hartmann <phartmann@rim.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 79193de051..7b98a23d32 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -60,6 +60,7 @@
#include <QtNetwork/QAbstractNetworkCache>
#include <QtNetwork/qauthenticator.h>
#include <QtNetwork/qnetworkaccessmanager.h>
+#include <QtNetwork/qnetworkdiskcache.h>
#include <QtNetwork/qnetworkrequest.h>
#include <QtNetwork/qnetworkreply.h>
#include <QtNetwork/qnetworkcookie.h>
@@ -379,6 +380,8 @@ private Q_SLOTS:
void qtbug27161httpHeaderMayBeDamaged_data();
void qtbug27161httpHeaderMayBeDamaged();
+ void qtbug28035browserDoesNotLoadQtProjectOrgCorrectly();
+
void synchronousRequest_data();
void synchronousRequest();
#ifndef QT_NO_SSL
@@ -510,6 +513,11 @@ public:
}
}
+ void setDataToTransmit(const QByteArray &data)
+ {
+ dataToTransmit = data;
+ }
+
protected:
void incomingConnection(qintptr socketDescriptor)
{
@@ -6516,6 +6524,123 @@ void tst_QNetworkReply::qtbug27161httpHeaderMayBeDamaged(){
QCOMPARE(reply->readAll(), QByteArray("ABC"));
}
+void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
+ QByteArray getReply =
+ "HTTP/1.1 200\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Type: text/plain\r\n"
+ "Cache-control: max-age = 6000\r\n"
+ "\r\n"
+ "GET";
+
+ QByteArray postReply =
+ "HTTP/1.1 200\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Type: text/plain\r\n"
+ "Cache-control: max-age = 6000\r\n"
+ "Content-length: 4\r\n"
+ "\r\n"
+ "POST";
+
+ QByteArray putReply =
+ "HTTP/1.1 201\r\n"
+ "Connection: keep-alive\r\n"
+ "Content-Type: text/plain\r\n"
+ "Cache-control: max-age = 6000\r\n"
+ "\r\n";
+
+ QByteArray postData = "ACT=100";
+
+ QTemporaryDir tempDir(QDir::tempPath() + "/tmp_cache_28035");
+ tempDir.setAutoRemove(true);
+
+ QNetworkDiskCache *diskCache = new QNetworkDiskCache();
+ diskCache->setCacheDirectory(tempDir.path());
+ manager.setCache(diskCache);
+
+ MiniHttpServer server(getReply);
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ server.setDataToTransmit(getReply);
+ reply.reset(manager.get(request));
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
+
+ server.setDataToTransmit(postReply);
+ request.setRawHeader("Content-Type", "text/plain");
+ reply.reset(manager.post(request, postData));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->rawHeader("Content-length"), QByteArray("4"));
+ QCOMPARE(reply->readAll(), QByteArray("POST"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ server.setDataToTransmit(getReply);
+ reply.reset(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ server.setDataToTransmit(getReply);
+ reply.reset(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
+
+ server.setDataToTransmit(putReply);
+ reply.reset(manager.put(request, postData));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ server.setDataToTransmit(getReply);
+ reply.reset(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ server.setDataToTransmit(getReply);
+ reply.reset(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) == Success);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->readAll(), QByteArray("GET"));
+ QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
+}
+
void tst_QNetworkReply::synchronousRequest_data()
{
QTest::addColumn<QUrl>("url");