summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Burtsev <kirill.burtsev@qt.io>2020-07-31 16:02:36 +0200
committerKirill Burtsev <kirill.burtsev@qt.io>2020-08-31 10:04:32 +0200
commitcb9e6a7d90035cd50e389f000df1a3103e312af0 (patch)
tree75b5bb8b3bf79c2ec6fc9bbcc88b29d111402d33
parente30208ed4d8c2396f0a9c3330b9aefd6c7c91157 (diff)
Simplify testing with HttpServer
Since reply with 404 for unknown resources is a common pattern in tests, reply with it automatically for unhandled requests Change-Id: Ifd184cf474f1ec311c8654dfbacdd735e33d7c97 Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
-rw-r--r--tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp4
-rw-r--r--tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp7
-rw-r--r--tests/auto/shared/httpreqrep.cpp3
-rw-r--r--tests/auto/shared/httpreqrep.h5
-rw-r--r--tests/auto/shared/httpserver.cpp3
-rw-r--r--tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp58
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp6
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp6
8 files changed, 31 insertions, 61 deletions
diff --git a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
index 8bef29ff7..5290d5373 100644
--- a/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
+++ b/tests/auto/core/qwebenginecookiestore/tst_qwebenginecookiestore.cpp
@@ -260,13 +260,11 @@ void tst_QWebEngineCookieStore::basicFilterOverHTTP()
connect(&httpServer, &HttpServer::newRequest, [&cookieRequestHeader](HttpReqRep *rr) {
if (rr->requestPath().size() <= 1) {
cookieRequestHeader = rr->requestHeader(QByteArrayLiteral("Cookie"));
- rr->setResponseStatus(200);
if (cookieRequestHeader.isEmpty())
rr->setResponseHeader(QByteArrayLiteral("Set-Cookie"), QByteArrayLiteral("Test=test"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
diff --git a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
index 350c15174..aad7a205c 100644
--- a/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
+++ b/tests/auto/core/qwebengineurlrequestinterceptor/tst_qwebengineurlrequestinterceptor.cpp
@@ -203,10 +203,8 @@ private:
QString path = rr->requestPath();
path.remove(0, 1);
- if (rr->requestMethod() != "GET" || !resourceDir.exists(path))
- {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ if (rr->requestMethod() != "GET" || !resourceDir.exists(path)) {
+ rr->sendResponse(404);
return;
}
@@ -663,7 +661,6 @@ void tst_QWebEngineUrlRequestInterceptor::passRefererHeader()
const QByteArray headerValue = rr->requestHeader(kHttpHeaderRefererName);
QCOMPARE(headerValue, kHttpHeaderReferrerValue);
succeeded = headerValue == kHttpHeaderReferrerValue;
- rr->setResponseStatus(200);
rr->sendResponse();
});
diff --git a/tests/auto/shared/httpreqrep.cpp b/tests/auto/shared/httpreqrep.cpp
index b1b6a0a04..96279bbc0 100644
--- a/tests/auto/shared/httpreqrep.cpp
+++ b/tests/auto/shared/httpreqrep.cpp
@@ -35,10 +35,11 @@ HttpReqRep::HttpReqRep(QTcpSocket *socket, QObject *parent)
connect(m_socket, &QTcpSocket::disconnected, this, &HttpReqRep::handleDisconnected);
}
-void HttpReqRep::sendResponse()
+void HttpReqRep::sendResponse(int statusCode)
{
if (m_state != State::REQUEST_RECEIVED)
return;
+ m_responseStatusCode = statusCode;
m_socket->write("HTTP/1.1 ");
m_socket->write(QByteArray::number(m_responseStatusCode));
m_socket->write(" OK?\r\n");
diff --git a/tests/auto/shared/httpreqrep.h b/tests/auto/shared/httpreqrep.h
index 1666b17d0..84ada0160 100644
--- a/tests/auto/shared/httpreqrep.h
+++ b/tests/auto/shared/httpreqrep.h
@@ -40,8 +40,9 @@ class HttpReqRep : public QObject
public:
explicit HttpReqRep(QTcpSocket *socket, QObject *parent = nullptr);
- Q_INVOKABLE void sendResponse();
+ Q_INVOKABLE void sendResponse(int statusCode = 200);
void close();
+ bool isClosed() const { return m_state == State::DISCONNECTED; }
// Request parameters (only valid after requestReceived())
@@ -99,7 +100,7 @@ private:
QByteArray m_requestMethod;
QByteArray m_requestPath;
std::map<QByteArray, QByteArray> m_requestHeaders;
- int m_responseStatusCode = 200;
+ int m_responseStatusCode = -1;
std::map<QByteArray, QByteArray> m_responseHeaders;
QByteArray m_responseBody;
};
diff --git a/tests/auto/shared/httpserver.cpp b/tests/auto/shared/httpserver.cpp
index e282fc8b8..c93d30706 100644
--- a/tests/auto/shared/httpserver.cpp
+++ b/tests/auto/shared/httpserver.cpp
@@ -85,7 +85,8 @@ void HttpServer::handleNewConnection()
auto rr = new HttpReqRep(m_tcpServer->nextPendingConnection(), this);
connect(rr, &HttpReqRep::requestReceived, [this, rr]() {
Q_EMIT newRequest(rr);
- rr->close();
+ if (!rr->isClosed())
+ rr->sendResponse(404);
});
connect(rr, &HttpReqRep::responseSent, [rr]() {
qCInfo(gHttpServerLog).noquote() << rr->requestMethod() << rr->requestPath()
diff --git a/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp b/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp
index 39948c211..81329338c 100644
--- a/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp
+++ b/tests/auto/widgets/qwebenginedownloaditem/tst_qwebenginedownloaditem.cpp
@@ -440,8 +440,7 @@ void tst_QWebEngineDownloadItem::downloadLink()
rr->setResponseBody(fileContents);
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -561,9 +560,6 @@ void tst_QWebEngineDownloadItem::downloadTwoLinks()
rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment"));
rr->setResponseBody(QByteArrayLiteral("file2"));
rr->sendResponse();
- } else {
- rr->setResponseStatus(404);
- rr->sendResponse();
}
});
@@ -644,9 +640,6 @@ void tst_QWebEngineDownloadItem::downloadPage()
rr->setResponseHeader(QByteArrayLiteral("content-type"), QByteArrayLiteral("text/html"));
rr->setResponseBody(QByteArrayLiteral("<html><body>Hello</body></html>"));
rr->sendResponse();
- } else {
- rr->setResponseStatus(404);
- rr->sendResponse();
}
});
@@ -735,9 +728,6 @@ void tst_QWebEngineDownloadItem::downloadViaSetUrl()
rr->setResponseHeader(QByteArrayLiteral("content-disposition"), QByteArrayLiteral("attachment"));
rr->setResponseBody(QByteArrayLiteral("redacted"));
rr->sendResponse();
- } else {
- rr->setResponseStatus(404);
- rr->sendResponse();
}
});
@@ -779,8 +769,7 @@ void tst_QWebEngineDownloadItem::downloadFileNot1()
// Trigger file download via download() but don't accept().
ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
});
QPointer<QWebEngineDownloadItem> downloadItem;
@@ -802,8 +791,7 @@ void tst_QWebEngineDownloadItem::downloadFileNot2()
// Trigger file download via download() but call cancel() instead of accept().
ScopedConnection sc1 = connect(m_server, &HttpServer::newRequest, [&](HttpReqRep *rr) {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
});
QPointer<QWebEngineDownloadItem> downloadItem;
@@ -825,32 +813,30 @@ void tst_QWebEngineDownloadItem::downloadFileNot2()
void tst_QWebEngineDownloadItem::downloadDeleted()
{
QPointer<QWebEngineDownloadItem> downloadItem;
- m_server->setExpectError(true);
- int downloadCount = 0;
- int finishedCount = 0;
+ int downloadCount = 0, finishedCount = 0;
+
ScopedConnection sc2 = connect(m_profile, &QWebEngineProfile::downloadRequested, [&](QWebEngineDownloadItem *item) {
QVERIFY(item);
QCOMPARE(item->state(), QWebEngineDownloadItem::DownloadRequested);
downloadItem = item;
- connect(downloadItem, &QWebEngineDownloadItem::finished, [&]() {
- finishedCount++;
- });
+ connect(downloadItem, &QWebEngineDownloadItem::finished, [&]() { ++finishedCount; });
+ ++downloadCount;
+ // accept and schedule deletion, and check if it still finishes
item->accept();
- downloadCount++;
+ item->deleteLater();
+ QVERIFY(downloadItem);
});
m_page->download(m_server->url(QByteArrayLiteral("/file")));
QTRY_COMPARE(downloadCount, 1);
- QVERIFY(downloadItem);
- QCOMPARE(finishedCount, 0);
- downloadItem->deleteLater();
QTRY_COMPARE(finishedCount, 1);
+ QTRY_VERIFY(!downloadItem);
+ QCOMPARE(downloadCount, 1);
+ QCOMPARE(finishedCount, 1);
}
void tst_QWebEngineDownloadItem::downloadDeletedByProfile()
{
- m_server->setExpectError(true);
-
QPointer<QWebEngineProfile> profile(new QWebEngineProfile);
profile->setHttpCacheType(QWebEngineProfile::NoCache);
profile->settings()->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, false);
@@ -908,8 +894,7 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilename()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -966,8 +951,7 @@ void tst_QWebEngineDownloadItem::downloadUniqueFilenameWithTimestamp()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -1062,8 +1046,7 @@ void tst_QWebEngineDownloadItem::downloadToNonExistentDir()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -1119,8 +1102,7 @@ void tst_QWebEngineDownloadItem::downloadToReadOnlyDir()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -1174,8 +1156,7 @@ void tst_QWebEngineDownloadItem::downloadPathValidation()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
@@ -1306,8 +1287,7 @@ void tst_QWebEngineDownloadItem::downloadToDirectoryWithFileName()
rr->setResponseBody(QByteArrayLiteral("a"));
rr->sendResponse();
} else {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ rr->sendResponse(404);
}
});
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index a3c45918b..99c749392 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -2257,9 +2257,6 @@ void tst_QWebEnginePage::setHtmlWithModuleImport()
"}\n");
rr->setResponseHeader("Content-Type", "text/javascript");
rr->sendResponse();
- } else {
- rr->setResponseStatus(404);
- rr->sendResponse();
}
});
QVERIFY(server.start());
@@ -3264,9 +3261,6 @@ void tst_QWebEnginePage::registerProtocolHandler()
} else if (rr->requestMethod() == "GET" && rr->requestPath() == "/mail?uri=mailto%3Afoo%40bar.com") {
mailRequestCount++;
rr->sendResponse();
- } else {
- rr->setResponseStatus(404);
- rr->sendResponse();
}
});
QVERIFY(server.start());
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index 836f1885e..f4c0484eb 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -202,10 +202,8 @@ private:
QString path = rr->requestPath();
path.remove(0, 1);
- if (rr->requestMethod() != "GET" || !resourceDir.exists(path))
- {
- rr->setResponseStatus(404);
- rr->sendResponse();
+ if (rr->requestMethod() != "GET" || !resourceDir.exists(path)) {
+ rr->sendResponse(404);
return;
}