summaryrefslogtreecommitdiff
path: root/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp')
-rw-r--r--tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp28
1 files changed, 21 insertions, 7 deletions
diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
index d6dd356..0fda305 100644
--- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
+++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp
@@ -356,20 +356,28 @@ void tst_QWebSocketServer::tst_connectivity()
void tst_QWebSocketServer::tst_protocols_data()
{
QTest::addColumn<QStringList>("clientProtocols");
+ QTest::addColumn<QStringList>("headerProtocols");
QTest::addColumn<QString>("expectedProtocol");
- QTest::addRow("none") << QStringList {} << QString {};
+
+ QTest::addRow("none") << QStringList{} << QStringList{} << QString{};
QTest::addRow("same order as server")
- << QStringList { "chat", "superchat" } << QStringLiteral("chat");
+ << QStringList{ "chat", "superchat" } << QStringList{} << QStringLiteral("chat");
QTest::addRow("different order from server")
- << QStringList { "superchat", "chat" } << QStringLiteral("superchat");
- QTest::addRow("unsupported protocol") << QStringList { "foo" } << QString {};
+ << QStringList{ "superchat", "chat" } << QStringList{} << QStringLiteral("superchat");
+ QTest::addRow("unsupported protocol") << QStringList{ "foo" } << QStringList{} << QString{};
QTest::addRow("mixed supported/unsupported protocol")
- << QStringList { "foo", "chat" } << QStringLiteral("chat");
+ << QStringList{ "foo", "chat" } << QStringList{} << QStringLiteral("chat");
+
+ QTest::addRow("same order as server, in header")
+ << QStringList{} << QStringList{ "chat", "superchat" } << QStringLiteral("chat");
+ QTest::addRow("specified in options and in header")
+ << QStringList{ "superchat" } << QStringList{ "chat" } << QStringLiteral("superchat");
}
void tst_QWebSocketServer::tst_protocols()
{
QFETCH(QStringList, clientProtocols);
+ QFETCH(QStringList, headerProtocols);
QFETCH(QString, expectedProtocol);
QWebSocketServer server(QString(), QWebSocketServer::NonSecureMode);
@@ -380,9 +388,15 @@ void tst_QWebSocketServer::tst_protocols()
QVERIFY(server.listen());
QWebSocketHandshakeOptions opt;
+ QNetworkRequest request(server.serverUrl());
+ if (!headerProtocols.isEmpty()) {
+ QString protocols = headerProtocols.join(u',');
+ request.setRawHeader("Sec-WebSocket-Protocol", protocols.toUtf8());
+ }
opt.setSubprotocols(clientProtocols);
+
QWebSocket client;
- client.open(server.serverUrl(), opt);
+ client.open(request, opt);
QTRY_COMPARE(client.state(), QAbstractSocket::ConnectedState);
QTRY_COMPARE(newConnectionSpy.size(), 1);
@@ -392,7 +406,7 @@ void tst_QWebSocketServer::tst_protocols()
QCOMPARE(client.subprotocol(), expectedProtocol);
QCOMPARE(serverSocket->subprotocol(), expectedProtocol);
- QCOMPARE(serverSocket->handshakeOptions().subprotocols(), clientProtocols);
+ QCOMPARE(serverSocket->handshakeOptions().subprotocols(), clientProtocols + headerProtocols);
}
void tst_QWebSocketServer::tst_preSharedKey()