diff options
Diffstat (limited to 'tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp')
-rw-r--r-- | tests/auto/websockets/handshakerequest/tst_handshakerequest.cpp | 185 |
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) { |