diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2022-08-16 15:51:10 +0200 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2022-08-18 16:22:55 +0200 |
commit | 906396185b472c3690d541d98c5555879e5835ca (patch) | |
tree | 56c909df2018426ce15c3fd5ec856e4506ce04bd /tests | |
parent | 2a276e0dbf8a83967dd9b313fa67ba54bdbb364b (diff) |
QSslServer: Make sure maxPendingConnections applies to all sockets
Not just the ones we added to the pending sockets list
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>
(cherry picked from commit 1ee75e47401d0ed4646d4fef7ce8e09eb90f4d5e)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp | 29 |
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" |