diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2009-03-23 09:34:13 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-03-23 09:34:13 (GMT) |
commit | 67ad0519fd165acee4a4d2a94fa502e9e4847bd0 (patch) | |
tree | 1dbf50b3dff8d5ca7e9344733968c72704eb15ff /tests/auto/qabstractnetworkcache | |
download | Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.zip Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.tar.gz Qt-67ad0519fd165acee4a4d2a94fa502e9e4847bd0.tar.bz2 |
Long live Qt!
Diffstat (limited to 'tests/auto/qabstractnetworkcache')
12 files changed, 365 insertions, 0 deletions
diff --git a/tests/auto/qabstractnetworkcache/.gitignore b/tests/auto/qabstractnetworkcache/.gitignore new file mode 100644 index 0000000..72766dd --- /dev/null +++ b/tests/auto/qabstractnetworkcache/.gitignore @@ -0,0 +1 @@ +tst_qabstractnetworkcache diff --git a/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro b/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro new file mode 100644 index 0000000..cffadb0 --- /dev/null +++ b/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro @@ -0,0 +1,10 @@ +load(qttest_p4) +QT += network +SOURCES += tst_qabstractnetworkcache.cpp + +wince*: { + testFiles.sources = tests + testFiles.path = . + DEPLOYMENT += testFiles +} + diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol-expire.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol-expire.cgi new file mode 100644 index 0000000..7dc506f --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol-expire.cgi @@ -0,0 +1,7 @@ +#!/bin/bash +# cache control takes precedence over expires +echo "Cache-Control: max-age=-1" +echo "Expires: Mon, 30 Oct 2028 14:19:41 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol.cgi new file mode 100644 index 0000000..f2edfc1 --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_cachecontrol.cgi @@ -0,0 +1,13 @@ +#!/bin/bash +if [ ! -z ${HTTP_IF_MODIFIED_SINCE} ] ; then + echo "Status: 304" + echo "" + exit; +fi + +cc=`echo "${QUERY_STRING}" | sed -e s/%20/\ /g` +echo "Cache-Control: $cc" +echo "Last-Modified: Sat, 31 Oct 1981 06:00:00 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag200.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag200.cgi new file mode 100644 index 0000000..0966abf --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag200.cgi @@ -0,0 +1,5 @@ +#!/bin/bash +echo "ETag: foo" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag304.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag304.cgi new file mode 100644 index 0000000..91a4b92 --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_etag304.cgi @@ -0,0 +1,11 @@ +#!/bin/bash +if [ ! -z ${HTTP_IF_NONE_MATCH} ] ; then + echo "Status: 304" + echo "" + exit; +fi + +echo "ETag: foo" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires200.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires200.cgi new file mode 100644 index 0000000..e18ebc8 --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires200.cgi @@ -0,0 +1,5 @@ +#!/bin/bash +echo "Expires: Sat, 31 Oct 1981 6:00:00 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires304.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires304.cgi new file mode 100644 index 0000000..1c7de1c --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires304.cgi @@ -0,0 +1,11 @@ +#!/bin/bash +if [ ${HTTP_IF_MODIFIED_SINCE} == "Mon, 30 Oct 2028 14:19:41 GMT" ] ; then + echo "Status: 304" + echo "" + exit; +fi + +echo "Expires: Mon, 30 Oct 2028 14:19:41 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires500.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires500.cgi new file mode 100644 index 0000000..9615c4f --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_expires500.cgi @@ -0,0 +1,11 @@ +#!/bin/bash +if [ ! -z ${HTTP_IF_MODIFIED_SINCE} ] ; then + echo "Status: 500" + echo "" + exit; +fi + +echo "Expires: Mon, 30 Oct 2028 14:19:41 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified200.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified200.cgi new file mode 100644 index 0000000..5dc219b --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified200.cgi @@ -0,0 +1,5 @@ +#!/bin/bash +echo "Last-Modified: Sat, 31 Oct 1981 6:00:00 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified304.cgi b/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified304.cgi new file mode 100644 index 0000000..bdf23be --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tests/httpcachetest_lastModified304.cgi @@ -0,0 +1,11 @@ +#!/bin/bash +if [ ${HTTP_IF_MODIFIED_SINCE} == "Sat, 31 Oct 1981 06:00:00 GMT" ] ; then + echo "Status: 304" + echo "" + exit; +fi + +echo "Last-Modified: Sat, 31 Oct 1981 06:00:00 GMT" +echo "Content-type: text/html"; +echo "" +echo "Hello World!" diff --git a/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp new file mode 100644 index 0000000..d7ee5b7 --- /dev/null +++ b/tests/auto/qabstractnetworkcache/tst_qabstractnetworkcache.cpp @@ -0,0 +1,275 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <QtGui/QtGui> +#include <QtNetwork/QtNetwork> +#include "../../shared/util.h" +#include "../network-settings.h" + +#define TESTFILE QString("http://%1/qtest/cgi-bin/").arg(QtNetworkSettings::serverName()) + +class tst_QAbstractNetworkCache : public QObject +{ + Q_OBJECT + +public: + tst_QAbstractNetworkCache(); + virtual ~tst_QAbstractNetworkCache(); + +private slots: + void expires_data(); + void expires(); + + void lastModified_data(); + void lastModified(); + + void etag_data(); + void etag(); + + void cacheControl_data(); + void cacheControl(); + +private: + void check(); +}; + +class NetworkDiskCache : public QNetworkDiskCache +{ + Q_OBJECT +public: + NetworkDiskCache(QObject *parent = 0) + : QNetworkDiskCache(parent) + , gotData(false) + { + QString location = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + + QLatin1String("/cache/"); + setCacheDirectory(location); + clear(); + } + + QIODevice *data(const QUrl &url) + { + gotData = true; + return QNetworkDiskCache::data(url); + } + + bool gotData; +}; + + +tst_QAbstractNetworkCache::tst_QAbstractNetworkCache() +{ + QCoreApplication::setOrganizationName(QLatin1String("Trolltech")); + QCoreApplication::setApplicationName(QLatin1String("autotest_qabstractnetworkcache")); + QCoreApplication::setApplicationVersion(QLatin1String("1.0")); +} + +tst_QAbstractNetworkCache::~tst_QAbstractNetworkCache() +{ +} + +static bool AlwaysTrue = true; +static bool AlwaysFalse = false; + +Q_DECLARE_METATYPE(QNetworkRequest::CacheLoadControl) + +void tst_QAbstractNetworkCache::expires_data() +{ + QTest::addColumn<QNetworkRequest::CacheLoadControl>("cacheLoadControl"); + QTest::addColumn<QString>("url"); + QTest::addColumn<bool>("fetchFromCache"); + + QTest::newRow("304-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_expires304.cgi" << AlwaysFalse; + QTest::newRow("304-1") << QNetworkRequest::PreferNetwork << "httpcachetest_expires304.cgi" << true; + QTest::newRow("304-2") << QNetworkRequest::AlwaysCache << "httpcachetest_expires304.cgi" << AlwaysTrue; + QTest::newRow("304-3") << QNetworkRequest::PreferCache << "httpcachetest_expires304.cgi" << true; + + QTest::newRow("500-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_expires500.cgi" << AlwaysFalse; + QTest::newRow("500-1") << QNetworkRequest::PreferNetwork << "httpcachetest_expires500.cgi" << true; + QTest::newRow("500-2") << QNetworkRequest::AlwaysCache << "httpcachetest_expires500.cgi" << AlwaysTrue; + QTest::newRow("500-3") << QNetworkRequest::PreferCache << "httpcachetest_expires500.cgi" << true; + + QTest::newRow("200-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_expires200.cgi" << AlwaysFalse; + QTest::newRow("200-1") << QNetworkRequest::PreferNetwork << "httpcachetest_expires200.cgi" << false; + QTest::newRow("200-2") << QNetworkRequest::AlwaysCache << "httpcachetest_expires200.cgi" << AlwaysTrue; + QTest::newRow("200-3") << QNetworkRequest::PreferCache << "httpcachetest_expires200.cgi" << true; +} + +void tst_QAbstractNetworkCache::expires() +{ + check(); +} + +void tst_QAbstractNetworkCache::lastModified_data() +{ + QTest::addColumn<QNetworkRequest::CacheLoadControl>("cacheLoadControl"); + QTest::addColumn<QString>("url"); + QTest::addColumn<bool>("fetchFromCache"); + + QTest::newRow("304-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_lastModified304.cgi" << AlwaysFalse; + QTest::newRow("304-1") << QNetworkRequest::PreferNetwork << "httpcachetest_lastModified304.cgi" << true; + QTest::newRow("304-2") << QNetworkRequest::AlwaysCache << "httpcachetest_lastModified304.cgi" << AlwaysTrue; + QTest::newRow("304-3") << QNetworkRequest::PreferCache << "httpcachetest_lastModified304.cgi" << true; + + QTest::newRow("200-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_lastModified200.cgi" << AlwaysFalse; + QTest::newRow("200-1") << QNetworkRequest::PreferNetwork << "httpcachetest_lastModified200.cgi" << false; + QTest::newRow("200-2") << QNetworkRequest::AlwaysCache << "httpcachetest_lastModified200.cgi" << AlwaysTrue; + QTest::newRow("200-3") << QNetworkRequest::PreferCache << "httpcachetest_lastModified200.cgi" << true; +} + +void tst_QAbstractNetworkCache::lastModified() +{ + check(); +} + +void tst_QAbstractNetworkCache::etag_data() +{ + QTest::addColumn<QNetworkRequest::CacheLoadControl>("cacheLoadControl"); + QTest::addColumn<QString>("url"); + QTest::addColumn<bool>("fetchFromCache"); + + QTest::newRow("304-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_etag304.cgi" << AlwaysFalse; + QTest::newRow("304-1") << QNetworkRequest::PreferNetwork << "httpcachetest_etag304.cgi" << true; + QTest::newRow("304-2") << QNetworkRequest::AlwaysCache << "httpcachetest_etag304.cgi" << AlwaysTrue; + QTest::newRow("304-3") << QNetworkRequest::PreferCache << "httpcachetest_etag304.cgi" << true; + + QTest::newRow("200-0") << QNetworkRequest::AlwaysNetwork << "httpcachetest_etag200.cgi" << AlwaysFalse; + QTest::newRow("200-1") << QNetworkRequest::PreferNetwork << "httpcachetest_etag200.cgi" << false; + QTest::newRow("200-2") << QNetworkRequest::AlwaysCache << "httpcachetest_etag200.cgi" << AlwaysTrue; + QTest::newRow("200-3") << QNetworkRequest::PreferCache << "httpcachetest_etag200.cgi" << true; +} + +void tst_QAbstractNetworkCache::etag() +{ + check(); +} + +void tst_QAbstractNetworkCache::cacheControl_data() +{ + QTest::addColumn<QNetworkRequest::CacheLoadControl>("cacheLoadControl"); + QTest::addColumn<QString>("url"); + QTest::addColumn<bool>("fetchFromCache"); + QTest::newRow("200-0") << QNetworkRequest::PreferNetwork << "httpcachetest_cachecontrol.cgi?max-age=-1" << true; + QTest::newRow("200-1") << QNetworkRequest::PreferNetwork << "httpcachetest_cachecontrol-expire.cgi" << false; + + QTest::newRow("200-2") << QNetworkRequest::AlwaysNetwork << "httpcachetest_cachecontrol.cgi?no-cache" << AlwaysFalse; + QTest::newRow("200-3") << QNetworkRequest::PreferNetwork << "httpcachetest_cachecontrol.cgi?no-cache" << false; + QTest::newRow("200-4") << QNetworkRequest::AlwaysCache << "httpcachetest_cachecontrol.cgi?no-cache" << false;//AlwaysTrue; + QTest::newRow("200-5") << QNetworkRequest::PreferCache << "httpcachetest_cachecontrol.cgi?no-cache" << false; + + QTest::newRow("304-0") << QNetworkRequest::PreferNetwork << "httpcachetest_cachecontrol.cgi?max-age=1000" << true; + + QTest::newRow("304-1") << QNetworkRequest::AlwaysNetwork << "httpcachetest_cachecontrol.cgi?max-age=1000, must-revalidate" << AlwaysFalse; + QTest::newRow("304-2") << QNetworkRequest::PreferNetwork << "httpcachetest_cachecontrol.cgi?max-age=1000, must-revalidate" << true; + QTest::newRow("304-3") << QNetworkRequest::AlwaysCache << "httpcachetest_cachecontrol.cgi?max-age=1000, must-revalidate" << AlwaysTrue; + QTest::newRow("304-4") << QNetworkRequest::PreferCache << "httpcachetest_cachecontrol.cgi?max-age=1000, must-revalidate" << true; +} + +void tst_QAbstractNetworkCache::cacheControl() +{ + check(); +} + +void tst_QAbstractNetworkCache::check() +{ + QFETCH(QNetworkRequest::CacheLoadControl, cacheLoadControl); + QFETCH(QString, url); + QFETCH(bool, fetchFromCache); + + QNetworkAccessManager manager; + NetworkDiskCache *diskCache = new NetworkDiskCache(&manager); + manager.setCache(diskCache); + QCOMPARE(diskCache->gotData, false); + + QNetworkRequest request(QUrl(TESTFILE + url)); + + // prime the cache + QNetworkReply *reply = manager.get(request); + QSignalSpy downloaded1(reply, SIGNAL(finished())); + QTRY_COMPARE(downloaded1.count(), 1); + QCOMPARE(diskCache->gotData, false); + QByteArray goodData = reply->readAll(); + + request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, cacheLoadControl); + + // should be in the cache now + QNetworkReply *reply2 = manager.get(request); + QSignalSpy downloaded2(reply2, SIGNAL(finished())); + QTRY_COMPARE(downloaded2.count(), 1); + + QByteArray secondData = reply2->readAll(); + if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) { + QCOMPARE(reply2->error(), QNetworkReply::ContentNotFoundError); + QCOMPARE(secondData, QByteArray()); + } else { + if (reply2->error() != QNetworkReply::NoError) + qDebug() << reply2->errorString(); + QCOMPARE(reply2->error(), QNetworkReply::NoError); + QCOMPARE(QString(secondData), QString(goodData)); + QCOMPARE(secondData, goodData); + QCOMPARE(reply2->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); + } + + if (fetchFromCache) { + QList<QByteArray> rawHeaderList = reply->rawHeaderList(); + QList<QByteArray> rawHeaderList2 = reply2->rawHeaderList(); + qSort(rawHeaderList); + qSort(rawHeaderList2); + + // headers can change + for (int i = 0; i < rawHeaderList.count(); ++i) { + //qDebug() << i << rawHeaderList.value(i) << reply->rawHeader(rawHeaderList.value(i)); + //qDebug() << i << rawHeaderList2.value(i) << reply2->rawHeader(rawHeaderList2.value(i)); + //QCOMPARE(QString(rawHeaderList.value(i)), QString(rawHeaderList2.value(i))); + //QCOMPARE(QString(reply->rawHeader(rawHeaderList.value(i))), QString(reply2->rawHeader(rawHeaderList2.value(i)))); + } + //QCOMPARE(rawHeaderList.count(), rawHeaderList2.count()); + + } + QCOMPARE(diskCache->gotData, fetchFromCache); +} + + +QTEST_MAIN(tst_QAbstractNetworkCache) +#include "tst_qabstractnetworkcache.moc" + |