summaryrefslogtreecommitdiff
path: root/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp')
-rw-r--r--tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp185
1 files changed, 74 insertions, 111 deletions
diff --git a/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp b/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
index 230b052..1c0da5c 100644
--- a/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
+++ b/tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Kurt Pattyn <pattyn.kurt@gmail.com>.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 Kurt Pattyn <pattyn.kurt@gmail.com>.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QtTest/QtTest>
#include <QtTest/qtestcase.h>
#include <QtCore/QDebug>
@@ -100,30 +75,30 @@ void tst_HandshakeRequest::tst_initialization()
QCOMPARE(request.port(), 0);
QVERIFY(!request.isSecure());
QVERIFY(!request.isValid());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 0);
QCOMPARE(request.headers().size(), 0);
- QCOMPARE(request.key().length(), 0);
- QCOMPARE(request.origin().length(), 0);
- QCOMPARE(request.host().length(), 0);
+ QCOMPARE(request.key().size(), 0);
+ QCOMPARE(request.origin().size(), 0);
+ QCOMPARE(request.host().size(), 0);
QVERIFY(request.requestUrl().isEmpty());
- QCOMPARE(request.resourceName().length(), 0);
- QCOMPARE(request.versions().length(), 0);
+ QCOMPARE(request.resourceName().size(), 0);
+ QCOMPARE(request.versions().size(), 0);
}
{
QWebSocketHandshakeRequest request(80, true);
QCOMPARE(request.port(), 80);
QVERIFY(request.isSecure());
QVERIFY(!request.isValid());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 0);
QCOMPARE(request.headers().size(), 0);
- QCOMPARE(request.key().length(), 0);
- QCOMPARE(request.origin().length(), 0);
- QCOMPARE(request.host().length(), 0);
+ QCOMPARE(request.key().size(), 0);
+ QCOMPARE(request.origin().size(), 0);
+ QCOMPARE(request.host().size(), 0);
QVERIFY(request.requestUrl().isEmpty());
- QCOMPARE(request.resourceName().length(), 0);
- QCOMPARE(request.versions().length(), 0);
+ QCOMPARE(request.resourceName().size(), 0);
+ QCOMPARE(request.versions().size(), 0);
}
{
QWebSocketHandshakeRequest request(80, true);
@@ -131,15 +106,15 @@ void tst_HandshakeRequest::tst_initialization()
QCOMPARE(request.port(), 80);
QVERIFY(request.isSecure());
QVERIFY(!request.isValid());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 0);
QCOMPARE(request.headers().size(), 0);
- QCOMPARE(request.key().length(), 0);
- QCOMPARE(request.origin().length(), 0);
- QCOMPARE(request.host().length(), 0);
+ QCOMPARE(request.key().size(), 0);
+ QCOMPARE(request.origin().size(), 0);
+ QCOMPARE(request.host().size(), 0);
QVERIFY(request.requestUrl().isEmpty());
- QCOMPARE(request.resourceName().length(), 0);
- QCOMPARE(request.versions().length(), 0);
+ QCOMPARE(request.resourceName().size(), 0);
+ QCOMPARE(request.versions().size(), 0);
}
}
@@ -213,25 +188,22 @@ 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);
QVERIFY(request.isSecure());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 0);
QCOMPARE(request.headers().size(), 0);
- QCOMPARE(request.key().length(), 0);
- QCOMPARE(request.origin().length(), 0);
- QCOMPARE(request.host().length(), 0);
+ QCOMPARE(request.key().size(), 0);
+ QCOMPARE(request.origin().size(), 0);
+ QCOMPARE(request.host().size(), 0);
QVERIFY(request.requestUrl().isEmpty());
- QCOMPARE(request.resourceName().length(), 0);
- QCOMPARE(request.versions().length(), 0);
+ QCOMPARE(request.resourceName().size(), 0);
+ QCOMPARE(request.versions().size(), 0);
}
/*
@@ -249,25 +221,22 @@ 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);
QVERIFY(!request.isSecure());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 0);
QCOMPARE(request.headers().size(), 5);
- QCOMPARE(request.key().length(), 9);
- QCOMPARE(request.origin().length(), 0);
+ QCOMPARE(request.key().size(), 9);
+ QCOMPARE(request.origin().size(), 0);
QCOMPARE(request.requestUrl(), QUrl("ws://foo.com/test"));
QCOMPARE(request.host(), QStringLiteral("foo.com"));
- QCOMPARE(request.resourceName().length(), 5);
- QCOMPARE(request.versions().length(), 1);
+ QCOMPARE(request.resourceName().size(), 5);
+ QCOMPARE(request.versions().size(), 1);
QCOMPARE(request.versions().at(0), QWebSocketProtocol::Version13);
}
@@ -286,16 +255,13 @@ 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"));
- QCOMPARE(request.versions().length(), 1);
+ QCOMPARE(request.versions().size(), 1);
QCOMPARE(request.versions().at(0), QWebSocketProtocol::Version13);
}
@@ -307,30 +273,27 @@ 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);
QVERIFY(!request.isSecure());
- QCOMPARE(request.extensions().length(), 0);
- QCOMPARE(request.protocols().length(), 0);
+ QCOMPARE(request.extensions().size(), 0);
+ QCOMPARE(request.protocols().size(), 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.origin().size(), 0);
QCOMPARE(request.requestUrl(), QUrl("ws://foo.com/test"));
QCOMPARE(request.host(), QStringLiteral("foo.com"));
- QCOMPARE(request.resourceName().length(), 5);
- QCOMPARE(request.versions().length(), 6);
+ QCOMPARE(request.resourceName().size(), 5);
+ QCOMPARE(request.versions().size(), 6);
//should be 13 since the list is ordered in decreasing order
QCOMPARE(request.versions().at(0), QWebSocketProtocol::Version13);
}
@@ -343,12 +306,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,17 +326,26 @@ 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: ");
legalHeader.append(headerKey);
- legalHeader.append(QString(MAX_HEADERLINE_LENGTH - headerKey.length(), QLatin1Char('c')));
+ legalHeader.append(QString(MAX_HEADERLINE_LENGTH - headerKey.size(), QLatin1Char('c')));
legalHeader.append(QStringLiteral("\r\n\r\n"));
QTest::newRow("headerline with maximum length") << legalHeader << true;
@@ -408,12 +377,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 +470,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) {