aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorØystein Heskestad <oystein.heskestad@qt.io>2021-11-11 11:26:32 +0100
committerØystein Heskestad <oystein.heskestad@qt.io>2021-12-09 17:56:53 +0100
commit8341a3f435cdbcdda25d67f504ca630d285faa63 (patch)
tree0ef4ea7911b36a0ea5112231d0e9fdfab4bb1dbf /tests
parentcb7abc7ac0f19e0076a3927b0dd880606c6f92f6 (diff)
Reuse qtbase's HTTP header parser to avoid a reinvented wheel
Fixes: QTBUG-80700 Change-Id: I7b713fd869ac802d5eee8ebb8d90a2115365b509 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/websockets/handshakerequest/CMakeLists.txt2
-rw-r--r--tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp74
-rw-r--r--tests/auto/websockets/handshakeresponse/CMakeLists.txt2
-rw-r--r--tests/auto/websockets/handshakeresponse/tst_handshakeresponse.cpp12
4 files changed, 40 insertions, 50 deletions
diff --git a/tests/auto/websockets/handshakerequest/CMakeLists.txt b/tests/auto/websockets/handshakerequest/CMakeLists.txt
index 984f454..3714ef9 100644
--- a/tests/auto/websockets/handshakerequest/CMakeLists.txt
+++ b/tests/auto/websockets/handshakerequest/CMakeLists.txt
@@ -11,6 +11,8 @@ endif()
qt_internal_add_test(tst_handshakerequest
SOURCES
tst_handshakerequest.cpp
+ LIBRARIES
+ Qt::NetworkPrivate
PUBLIC_LIBRARIES
Qt::WebSocketsPrivate
)
diff --git a/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp b/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
index 230b052..a91f9cb 100644
--- a/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
+++ b/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
@@ -213,12 +213,9 @@ void tst_HandshakeRequest::tst_invalidStream()
QFETCH(QString, dataStream);
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << dataStream;
QWebSocketHandshakeRequest request(80, true);
-
- textStream << dataStream;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QVERIFY(!request.isValid());
QCOMPARE(request.port(), 80);
@@ -249,12 +246,9 @@ void tst_HandshakeRequest::tst_multipleValuesInConnectionHeader()
QStringLiteral("Upgrade: websocket\r\n") +
QStringLiteral("Connection: Upgrade,keepalive\r\n\r\n");
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(80, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QVERIFY(request.isValid());
QCOMPARE(request.port(), 80);
@@ -286,12 +280,9 @@ void tst_HandshakeRequest::tst_parsingWhitespaceInHeaders()
QStringLiteral("Upgrade:websocket \r\n") +
QStringLiteral("Connection: Upgrade,keepalive\r\n\r\n");
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(80, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QVERIFY(request.isValid());
QCOMPARE(request.key(), QStringLiteral("AVD FBDDFF"));
@@ -307,12 +298,9 @@ void tst_HandshakeRequest::tst_multipleVersions()
QStringLiteral("Upgrade: websocket\r\n") +
QStringLiteral("Connection: Upgrade,keepalive\r\n\r\n");
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(80, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QVERIFY(request.isValid());
QCOMPARE(request.port(), 80);
@@ -320,11 +308,11 @@ void tst_HandshakeRequest::tst_multipleVersions()
QCOMPARE(request.extensions().length(), 0);
QCOMPARE(request.protocols().length(), 0);
QCOMPARE(request.headers().size(), 5);
- QVERIFY(request.headers().contains(QStringLiteral("host")));
- QVERIFY(request.headers().contains(QStringLiteral("sec-websocket-version")));
- QVERIFY(request.headers().contains(QStringLiteral("sec-websocket-key")));
- QVERIFY(request.headers().contains(QStringLiteral("upgrade")));
- QVERIFY(request.headers().contains(QStringLiteral("connection")));
+ QVERIFY(request.hasHeader("host"));
+ QVERIFY(request.hasHeader("sec-websocket-version"));
+ QVERIFY(request.hasHeader("sec-websocket-key"));
+ QVERIFY(request.hasHeader("upgrade"));
+ QVERIFY(request.hasHeader("connection"));
QCOMPARE(request.key(), QStringLiteral("AVDFBDDFF"));
QCOMPARE(request.origin().length(), 0);
QCOMPARE(request.requestUrl(), QUrl("ws://foo.com/test"));
@@ -343,12 +331,9 @@ void tst_HandshakeRequest::tst_qtbug_39355()
QStringLiteral("Upgrade: websocket\r\n") +
QStringLiteral("Connection: Upgrade\r\n\r\n");
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(8080, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QVERIFY(request.isValid());
QCOMPARE(request.port(), 1234);
@@ -366,12 +351,21 @@ void tst_HandshakeRequest::tst_qtbug_48123_data()
QStringLiteral("Connection: Upgrade\r\n");
const int numHeaderLines = header.count(QStringLiteral("\r\n")) - 1; //-1: exclude requestline
- //a headerline should not be larger than MAX_HEADERLINE_LENGTH characters (excluding CRLF)
+ // a headerline must contain colon
QString illegalHeader = header;
- illegalHeader.append(QString(MAX_HEADERLINE_LENGTH + 1, QLatin1Char('c')));
+ illegalHeader.append(QString(MAX_HEADERLINE_LENGTH, QLatin1Char('c')));
illegalHeader.append(QStringLiteral("\r\n\r\n"));
- QTest::newRow("headerline too long") << illegalHeader << false;
+ QTest::newRow("headerline missing colon") << illegalHeader << false;
+
+ // a headerline should not be larger than MAX_HEADERLINE_LENGTH characters (excluding CRLF)
+ QString tooLongHeader = header;
+ QString fieldName = "Too-long: ";
+ tooLongHeader.append(fieldName);
+ tooLongHeader.append(QString(MAX_HEADERLINE_LENGTH + 1 - fieldName.size(), QLatin1Char('c')));
+ tooLongHeader.append(QStringLiteral("\r\n\r\n"));
+
+ QTest::newRow("headerline too long") << tooLongHeader << false;
QString legalHeader = header;
const QString headerKey = QStringLiteral("X-CUSTOM-KEY: ");
@@ -408,12 +402,9 @@ void tst_HandshakeRequest::tst_qtbug_48123()
QFETCH(bool, shouldBeValid);
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(8080, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QCOMPARE(request.isValid(), shouldBeValid);
}
@@ -504,12 +495,9 @@ void tst_HandshakeRequest::tst_qtbug_57357()
QFETCH(int, port);
QByteArray data;
- QTextStream textStream(&data);
+ QTextStream(&data) << header;
QWebSocketHandshakeRequest request(8080, false);
-
- textStream << header;
- textStream.seek(0);
- request.readHandshake(textStream, MAX_HEADERLINE_LENGTH, MAX_HEADERS);
+ request.readHandshake(data, MAX_HEADERLINE_LENGTH);
QCOMPARE(request.isValid(), valid);
if (valid) {
diff --git a/tests/auto/websockets/handshakeresponse/CMakeLists.txt b/tests/auto/websockets/handshakeresponse/CMakeLists.txt
index 0eac850..1562519 100644
--- a/tests/auto/websockets/handshakeresponse/CMakeLists.txt
+++ b/tests/auto/websockets/handshakeresponse/CMakeLists.txt
@@ -11,6 +11,8 @@ endif()
qt_internal_add_test(tst_handshakeresponse
SOURCES
tst_handshakeresponse.cpp
+ LIBRARIES
+ Qt::NetworkPrivate
PUBLIC_LIBRARIES
Qt::WebSocketsPrivate
)
diff --git a/tests/auto/websockets/handshakeresponse/tst_handshakeresponse.cpp b/tests/auto/websockets/handshakeresponse/tst_handshakeresponse.cpp
index 9a7c590..436681b 100644
--- a/tests/auto/websockets/handshakeresponse/tst_handshakeresponse.cpp
+++ b/tests/auto/websockets/handshakeresponse/tst_handshakeresponse.cpp
@@ -81,13 +81,11 @@ void tst_HandshakeResponse::cleanup()
void tst_HandshakeResponse::tst_date_response()
{
QWebSocketHandshakeRequest request(80, false);
- QString buffer;
- QTextStream input(&buffer);
- input << QStringLiteral("GET / HTTP/1.1\r\nHost: example.com\r\nSec-WebSocket-Version: 13\r\n") +
- QStringLiteral("Sec-WebSocket-Key: AVDFBDDFF\r\n") +
- QStringLiteral("Upgrade: websocket\r\n") +
- QStringLiteral("Connection: Upgrade\r\n\r\n");
- request.readHandshake(input, 8 * 1024, 100);
+ QByteArray bytes = "GET / HTTP/1.1\r\nHost: example.com\r\nSec-WebSocket-Version: 13\r\n"
+ "Sec-WebSocket-Key: AVDFBDDFF\r\n"
+ "Upgrade: websocket\r\n"
+ "Connection: Upgrade\r\n\r\n";
+ request.readHandshake(bytes, 8 * 1024);
QWebSocketHandshakeResponse response(request, "example.com", true,
QList<QWebSocketProtocol::Version>() << QWebSocketProtocol::Version13,