fix race condition on tests.
The test expects the SSL server socket to be encrypted, but was not waiting for it to happen. Use a QSignalSpy to wait for the signal that ensures us we can go ahead.
This commit is contained in:
parent
ce771bbf6c
commit
f044384c15
1 changed files with 24 additions and 0 deletions
|
@ -25,6 +25,7 @@
|
||||||
#include <QtCrypto>
|
#include <QtCrypto>
|
||||||
#include <QTest>
|
#include <QTest>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <QSignalSpy>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This class tests the behaviour of socket line reader when the connection if over ssl. Since SSL takes part below application layer,
|
* This class tests the behaviour of socket line reader when the connection if over ssl. Since SSL takes part below application layer,
|
||||||
|
@ -112,6 +113,8 @@ void TestSslSocketLineReader::testTrustedDevice()
|
||||||
|
|
||||||
QSslSocket* serverSocket = m_server->nextPendingConnection();
|
QSslSocket* serverSocket = m_server->nextPendingConnection();
|
||||||
|
|
||||||
|
QSignalSpy serverEncryptedSpy(serverSocket, SIGNAL(encrypted()));
|
||||||
|
|
||||||
QVERIFY2(serverSocket != 0, "Null socket returned by server");
|
QVERIFY2(serverSocket != 0, "Null socket returned by server");
|
||||||
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
||||||
|
|
||||||
|
@ -135,10 +138,20 @@ void TestSslSocketLineReader::testTrustedDevice()
|
||||||
};
|
};
|
||||||
connect(serverSocket, &QSslSocket::encrypted, connected_lambda);
|
connect(serverSocket, &QSslSocket::encrypted, connected_lambda);
|
||||||
connect(m_clientSocket, &QSslSocket::encrypted, connected_lambda);
|
connect(m_clientSocket, &QSslSocket::encrypted, connected_lambda);
|
||||||
|
|
||||||
serverSocket->startServerEncryption();
|
serverSocket->startServerEncryption();
|
||||||
m_clientSocket->startClientEncryption();
|
m_clientSocket->startClientEncryption();
|
||||||
m_loop.exec(); //Block until QEventLoop::quit gets called by the lambda
|
m_loop.exec(); //Block until QEventLoop::quit gets called by the lambda
|
||||||
|
|
||||||
|
if (serverEncryptedSpy.count() < 1) {
|
||||||
|
for(int x = 0;x < 50; ++x) {
|
||||||
|
QVERIFY(serverEncryptedSpy.wait(100));
|
||||||
|
if (serverEncryptedSpy.count() > 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Both client and server socket should be encrypted here and should have remote certificate because VerifyPeer is used
|
// Both client and server socket should be encrypted here and should have remote certificate because VerifyPeer is used
|
||||||
QVERIFY2(m_clientSocket->isOpen(), "Client socket already closed");
|
QVERIFY2(m_clientSocket->isOpen(), "Client socket already closed");
|
||||||
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
||||||
|
@ -182,6 +195,8 @@ void TestSslSocketLineReader::testUntrustedDevice()
|
||||||
|
|
||||||
QSslSocket* serverSocket = m_server->nextPendingConnection();
|
QSslSocket* serverSocket = m_server->nextPendingConnection();
|
||||||
|
|
||||||
|
QSignalSpy serverEncryptedSpy(serverSocket, SIGNAL(encrypted()));
|
||||||
|
|
||||||
QVERIFY2(serverSocket != 0, "Null socket returned by server");
|
QVERIFY2(serverSocket != 0, "Null socket returned by server");
|
||||||
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
||||||
|
|
||||||
|
@ -207,6 +222,15 @@ void TestSslSocketLineReader::testUntrustedDevice()
|
||||||
m_clientSocket->startClientEncryption();
|
m_clientSocket->startClientEncryption();
|
||||||
m_loop.exec(); //Block until QEventLoop::quit gets called by the lambda
|
m_loop.exec(); //Block until QEventLoop::quit gets called by the lambda
|
||||||
|
|
||||||
|
if (serverEncryptedSpy.count() < 1) {
|
||||||
|
for(int x = 0;x < 50; ++x) {
|
||||||
|
QVERIFY(serverEncryptedSpy.wait(100));
|
||||||
|
if (serverEncryptedSpy.count() > 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QVERIFY2(m_clientSocket->isOpen(), "Client socket already closed");
|
QVERIFY2(m_clientSocket->isOpen(), "Client socket already closed");
|
||||||
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
QVERIFY2(serverSocket->isOpen(), "Server socket already closed");
|
||||||
QVERIFY2(m_clientSocket->isEncrypted(), "Client is not encrypted");
|
QVERIFY2(m_clientSocket->isEncrypted(), "Client is not encrypted");
|
||||||
|
|
Loading…
Reference in a new issue