diff options
author | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:03:47 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:03:47 +0100 |
commit | dfc91928f15302fa4e6c41802c60caec2c124942 (patch) | |
tree | 7c32786f83a45d9d8de8d989e9d54dcc0982d4e5 /tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp | |
parent | a0aec91b676e2b79b8e66091d55d9e128bf2a1d0 (diff) | |
parent | 670266a075c7c312c6a7f9465298bfec0b968ee2 (diff) | |
download | qtwebsockets-dfc91928f15302fa4e6c41802c60caec2c124942.tar.gz |
Merge remote-tracking branch 'origin/5.8' into dev
Conflicts:
.qmake.conf
Change-Id: If50b73b1f1e293269404bd8b38088119a0f59f1f
Diffstat (limited to 'tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp')
-rw-r--r-- | tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp index 699939f..7f2bfa4 100644 --- a/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp +++ b/tests/auto/websockets/qwebsocketserver/tst_qwebsocketserver.cpp @@ -32,6 +32,9 @@ #include <QtNetwork/qsslpresharedkeyauthenticator.h> #include <QtNetwork/qsslcipher.h> #endif +#ifndef QT_NO_SSL +#include <QtNetwork/qsslkey.h> +#endif #include <QtWebSockets/QWebSocketServer> #include <QtWebSockets/QWebSocket> #include <QtWebSockets/QWebSocketCorsAuthenticator> @@ -106,6 +109,7 @@ private Q_SLOTS: void tst_preSharedKey(); void tst_maxPendingConnections(); void tst_serverDestroyedWhileSocketConnected(); + void tst_scheme(); // qtbug-55927 }; tst_QWebSocketServer::tst_QWebSocketServer() @@ -507,6 +511,58 @@ void tst_QWebSocketServer::tst_serverDestroyedWhileSocketConnected() QCOMPARE(socketDisconnectedSpy.count(), 1); } +void tst_QWebSocketServer::tst_scheme() +{ + QWebSocketServer plainServer(QString(), QWebSocketServer::NonSecureMode); + QSignalSpy plainServerConnectionSpy(&plainServer, SIGNAL(newConnection())); + + QVERIFY(plainServer.listen()); + + QWebSocket plainSocket; + plainSocket.open(plainServer.serverUrl().toString()); + + if (plainServerConnectionSpy.count() == 0) + QVERIFY(plainServerConnectionSpy.wait()); + QScopedPointer<QWebSocket> plainServerSocket(plainServer.nextPendingConnection()); + QVERIFY(!plainServerSocket.isNull()); + QCOMPARE(plainServerSocket->requestUrl().scheme(), QStringLiteral("ws")); + plainServer.close(); + +#ifndef QT_NO_SSL + QWebSocketServer secureServer(QString(), QWebSocketServer::SecureMode); + QSslConfiguration sslConfiguration; + QFile certFile(QStringLiteral(":/localhost.cert")); + QFile keyFile(QStringLiteral(":/localhost.key")); + QVERIFY(certFile.open(QIODevice::ReadOnly)); + QVERIFY(keyFile.open(QIODevice::ReadOnly)); + QSslCertificate certificate(&certFile, QSsl::Pem); + QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem); + certFile.close(); + keyFile.close(); + sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone); + sslConfiguration.setLocalCertificate(certificate); + sslConfiguration.setPrivateKey(sslKey); + sslConfiguration.setProtocol(QSsl::TlsV1SslV3); + secureServer.setSslConfiguration(sslConfiguration); + QSignalSpy secureServerConnectionSpy(&secureServer, SIGNAL(newConnection())); + + QVERIFY(secureServer.listen()); + + QWebSocket secureSocket; + typedef void (QWebSocket::* ignoreSslErrorsSlot)(); + connect(&secureSocket, &QWebSocket::sslErrors, + &secureSocket, static_cast<ignoreSslErrorsSlot>(&QWebSocket::ignoreSslErrors)); + secureSocket.open(secureServer.serverUrl().toString()); + + if (secureServerConnectionSpy.count() == 0) + QVERIFY(secureServerConnectionSpy.wait()); + QScopedPointer<QWebSocket> secureServerSocket(secureServer.nextPendingConnection()); + QVERIFY(!secureServerSocket.isNull()); + QCOMPARE(secureServerSocket->requestUrl().scheme(), QStringLiteral("wss")); + secureServer.close(); +#endif +} + QTEST_MAIN(tst_QWebSocketServer) #include "tst_qwebsocketserver.moc" |