From 50f8a9578dd54f74e8a5f99481f7f34d969d867f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Fri, 19 Aug 2022 13:23:27 +0200 Subject: QSslServer: Re-enable read notifications when a client times out Otherwise new clients will not be handled when they try to connect Amends 29a1fe72a0888eb1f22a5ae9fe1b3d87257f3246 Pick-to: 6.4 Change-Id: Ifff052d1bf27682df2782faa285a257c9b41d86f Reviewed-by: Konrad Kujawa Reviewed-by: Timur Pocheptsov --- .../auto/network/ssl/qsslserver/tst_qsslserver.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'tests/auto/network') diff --git a/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp index b153d9545e..77a86ceac3 100644 --- a/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp +++ b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp @@ -25,7 +25,7 @@ private slots: #endif void plaintextClient(); void quietClient(); - void manyQuietClients(); + void twoGoodAndManyBadClients(); private: QString testDataDir; @@ -488,22 +488,26 @@ void tst_QSslServer::quietClient() QCOMPARE(serverPeerPort, clientLocalPort); } -void tst_QSslServer::manyQuietClients() +void tst_QSslServer::twoGoodAndManyBadClients() { QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration(); SslServerSpy server(serverConfiguration); + server.server.setHandshakeTimeout(750); constexpr qsizetype ExpectedConnections = 5; server.server.setMaxPendingConnections(ExpectedConnections); QVERIFY(server.server.listen()); + auto connectGoodClient = [&server](QSslSocket *socket) { + QObject::connect(socket, &QSslSocket::sslErrors, socket, + qOverload &>(&QSslSocket::ignoreSslErrors)); + socket->connectToHostEncrypted("127.0.0.1", server.server.serverPort()); + }; // Connect one socket encrypted so we have a socket in the regular queue QSslSocket tlsSocket; - QObject::connect(&tlsSocket, &QSslSocket::sslErrors, &tlsSocket, - qOverload &>(&QSslSocket::ignoreSslErrors)); - tlsSocket.connectToHostEncrypted("127.0.0.1", server.server.serverPort()); + connectGoodClient(&tlsSocket); // Then we connect a bunch of TCP sockets who will not send any data at all - std::array sockets; + std::array sockets; for (QTcpSocket &socket : sockets) socket.connectToHost(QHostAddress::LocalHost, server.server.serverPort()); QTest::qWait(500); // some leeway to let connections try to connect... @@ -514,6 +518,12 @@ void tst_QSslServer::manyQuietClients() QCOMPARE(connectedCount, ExpectedConnections); // 1 socket is ready and pending QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1); + + // Connect another client to make sure that the server is accepting connections again even after + // all the bad actors tried to connect: + QSslSocket goodClient; + connectGoodClient(&goodClient); + QTRY_COMPARE(server.pendingConnectionAvailableSpy.size(), 2); } QTEST_MAIN(tst_QSslServer) -- cgit v1.2.3