From 6ce818a10c5f6fd2314524f5d701e13752e4a662 Mon Sep 17 00:00:00 2001 From: Aleksey Lysenko Date: Fri, 30 Dec 2016 21:45:11 +0200 Subject: Add a function to hand off a tcp socket to the websocket server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Task-number: QTBUG-54276 Change-Id: Ia36b481dc87d6f3806e9f1e61e75e528640f1937 Reviewed-by: Timur Pocheptsov --- .../qwebsocketserver/tst_qwebsocketserver.cpp | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'tests/auto') 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 #include #include +#include #ifndef QT_NO_OPENSSL #include #include @@ -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 webServerSocket(wsServer.nextPendingConnection()); + QVERIFY(!webServerSocket.isNull()); + + QSignalSpy wsMessageReceivedSpy(webServerSocket.data(), &QWebSocket::textMessageReceived); + webSocket.sendTextMessage("dummy"); + wsMessageReceivedSpy.wait(); + + QCOMPARE(wsMessageReceivedSpy.count(), 1); + QList arguments = wsMessageReceivedSpy.takeFirst(); + QCOMPARE(arguments.first().toString(), QString("dummy")); +} + QTEST_MAIN(tst_QWebSocketServer) #include "tst_qwebsocketserver.moc" -- cgit v1.2.1