diff options
author | Aleksey Lysenko <lysenkoalexmail@gmail.com> | 2016-12-30 21:45:11 +0200 |
---|---|---|
committer | Lars Schmertmann <lars.schmertmann@governikus.de> | 2017-01-27 11:15:09 +0000 |
commit | 6ce818a10c5f6fd2314524f5d701e13752e4a662 (patch) | |
tree | 707bfbd9d4985dec30f3210a084f5d1330920d9d /tests/auto | |
parent | dfc91928f15302fa4e6c41802c60caec2c124942 (diff) | |
download | qtwebsockets-6ce818a10c5f6fd2314524f5d701e13752e4a662.tar.gz |
Add a function to hand off a tcp socket to the websocket server
This method allows a listening port to process connections with
different protocols. It lets the websocket server handle a TCP
socket, upgrading it to a websocket
[ChangeLog][QWebSocketServer] Add support to handle external QTcpSocket
Done-with: André Klitzing <aklitzing@gmail.com>
Task-number: QTBUG-54276
Change-Id: Ia36b481dc87d6f3806e9f1e61e75e528640f1937
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp index 7f2bfa4..82e2013 100644 --- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp +++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp @@ -28,6 +28,7 @@ #include <QString> #include <QtTest> #include <QNetworkProxy> +#include <QTcpServer> #ifndef QT_NO_OPENSSL #include <QtNetwork/qsslpresharedkeyauthenticator.h> #include <QtNetwork/qsslcipher.h> @@ -110,6 +111,7 @@ private Q_SLOTS: void tst_maxPendingConnections(); void tst_serverDestroyedWhileSocketConnected(); void tst_scheme(); // qtbug-55927 + void tst_handleConnection(); }; tst_QWebSocketServer::tst_QWebSocketServer() @@ -563,6 +565,38 @@ void tst_QWebSocketServer::tst_scheme() #endif } +void tst_QWebSocketServer::tst_handleConnection() +{ + QWebSocketServer wsServer(QString(), QWebSocketServer::NonSecureMode); + QSignalSpy wsServerConnectionSpy(&wsServer, &QWebSocketServer::newConnection); + + QTcpServer tcpServer; + connect(&tcpServer, &QTcpServer::newConnection, + [&tcpServer, &wsServer]() { + wsServer.handleConnection(tcpServer.nextPendingConnection()); + }); + QVERIFY(tcpServer.listen()); + + QWebSocket webSocket; + QSignalSpy wsConnectedSpy(&webSocket, &QWebSocket::connected); + webSocket.open(QStringLiteral("ws://localhost:%1").arg(tcpServer.serverPort())); + QVERIFY(wsConnectedSpy.wait()); + + if (wsServerConnectionSpy.isEmpty()) + QVERIFY(wsServerConnectionSpy.wait()); + + QScopedPointer<QWebSocket> webServerSocket(wsServer.nextPendingConnection()); + QVERIFY(!webServerSocket.isNull()); + + QSignalSpy wsMessageReceivedSpy(webServerSocket.data(), &QWebSocket::textMessageReceived); + webSocket.sendTextMessage("dummy"); + wsMessageReceivedSpy.wait(); + + QCOMPARE(wsMessageReceivedSpy.count(), 1); + QList<QVariant> arguments = wsMessageReceivedSpy.takeFirst(); + QCOMPARE(arguments.first().toString(), QString("dummy")); +} + QTEST_MAIN(tst_QWebSocketServer) #include "tst_qwebsocketserver.moc" |