tst_QTcpSocket, tst_QUdpSocket: Improve diagnostics.
Add more error messages on failures. Task-number: QTBUG-25367 Task-number: QTBUG-25368 Change-Id: I064143a058b7b98d9d5eecab8b5da49f5307e1eb Reviewed-by: Edward Welbourne <edward.welbourne@theqtcompany.com> Reviewed-by: Richard J. Moore <rich@kde.org>
This commit is contained in:
parent
8f0bf2d3d2
commit
22a7edd816
@ -34,6 +34,8 @@
|
||||
#include <QString>
|
||||
#ifdef QT_NETWORK_LIB
|
||||
#include <QtNetwork/QHostInfo>
|
||||
#include <QtNetwork/QHostAddress>
|
||||
#include <QtNetwork/QAbstractSocket>
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
@ -139,5 +141,21 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Helper function for usage with QVERIFY2 on sockets.
|
||||
static QByteArray msgSocketError(const QAbstractSocket &s)
|
||||
{
|
||||
QString result;
|
||||
QDebug debug(&result);
|
||||
debug.nospace();
|
||||
debug.noquote();
|
||||
if (!s.localAddress().isNull())
|
||||
debug << "local=" << s.localAddress().toString() << ':' << s.localPort();
|
||||
if (!s.peerAddress().isNull())
|
||||
debug << ", peer=" << s.peerAddress().toString() << ':' << s.peerPort();
|
||||
debug << ", type=" << s.socketType() << ", state=" << s.state()
|
||||
<< ", error=" << s.error() << ": " << s.errorString();
|
||||
return result.toLocal8Bit();
|
||||
}
|
||||
#endif // QT_NETWORK_LIB
|
||||
};
|
||||
|
@ -675,8 +675,10 @@ void tst_QTcpSocket::bindThenResolveHost()
|
||||
|
||||
dummySocket.close();
|
||||
|
||||
socket->connectToHost(hostName, 80);
|
||||
QVERIFY2(socket->waitForConnected(), "Network timeout");
|
||||
const quint16 port = 80;
|
||||
socket->connectToHost(hostName, port);
|
||||
QVERIFY2(socket->waitForConnected(), (hostName.toLocal8Bit() + ": " + QByteArray::number(port) + ' '
|
||||
+ QtNetworkSettings::msgSocketError(*socket)).constData());
|
||||
|
||||
QCOMPARE(socket->localPort(), boundPort);
|
||||
QCOMPARE(socket->socketDescriptor(), fd);
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <qcoreapplication.h>
|
||||
#include <qfileinfo.h>
|
||||
#include <qdatastream.h>
|
||||
#include <qdebug.h>
|
||||
#include <qudpsocket.h>
|
||||
#include <qhostaddress.h>
|
||||
#include <qhostinfo.h>
|
||||
@ -265,7 +266,7 @@ void tst_QUdpSocket::unconnectedServerAndClientTest()
|
||||
char buf[1024];
|
||||
QHostAddress host;
|
||||
quint16 port;
|
||||
QVERIFY(serverSocket.waitForReadyRead(5000));
|
||||
QVERIFY2(serverSocket.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(serverSocket).constData());
|
||||
QCOMPARE(int(serverSocket.readDatagram(buf, sizeof(buf), &host, &port)),
|
||||
int(strlen(message[i])));
|
||||
buf[strlen(message[i])] = '\0';
|
||||
@ -397,8 +398,8 @@ void tst_QUdpSocket::loop()
|
||||
QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.length(),
|
||||
peterAddress, peter.localPort()), qint64(paulMessage.length()));
|
||||
|
||||
QVERIFY(peter.waitForReadyRead(9000));
|
||||
QVERIFY(paul.waitForReadyRead(9000));
|
||||
QVERIFY2(peter.waitForReadyRead(9000), QtNetworkSettings::msgSocketError(peter).constData());
|
||||
QVERIFY2(paul.waitForReadyRead(9000), QtNetworkSettings::msgSocketError(paul).constData());
|
||||
char peterBuffer[16*1024];
|
||||
char paulBuffer[16*1024];
|
||||
if (success) {
|
||||
@ -454,8 +455,8 @@ void tst_QUdpSocket::ipv6Loop()
|
||||
char peterBuffer[16*1024];
|
||||
char paulBuffer[16*1024];
|
||||
#if !defined(Q_OS_WINCE)
|
||||
QVERIFY(peter.waitForReadyRead(5000));
|
||||
QVERIFY(paul.waitForReadyRead(5000));
|
||||
QVERIFY2(peter.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(peter).constData());
|
||||
QVERIFY2(paul.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(paul).constData());
|
||||
#else
|
||||
QVERIFY(peter.waitForReadyRead(15000));
|
||||
QVERIFY(paul.waitForReadyRead(15000));
|
||||
@ -490,7 +491,7 @@ void tst_QUdpSocket::dualStack()
|
||||
QByteArray buffer;
|
||||
//test v4 -> dual
|
||||
QCOMPARE((int)v4Sock.writeDatagram(v4Data.constData(), v4Data.length(), QHostAddress(QHostAddress::LocalHost), dualSock.localPort()), v4Data.length());
|
||||
QVERIFY(dualSock.waitForReadyRead(5000));
|
||||
QVERIFY2(dualSock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(dualSock).constData());
|
||||
buffer.reserve(100);
|
||||
qint64 size = dualSock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, v4Data.length());
|
||||
@ -504,7 +505,7 @@ void tst_QUdpSocket::dualStack()
|
||||
|
||||
//test v6 -> dual
|
||||
QCOMPARE((int)v6Sock.writeDatagram(v6Data.constData(), v6Data.length(), QHostAddress(QHostAddress::LocalHostIPv6), dualSock.localPort()), v6Data.length());
|
||||
QVERIFY(dualSock.waitForReadyRead(5000));
|
||||
QVERIFY2(dualSock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(dualSock).constData());
|
||||
buffer.reserve(100);
|
||||
size = dualSock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, v6Data.length());
|
||||
@ -513,7 +514,7 @@ void tst_QUdpSocket::dualStack()
|
||||
|
||||
//test dual -> v6
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
|
||||
QVERIFY(v6Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v6Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -523,7 +524,7 @@ void tst_QUdpSocket::dualStack()
|
||||
|
||||
//test dual -> v4
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
|
||||
QVERIFY(v4Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v4Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -555,7 +556,7 @@ void tst_QUdpSocket::dualStackAutoBinding()
|
||||
QUdpSocket dualSock;
|
||||
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
|
||||
QVERIFY(v4Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v4Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -563,7 +564,7 @@ void tst_QUdpSocket::dualStackAutoBinding()
|
||||
QCOMPARE(buffer, dualData);
|
||||
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
|
||||
QVERIFY(v6Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v6Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -576,7 +577,7 @@ void tst_QUdpSocket::dualStackAutoBinding()
|
||||
QUdpSocket dualSock;
|
||||
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
|
||||
QVERIFY(v6Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v6Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -584,7 +585,7 @@ void tst_QUdpSocket::dualStackAutoBinding()
|
||||
QCOMPARE(buffer, dualData);
|
||||
|
||||
QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
|
||||
QVERIFY(v4Sock.waitForReadyRead(5000));
|
||||
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
|
||||
buffer.reserve(100);
|
||||
size = v4Sock.readDatagram(buffer.data(), 100, &from, &port);
|
||||
QCOMPARE((int)size, dualData.length());
|
||||
@ -689,7 +690,7 @@ void tst_QUdpSocket::pendingDatagramSize()
|
||||
QVERIFY(client.writeDatagram("3 messages", 10, serverAddress, server.localPort()) == 10);
|
||||
|
||||
char c = 0;
|
||||
QVERIFY(server.waitForReadyRead());
|
||||
QVERIFY2(server.waitForReadyRead(), QtNetworkSettings::msgSocketError(server).constData());
|
||||
if (server.hasPendingDatagrams()) {
|
||||
#if defined Q_OS_HPUX && defined __ia64
|
||||
QEXPECT_FAIL("", "HP-UX 11i v2 can't determine the datagram size correctly.", Abort);
|
||||
@ -1101,7 +1102,7 @@ void tst_QUdpSocket::zeroLengthDatagram()
|
||||
#endif
|
||||
QCOMPARE(sender.writeDatagram(QByteArray(), QHostAddress::LocalHost, receiver.localPort()), qint64(0));
|
||||
|
||||
QVERIFY(receiver.waitForReadyRead(1000));
|
||||
QVERIFY2(receiver.waitForReadyRead(1000), QtNetworkSettings::msgSocketError(receiver).constData());
|
||||
QVERIFY(receiver.hasPendingDatagrams());
|
||||
|
||||
char buf;
|
||||
@ -1379,8 +1380,7 @@ void tst_QUdpSocket::multicast()
|
||||
int(datagram.size()));
|
||||
}
|
||||
|
||||
QVERIFY2(receiver.waitForReadyRead(),
|
||||
qPrintable(receiver.errorString()));
|
||||
QVERIFY2(receiver.waitForReadyRead(), QtNetworkSettings::msgSocketError(receiver).constData());
|
||||
QVERIFY(receiver.hasPendingDatagrams());
|
||||
QList<QByteArray> receivedDatagrams;
|
||||
while (receiver.hasPendingDatagrams()) {
|
||||
@ -1446,7 +1446,7 @@ void tst_QUdpSocket::echo()
|
||||
qDebug() << "packets in" << successes << "out" << i;
|
||||
QTest::qWait(50); //choke to avoid triggering flood/DDoS protections on echo service
|
||||
}
|
||||
QVERIFY(successes >= 9);
|
||||
QVERIFY2(successes >= 9, QByteArray::number(successes).constData());
|
||||
}
|
||||
|
||||
void tst_QUdpSocket::linkLocalIPv6()
|
||||
@ -1567,7 +1567,7 @@ void tst_QUdpSocket::linkLocalIPv4()
|
||||
QByteArray receiveBuffer("xxxxx");
|
||||
foreach (QUdpSocket *s, sockets) {
|
||||
QVERIFY(s->writeDatagram(testData, s->localAddress(), neutral.localPort()));
|
||||
QVERIFY(neutral.waitForReadyRead(10000));
|
||||
QVERIFY2(neutral.waitForReadyRead(10000), QtNetworkSettings::msgSocketError(neutral).constData());
|
||||
QHostAddress from;
|
||||
quint16 fromPort;
|
||||
QCOMPARE((int)neutral.readDatagram(receiveBuffer.data(), receiveBuffer.length(), &from, &fromPort), testData.length());
|
||||
@ -1576,7 +1576,7 @@ void tst_QUdpSocket::linkLocalIPv4()
|
||||
QCOMPARE(receiveBuffer, testData);
|
||||
|
||||
QVERIFY(neutral.writeDatagram(testData, s->localAddress(), s->localPort()));
|
||||
QVERIFY(s->waitForReadyRead(10000));
|
||||
QVERIFY2(s->waitForReadyRead(10000), QtNetworkSettings::msgSocketError(*s).constData());
|
||||
QCOMPARE((int)s->readDatagram(receiveBuffer.data(), receiveBuffer.length(), &from, &fromPort), testData.length());
|
||||
QCOMPARE(receiveBuffer, testData);
|
||||
|
||||
|
@ -36,18 +36,21 @@ class Server : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Server(int port)
|
||||
|
||||
Server() { connect(&serverSocket, &QIODevice::readyRead, this, &Server::sendEcho); }
|
||||
|
||||
bool bind(quint16 port)
|
||||
{
|
||||
connect(&serverSocket, SIGNAL(readyRead()),
|
||||
this, SLOT(sendEcho()));
|
||||
if (serverSocket.bind(QHostAddress::Any, port,
|
||||
QUdpSocket::ReuseAddressHint
|
||||
| QUdpSocket::ShareAddress)) {
|
||||
const bool result = serverSocket.bind(QHostAddress::Any, port,
|
||||
QUdpSocket::ReuseAddressHint
|
||||
| QUdpSocket::ShareAddress);
|
||||
if (result) {
|
||||
printf("OK\n");
|
||||
} else {
|
||||
printf("FAILED\n");
|
||||
printf("FAILED: %s\n", qPrintable(serverSocket.errorString()));
|
||||
}
|
||||
fflush(stdout);
|
||||
return result;
|
||||
}
|
||||
|
||||
private slots:
|
||||
@ -73,8 +76,19 @@ private:
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
QStringList arguments = QCoreApplication::arguments();
|
||||
arguments.pop_front();
|
||||
quint16 port = 0;
|
||||
if (!arguments.isEmpty())
|
||||
port = arguments.constFirst().toUShort();
|
||||
if (!port) {
|
||||
printf("Specify port number\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
Server server(app.arguments().at(1).toInt());
|
||||
Server server;
|
||||
if (!server.bind(port))
|
||||
return -2;
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user