summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp')
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
index 5dffe68386..8b509024e9 100644
--- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
+++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
@@ -41,8 +41,13 @@
#include <QtTest/QtTest>
+#include <QtCore/QJsonArray>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonValue>
#include <QtNetwork/QNetworkCookieJar>
#include <QtNetwork/QNetworkCookie>
+#include <QtNetwork/QNetworkRequest>
#include "private/qtldurl_p.h"
class tst_QNetworkCookieJar: public QObject
@@ -59,6 +64,8 @@ private slots:
void effectiveTLDs_data();
void effectiveTLDs();
#endif
+ void rfc6265_data();
+ void rfc6265();
};
QT_BEGIN_NAMESPACE
@@ -456,6 +463,92 @@ void tst_QNetworkCookieJar::effectiveTLDs()
}
#endif
+void tst_QNetworkCookieJar::rfc6265_data()
+{
+ QTest::addColumn<QStringList>("received");
+ QTest::addColumn<QList<QNetworkCookie> >("sent");
+ QTest::addColumn<QString>("sentTo");
+
+ QFile file(QFINDTESTDATA("parser.json"));
+ QVERIFY(file.open(QFile::ReadOnly | QFile::Text));
+ QJsonDocument document;
+ document = QJsonDocument::fromJson(file.readAll());
+ QVERIFY(!document.isNull());
+ QVERIFY(document.isArray());
+
+ foreach (const QJsonValue& testCase, document.array()) {
+ QJsonObject testObject = testCase.toObject();
+
+ //"test" - the test case name
+ QString testCaseName = testObject.value("test").toString();
+ if (testCaseName.toLower().startsWith("disabled"))
+ continue;
+
+ //"received" - the cookies received from the server
+ QJsonArray received = testObject.value("received").toArray();
+ QStringList receivedList;
+ foreach (const QJsonValue& receivedCookie, received)
+ receivedList.append(receivedCookie.toString());
+
+ //"sent" - the cookies sent back to the server
+ QJsonArray sent = testObject.value("sent").toArray();
+ QList<QNetworkCookie> sentList;
+ foreach (const QJsonValue& sentCookie, sent) {
+ QJsonObject sentCookieObject = sentCookie.toObject();
+ QNetworkCookie cookie;
+ cookie.setName(sentCookieObject.value("name").toString().toUtf8());
+ cookie.setValue(sentCookieObject.value("value").toString().toUtf8());
+ sentList.append(cookie);
+ }
+
+ //"sent-to" - the relative url where cookies are sent
+ QTest::newRow(qPrintable(testCaseName)) << receivedList << sentList << testObject.value("sent-to").toString();
+ }
+}
+
+void tst_QNetworkCookieJar::rfc6265()
+{
+ QFETCH(QStringList, received);
+ QFETCH(QList<QNetworkCookie>, sent);
+ QFETCH(QString, sentTo);
+
+ QUrl receivedUrl("http://home.example.org:8888/cookie-parser");
+ QUrl sentUrl("http://home.example.org:8888/cookie-parser-result");
+ if (!sentTo.isEmpty())
+ sentUrl = receivedUrl.resolved(sentTo);
+
+ QNetworkCookieJar jar;
+ QList<QNetworkCookie> receivedCookies;
+ foreach (const QString &cookieLine, received)
+ receivedCookies.append(QNetworkCookie::parseCookies(cookieLine.toUtf8()));
+
+ jar.setCookiesFromUrl(receivedCookies, receivedUrl);
+ QList<QNetworkCookie> cookiesToSend = jar.cookiesForUrl(sentUrl);
+
+ //compare cookies only using name/value, as the metadata isn't sent over the network
+ QCOMPARE(cookiesToSend.count(), sent.count());
+ bool ok = true;
+ for (int i = 0; i < cookiesToSend.count(); i++) {
+ if (cookiesToSend.at(i).name() != sent.at(i).name()) {
+ ok = false;
+ break;
+ }
+ if (cookiesToSend.at(i).value() != sent.at(i).value()) {
+ ok = false;
+ break;
+ }
+ }
+ if (!ok) {
+ QNetworkRequest r(sentUrl);
+ r.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookiesToSend));
+ QString actual = QString::fromUtf8(r.rawHeader("Cookie"));
+ r.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(sent));
+ QString expected = QString::fromUtf8(r.rawHeader("Cookie"));
+
+ QVERIFY2(ok, qPrintable(QString("Expected: %1\nActual: %2").arg(expected).arg(actual)));
+ }
+}
+
QTEST_MAIN(tst_QNetworkCookieJar)
#include "tst_qnetworkcookiejar.moc"