summaryrefslogtreecommitdiffstats
path: root/tests/auto/network/ssl
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2022-08-16 15:51:10 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2022-08-17 21:55:19 +0200
commit1ee75e47401d0ed4646d4fef7ce8e09eb90f4d5e (patch)
tree2e37ee0c069792204700950eba9f3e55e848c1dd /tests/auto/network/ssl
parent29a1fe72a0888eb1f22a5ae9fe1b3d87257f3246 (diff)
QSslServer: Make sure maxPendingConnections applies to all sockets
Not just the ones we added to the pending sockets list Pick-to: 6.4 Change-Id: I0a0016fe39df7ca2fc3f0c4e4111195bc6d90198 Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto/network/ssl')
-rw-r--r--tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp
index 088f0170f4..b153d9545e 100644
--- a/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp
+++ b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp
@@ -25,6 +25,7 @@ private slots:
#endif
void plaintextClient();
void quietClient();
+ void manyQuietClients();
private:
QString testDataDir;
@@ -487,6 +488,34 @@ void tst_QSslServer::quietClient()
QCOMPARE(serverPeerPort, clientLocalPort);
}
+void tst_QSslServer::manyQuietClients()
+{
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ constexpr qsizetype ExpectedConnections = 5;
+ server.server.setMaxPendingConnections(ExpectedConnections);
+ QVERIFY(server.server.listen());
+
+ // Connect one socket encrypted so we have a socket in the regular queue
+ QSslSocket tlsSocket;
+ QObject::connect(&tlsSocket, &QSslSocket::sslErrors, &tlsSocket,
+ qOverload<const QList<QSslError> &>(&QSslSocket::ignoreSslErrors));
+ tlsSocket.connectToHostEncrypted("127.0.0.1", server.server.serverPort());
+
+ // Then we connect a bunch of TCP sockets who will not send any data at all
+ std::array<QTcpSocket, size_t(ExpectedConnections) * 4> sockets;
+ for (QTcpSocket &socket : sockets)
+ socket.connectToHost(QHostAddress::LocalHost, server.server.serverPort());
+ QTest::qWait(500); // some leeway to let connections try to connect...
+
+ // I happen to know the sockets are all children of the server, so let's see
+ // how many are created:
+ qsizetype connectedCount = server.server.findChildren<QSslSocket *>().size();
+ QCOMPARE(connectedCount, ExpectedConnections);
+ // 1 socket is ready and pending
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1);
+}
+
QTEST_MAIN(tst_QSslServer)
#include "tst_qsslserver.moc"