tst_QLocalSocket: Clean up leftover local sockets before listening
If a test crashes it might leave local sockets, causing test failures on subsequent runs due to the socket already being "in use". Pick-to: 6.3 Change-Id: Ie1107c414f4819026907071c7b8281b2e27b8541 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
parent
d5b3238def
commit
8ccf1080fc
@ -162,14 +162,13 @@ tst_QLocalSocket::tst_QLocalSocket()
|
|||||||
qRegisterMetaType<QFile::Permissions>("QFile::Permissions");
|
qRegisterMetaType<QFile::Permissions>("QFile::Permissions");
|
||||||
}
|
}
|
||||||
|
|
||||||
class LocalServer : public QLocalServer
|
class CrashSafeLocalServer : public QLocalServer
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LocalServer() : QLocalServer()
|
CrashSafeLocalServer() : QLocalServer()
|
||||||
{
|
{
|
||||||
connect(this, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool listen(const QString &name)
|
bool listen(const QString &name)
|
||||||
@ -178,6 +177,19 @@ public:
|
|||||||
return QLocalServer::listen(name);
|
return QLocalServer::listen(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool listen(qintptr socketDescriptor) { return QLocalServer::listen(socketDescriptor); }
|
||||||
|
};
|
||||||
|
|
||||||
|
class LocalServer : public CrashSafeLocalServer
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
LocalServer() : CrashSafeLocalServer()
|
||||||
|
{
|
||||||
|
connect(this, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
|
||||||
|
}
|
||||||
|
|
||||||
QList<int> hits;
|
QList<int> hits;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -946,7 +958,7 @@ static QVariant readCommand(QIODevice *ioDevice, int *readCommandCounter, bool r
|
|||||||
|
|
||||||
void tst_QLocalSocket::simpleCommandProtocol1()
|
void tst_QLocalSocket::simpleCommandProtocol1()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
server.listen(QStringLiteral("simpleProtocol"));
|
server.listen(QStringLiteral("simpleProtocol"));
|
||||||
|
|
||||||
QLocalSocket localSocketWrite;
|
QLocalSocket localSocketWrite;
|
||||||
@ -972,7 +984,7 @@ void tst_QLocalSocket::simpleCommandProtocol1()
|
|||||||
|
|
||||||
void tst_QLocalSocket::simpleCommandProtocol2()
|
void tst_QLocalSocket::simpleCommandProtocol2()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
server.listen(QStringLiteral("simpleProtocol"));
|
server.listen(QStringLiteral("simpleProtocol"));
|
||||||
|
|
||||||
QLocalSocket localSocketWrite;
|
QLocalSocket localSocketWrite;
|
||||||
@ -1029,7 +1041,7 @@ void tst_QLocalSocket::simpleCommandProtocol2()
|
|||||||
// QLocalSocket/Server can take a name or path, check that it works as expected
|
// QLocalSocket/Server can take a name or path, check that it works as expected
|
||||||
void tst_QLocalSocket::fullPath()
|
void tst_QLocalSocket::fullPath()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QString name = "qlocalsocket_pathtest";
|
QString name = "qlocalsocket_pathtest";
|
||||||
#if defined(QT_LOCALSOCKET_TCP)
|
#if defined(QT_LOCALSOCKET_TCP)
|
||||||
QString path = "QLocalServer";
|
QString path = "QLocalServer";
|
||||||
@ -1392,7 +1404,9 @@ void tst_QLocalSocket::delayedDisconnect()
|
|||||||
void tst_QLocalSocket::removeServer()
|
void tst_QLocalSocket::removeServer()
|
||||||
{
|
{
|
||||||
// this is a hostile takeover, but recovering from a crash results in the same
|
// this is a hostile takeover, but recovering from a crash results in the same
|
||||||
|
// Note: Explicitly not a CrashSafeLocalServer
|
||||||
QLocalServer server, server2;
|
QLocalServer server, server2;
|
||||||
|
|
||||||
QVERIFY(QLocalServer::removeServer("cleanuptest"));
|
QVERIFY(QLocalServer::removeServer("cleanuptest"));
|
||||||
QVERIFY2(server.listen("cleanuptest"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("cleanuptest"), qUtf8Printable(server.errorString()));
|
||||||
#ifndef Q_OS_WIN
|
#ifndef Q_OS_WIN
|
||||||
@ -1406,7 +1420,7 @@ void tst_QLocalSocket::removeServer()
|
|||||||
|
|
||||||
void tst_QLocalSocket::recycleServer()
|
void tst_QLocalSocket::recycleServer()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
|
|
||||||
QVERIFY2(server.listen("recycletest1"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("recycletest1"), qUtf8Printable(server.errorString()));
|
||||||
@ -1431,7 +1445,7 @@ void tst_QLocalSocket::recycleClientSocket()
|
|||||||
const QByteArrayList lines = QByteArrayList() << "Have you heard of that new band"
|
const QByteArrayList lines = QByteArrayList() << "Have you heard of that new band"
|
||||||
<< "\"1023 Megabytes\"?"
|
<< "\"1023 Megabytes\"?"
|
||||||
<< "They haven't made it to a gig yet.";
|
<< "They haven't made it to a gig yet.";
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
const QString serverName = QStringLiteral("recycleClientSocket");
|
const QString serverName = QStringLiteral("recycleClientSocket");
|
||||||
QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
@ -1456,7 +1470,7 @@ void tst_QLocalSocket::recycleClientSocket()
|
|||||||
|
|
||||||
void tst_QLocalSocket::multiConnect()
|
void tst_QLocalSocket::multiConnect()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QLocalSocket client1;
|
QLocalSocket client1;
|
||||||
QLocalSocket client2;
|
QLocalSocket client2;
|
||||||
QLocalSocket client3;
|
QLocalSocket client3;
|
||||||
@ -1481,7 +1495,7 @@ void tst_QLocalSocket::multiConnect()
|
|||||||
|
|
||||||
void tst_QLocalSocket::writeOnlySocket()
|
void tst_QLocalSocket::writeOnlySocket()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen("writeOnlySocket"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("writeOnlySocket"), qUtf8Printable(server.errorString()));
|
||||||
|
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
@ -1512,7 +1526,7 @@ void tst_QLocalSocket::writeToClientAndDisconnect_data()
|
|||||||
void tst_QLocalSocket::writeToClientAndDisconnect()
|
void tst_QLocalSocket::writeToClientAndDisconnect()
|
||||||
{
|
{
|
||||||
QFETCH(int, chunks);
|
QFETCH(int, chunks);
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
QSignalSpy readChannelFinishedSpy(&client, SIGNAL(readChannelFinished()));
|
QSignalSpy readChannelFinishedSpy(&client, SIGNAL(readChannelFinished()));
|
||||||
|
|
||||||
@ -1540,7 +1554,7 @@ void tst_QLocalSocket::writeToClientAndDisconnect()
|
|||||||
|
|
||||||
void tst_QLocalSocket::writeToDisconnected()
|
void tst_QLocalSocket::writeToDisconnected()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen("writeToDisconnected"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("writeToDisconnected"), qUtf8Printable(server.errorString()));
|
||||||
|
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
@ -1611,7 +1625,7 @@ public slots:
|
|||||||
*/
|
*/
|
||||||
void tst_QLocalSocket::bytesWrittenSignal()
|
void tst_QLocalSocket::bytesWrittenSignal()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen("qlocalsocket_readyread"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("qlocalsocket_readyread"), qUtf8Printable(server.errorString()));
|
||||||
WriteThread writeThread;
|
WriteThread writeThread;
|
||||||
QSignalSpy receivedSpy(&writeThread, &WriteThread::bytesWrittenReceived);
|
QSignalSpy receivedSpy(&writeThread, &WriteThread::bytesWrittenReceived);
|
||||||
@ -1632,7 +1646,7 @@ void tst_QLocalSocket::socketClosedSlot()
|
|||||||
|
|
||||||
void tst_QLocalSocket::syncDisconnectNotify()
|
void tst_QLocalSocket::syncDisconnectNotify()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen("syncDisconnectNotify"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("syncDisconnectNotify"), qUtf8Printable(server.errorString()));
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
connect(&client, &QLocalSocket::disconnected,
|
connect(&client, &QLocalSocket::disconnected,
|
||||||
@ -1651,7 +1665,7 @@ void tst_QLocalSocket::syncDisconnectNotify()
|
|||||||
|
|
||||||
void tst_QLocalSocket::asyncDisconnectNotify()
|
void tst_QLocalSocket::asyncDisconnectNotify()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen("asyncDisconnectNotify"), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen("asyncDisconnectNotify"), qUtf8Printable(server.errorString()));
|
||||||
QLocalSocket client;
|
QLocalSocket client;
|
||||||
QSignalSpy disconnectedSpy(&client, SIGNAL(disconnected()));
|
QSignalSpy disconnectedSpy(&client, SIGNAL(disconnected()));
|
||||||
@ -1703,9 +1717,7 @@ void tst_QLocalSocket::verifySocketOptions()
|
|||||||
QFETCH(QLocalServer::SocketOption, opts);
|
QFETCH(QLocalServer::SocketOption, opts);
|
||||||
QFETCH(QFile::Permissions, perms);
|
QFETCH(QFile::Permissions, perms);
|
||||||
|
|
||||||
|
CrashSafeLocalServer server;
|
||||||
QLocalServer::removeServer(service);
|
|
||||||
QLocalServer server;
|
|
||||||
server.setSocketOptions(opts);
|
server.setSocketOptions(opts);
|
||||||
QVERIFY2(server.listen(service), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen(service), qUtf8Printable(server.errorString()));
|
||||||
|
|
||||||
@ -1762,7 +1774,7 @@ void tst_QLocalSocket::verifyListenWithDescriptor()
|
|||||||
close(fds[1]);
|
close(fds[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
QVERIFY2(server.listen(listenSocket), qUtf8Printable(server.errorString()));
|
QVERIFY2(server.listen(listenSocket), qUtf8Printable(server.errorString()));
|
||||||
|
|
||||||
#if defined(Q_OS_LINUX) || defined(Q_OS_QNX)
|
#if defined(Q_OS_LINUX) || defined(Q_OS_QNX)
|
||||||
@ -1818,7 +1830,7 @@ void tst_QLocalSocket::verifyListenWithDescriptor_data()
|
|||||||
|
|
||||||
void tst_QLocalSocket::serverBindingsAndProperties()
|
void tst_QLocalSocket::serverBindingsAndProperties()
|
||||||
{
|
{
|
||||||
QLocalServer server;
|
CrashSafeLocalServer server;
|
||||||
|
|
||||||
QProperty<QLocalServer::SocketOptions> sockOpts;
|
QProperty<QLocalServer::SocketOptions> sockOpts;
|
||||||
server.bindableSocketOptions().setBinding(Qt::makePropertyBinding(sockOpts));
|
server.bindableSocketOptions().setBinding(Qt::makePropertyBinding(sockOpts));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user