diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2017-10-04 12:31:38 +0200 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2017-10-10 07:06:24 +0000 |
commit | a402b3a02e129702b1606a445affdba67ab9f805 (patch) | |
tree | 3f05cbc28a61a443b753fd96007cb206b9b9106b /tests | |
parent | d20aa0d50d6dfc2dc1b88cc912425a28df6437de (diff) |
Add support for HTTP status 308 Permanent Redirect
308 Permanent Redirect was introduced after redirection support was
initially added to Qt.
[ChangeLog][QtNetwork][QNetworkAccessManager] Added support for HTTP status 308.
Task-number: QTBUG-63075
Change-Id: I1c6cda331d776237113ef8854de9abfe7e41ed3e
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 542246ff2d..16f06b2d15 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -488,6 +488,8 @@ private Q_SLOTS: void ioHttpUserVerifiedRedirect_data(); void ioHttpUserVerifiedRedirect(); void ioHttpCookiesDuringRedirect(); + void ioHttpRedirect_data(); + void ioHttpRedirect(); #ifndef QT_NO_SSL void putWithServerClosingConnectionImmediately(); #endif @@ -8438,6 +8440,44 @@ void tst_QNetworkReply::ioHttpCookiesDuringRedirect() QVERIFY(target.receivedData.contains("\r\nCookie: hello=world\r\n")); } +void tst_QNetworkReply::ioHttpRedirect_data() +{ + QTest::addColumn<QString>("status"); + + QTest::addRow("301") << "301 Moved Permanently"; + QTest::addRow("302") << "302 Found"; + QTest::addRow("303") << "303 See Other"; + QTest::addRow("305") << "305 Use Proxy"; + QTest::addRow("307") << "307 Temporary Redirect"; + QTest::addRow("308") << "308 Permanent Redirect"; +} + +void tst_QNetworkReply::ioHttpRedirect() +{ + QFETCH(QString, status); + + MiniHttpServer target(httpEmpty200Response, false); + QUrl targetUrl("http://localhost/"); + targetUrl.setPort(target.serverPort()); + + QString redirectReply = QStringLiteral("HTTP/1.1 %1\r\n" + "Content-Type: text/plain\r\n" + "location: %2\r\n" + "\r\n").arg(status, targetUrl.toString()); + MiniHttpServer redirectServer(redirectReply.toLatin1(), false); + QUrl url("http://localhost/"); + url.setPort(redirectServer.serverPort()); + QNetworkRequest request(url); + auto oldRedirectPolicy = manager.redirectPolicy(); + manager.setRedirectPolicy(QNetworkRequest::RedirectPolicy::NoLessSafeRedirectPolicy); + QNetworkReplyPtr reply(manager.get(request)); + // Set policy back to what it was + manager.setRedirectPolicy(oldRedirectPolicy); + + QCOMPARE(waitForFinish(reply), int(Success)); + QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); +} + #ifndef QT_NO_SSL class PutWithServerClosingConnectionImmediatelyHandler: public QObject |