summaryrefslogtreecommitdiff
path: root/tests/auto
diff options
context:
space:
mode:
authorAleksey Lysenko <lysenkoalexmail@gmail.com>2016-12-30 21:45:11 +0200
committerLars Schmertmann <lars.schmertmann@governikus.de>2017-01-27 11:15:09 +0000
commit6ce818a10c5f6fd2314524f5d701e13752e4a662 (patch)
tree707bfbd9d4985dec30f3210a084f5d1330920d9d /tests/auto
parentdfc91928f15302fa4e6c41802c60caec2c124942 (diff)
downloadqtwebsockets-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.cpp34
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"