diff options
author | Robin Burchell <robin.burchell@collabora.com> | 2011-10-23 20:04:52 +0200 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@nokia.com> | 2011-10-31 20:25:12 +0100 |
commit | 03f852cb47d508d98aa90f501e9b7f4214e8ad8b (patch) | |
tree | 1df4fbdc4076205a306d9c3d89d68510e5ad035a /tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp | |
parent | 3aa81c55e2f42389341feb77b1d9840e6c9b61a2 (diff) |
Move support for socket binding from QUdpSocket upstream to QAbstractSocket.
This should be API-compatible with Qt 4, but is not ABI-compatible, due to
removing the enum from QUdpSocket.
Task-number: QTBUG-121
Change-Id: I967968c6cb6f96d3ab1d6300eadd5bde6154b300
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp')
-rw-r--r-- | tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index 46f8111945..e881d56271 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -138,6 +138,8 @@ public slots: private slots: void socketsConstructedBeforeEventLoop(); void constructing(); + void bind_data(); + void bind(); void setInvalidSocketDescriptor(); void setSocketDescriptor(); void socketDescriptor(); @@ -479,6 +481,65 @@ void tst_QTcpSocket::constructing() //---------------------------------------------------------------------------------- +void tst_QTcpSocket::bind_data() +{ + QTest::addColumn<QString>("stringAddr"); + QTest::addColumn<bool>("successExpected"); + QTest::addColumn<QString>("stringExpectedLocalAddress"); + + // iterate all interfaces, add all addresses on them as test data + QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces(); + foreach (const QNetworkInterface &interface, interfaces) { + if (!interface.isValid()) + continue; + + foreach (const QNetworkAddressEntry &entry, interface.addressEntries()) { + if (entry.ip().isInSubnet(QHostAddress::parseSubnet("fe80::/10"))) + continue; // link-local bind will fail, at least on Linux, so skip it. + + QString ip(entry.ip().toString()); + QTest::newRow(ip.toLatin1().constData()) << ip << true << ip; + } + } + + // additionally, try bind to known-bad addresses, and make sure this doesn't work + // these ranges are guarenteed to be reserved for 'documentation purposes', + // and thus, should be unused in the real world. Not that I'm assuming the + // world is full of competent administrators, or anything. + QStringList knownBad; + knownBad << "198.51.100.1"; + knownBad << "2001:0DB8::1"; + foreach (const QString &badAddress, knownBad) { + QTest::newRow(badAddress.toLatin1().constData()) << badAddress << false << QString(); + } +} + +void tst_QTcpSocket::bind() +{ + QFETCH(QString, stringAddr); + QFETCH(bool, successExpected); + QFETCH(QString, stringExpectedLocalAddress); + + QHostAddress addr(stringAddr); + QHostAddress expectedLocalAddress(stringExpectedLocalAddress); + + QTcpSocket *socket = newSocket(); + qDebug() << "Binding " << addr; + + if (successExpected) { + QVERIFY2(socket->bind(addr), qPrintable(socket->errorString())); + } else { + QVERIFY(!socket->bind(addr)); + } + + QCOMPARE(socket->localAddress(), expectedLocalAddress); + + delete socket; +} + +//---------------------------------------------------------------------------------- + + void tst_QTcpSocket::setInvalidSocketDescriptor() { QTcpSocket *socket = newSocket(); |