summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorRobin Burchell <robin.burchell@collabora.com>2011-10-23 20:04:52 +0200
committerSergio Ahumada <sergio.ahumada@nokia.com>2011-10-31 20:25:12 +0100
commit03f852cb47d508d98aa90f501e9b7f4214e8ad8b (patch)
tree1df4fbdc4076205a306d9c3d89d68510e5ad035a /tests/auto
parent3aa81c55e2f42389341feb77b1d9840e6c9b61a2 (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')
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp61
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();