From 1a52819c70306d5af7a10c0841eb0e5a625656a5 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 30 Nov 2011 17:21:51 +0000 Subject: Fix QTcpServer::serverAddress() for dual stack sockets When listening on QHostAddress::Any, serverAddress() should return QHostAddress::Any too, assuming that setting the socket options was successful. Task-number: QTBUG-22899 Change-Id: I50a9ff1b4ad0c1c1905e2952c595d7068df2627d Reviewed-by: Thiago Macieira --- .../network/socket/qtcpserver/tst_qtcpserver.cpp | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'tests/auto/network/socket/qtcpserver') diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp index 0cdd3a7120..769544e17e 100644 --- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp +++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp @@ -116,6 +116,8 @@ private slots: void qtbug14268_peek(); + void serverAddress_data(); + void serverAddress(); private: #ifndef QT_NO_BEARERMANAGEMENT QNetworkSession *networkSession; @@ -789,5 +791,39 @@ void tst_QTcpServer::qtbug14268_peek() QVERIFY(helper.lastDataPeeked == QByteArray("6162630a6465660a6768690a")); } +void tst_QTcpServer::serverAddress_data() +{ + QTest::addColumn("listenAddress"); + QTest::addColumn("serverAddress"); +#ifdef Q_OS_WIN + if (QSysInfo::windowsVersion() < QSysInfo::WV_6_0) + QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << QHostAddress(QHostAddress::AnyIPv4); //windows XP doesn't support dual stack sockets + else +#endif + QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << QHostAddress(QHostAddress::Any); + QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << QHostAddress(QHostAddress::AnyIPv4); + QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << QHostAddress(QHostAddress::AnyIPv6); + foreach (const QHostAddress& addr, QNetworkInterface::allAddresses()) { + if (addr.isInSubnet(QHostAddress::parseSubnet("fe80::/10")) + || addr.isInSubnet(QHostAddress::parseSubnet("169.254/16"))) + continue; //cannot bind on link local addresses + QTest::newRow(qPrintable(addr.toString())) << addr << addr; + } +} + +void tst_QTcpServer::serverAddress() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + QFETCH(QHostAddress, listenAddress); + QFETCH(QHostAddress, serverAddress); + QTcpServer server; + if (!server.listen(listenAddress)) + QSKIP(qPrintable(server.errorString())); + QCOMPARE(server.serverAddress(), serverAddress); +} + QTEST_MAIN(tst_QTcpServer) #include "tst_qtcpserver.moc" -- cgit v1.2.3