summaryrefslogtreecommitdiffstats
path: root/tests/auto/network
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2014-12-24 15:43:08 -0200
committerThiago Macieira <thiago.macieira@intel.com>2015-03-06 07:53:59 +0000
commit775d04f97ec1723c01c12f8faab05236686b9b05 (patch)
treeb1481664428dd47abe58b0c9763d137d70a9f6b9 /tests/auto/network
parentab8d36d6f36119dc9ef211acc391d8c2bfb5ee83 (diff)
Add a QHostAddress::toIPv4Address overload taking a bool *ok
This allows one to check whether the conversion is successful without checking for the return result, as the value of 0 represents the valid IPv4 address 0.0.0.0. Change-Id: I637fe55583f2255c85b0d955e5886b61494e0c7c Reviewed-by: Richard J. Moore <rich@kde.org>
Diffstat (limited to 'tests/auto/network')
-rw-r--r--tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
index 60b96d38b7..ef24cbf3c8 100644
--- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
+++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
@@ -83,6 +83,8 @@ private slots:
void isInSubnet();
void isLoopback_data();
void isLoopback();
+ void convertv4v6_data();
+ void convertv4v6();
};
QT_BEGIN_NAMESPACE
@@ -662,5 +664,51 @@ void tst_QHostAddress::isLoopback()
QCOMPARE(address.isLoopback(), result);
}
+void tst_QHostAddress::convertv4v6_data()
+{
+ QTest::addColumn<QHostAddress>("source");
+ QTest::addColumn<int>("protocol");
+ QTest::addColumn<QHostAddress>("result");
+
+ QTest::newRow("any-to-v4") << QHostAddress(QHostAddress::Any) << 4 << QHostAddress(QHostAddress::AnyIPv4);
+ QTest::newRow("any-to-v6") << QHostAddress(QHostAddress::Any) << 6 << QHostAddress(QHostAddress::AnyIPv6);
+ QTest::newRow("anyv4-to-v6") << QHostAddress(QHostAddress::AnyIPv4) << 6 << QHostAddress(QHostAddress::AnyIPv6);
+ QTest::newRow("anyv6-to-v4") << QHostAddress(QHostAddress::AnyIPv6) << 4 << QHostAddress(QHostAddress::AnyIPv4);
+
+ QTest::newRow("v4mapped-to-v4") << QHostAddress("::ffff:192.0.2.1") << 4 << QHostAddress("192.0.2.1");
+ QTest::newRow("v4-to-v4mapped") << QHostAddress("192.0.2.1") << 6 << QHostAddress("::ffff:192.0.2.1");
+
+ // we won't convert 127.0.0.1 to ::1 or vice-versa:
+ // you can connect to a v4 server socket with ::ffff:127.0.0.1, but not with ::1
+ QTest::newRow("localhost-to-v4mapped") << QHostAddress(QHostAddress::LocalHost) << 6 << QHostAddress("::ffff:127.0.0.1");
+ QTest::newRow("v4mapped-to-localhost") << QHostAddress("::ffff:127.0.0.1") << 4 << QHostAddress(QHostAddress::LocalHost);
+
+ // in turn, that means localhost6 doesn't convert to v4
+ QTest::newRow("localhost6-to-v4") << QHostAddress(QHostAddress::LocalHostIPv6) << 4 << QHostAddress();
+
+ // some other v6 addresses that won't convert to v4
+ QTest::newRow("v4compat-to-v4") << QHostAddress("::192.0.2.1") << 4 << QHostAddress();
+ QTest::newRow("localhostv4compat-to-v4") << QHostAddress("::127.0.0.1") << 4 << QHostAddress();
+ QTest::newRow("v6global-to-v4") << QHostAddress("2001:db8::1") << 4 << QHostAddress();
+ QTest::newRow("v6multicast-to-v4") << QHostAddress("ff02::1") << 4 << QHostAddress();
+}
+
+void tst_QHostAddress::convertv4v6()
+{
+ QFETCH(QHostAddress, source);
+ QFETCH(int, protocol);
+ QFETCH(QHostAddress, result);
+
+ if (protocol == 4) {
+ bool ok;
+ quint32 v4 = source.toIPv4Address(&ok);
+ QCOMPARE(ok, result.protocol() == QAbstractSocket::IPv4Protocol);
+ if (ok)
+ QCOMPARE(QHostAddress(v4), result);
+ } else if (protocol == 6) {
+ QCOMPARE(QHostAddress(source.toIPv6Address()), result);
+ }
+}
+
QTEST_MAIN(tst_QHostAddress)
#include "tst_qhostaddress.moc"