Mapped IPv4 address test fix
The SubjectAlternativeNameTest was failing on getting a mapped IPv4
address back of the form "::ffff:127.0.0.1" which should be handled
fine.
Added several tests to InetAddressTest to make sure the correct handling
of mapped addresses doesn't regress.
Change-Id: If6e1ca8bda405d4862786404d1ced571743391f2
diff --git a/luni/src/test/java/libcore/java/net/InetAddressTest.java b/luni/src/test/java/libcore/java/net/InetAddressTest.java
index edca1a6..c7617ab 100644
--- a/luni/src/test/java/libcore/java/net/InetAddressTest.java
+++ b/luni/src/test/java/libcore/java/net/InetAddressTest.java
@@ -77,6 +77,8 @@
assertEquals("/1.2.3.4", InetAddress.parseNumericAddress("1.2.3.4").toString());
// Regular IPv6.
assertEquals("/2001:4860:800d::68", InetAddress.parseNumericAddress("2001:4860:800d::68").toString());
+ // Mapped IPv4
+ assertEquals("/127.0.0.1", InetAddress.parseNumericAddress("::ffff:127.0.0.1").toString());
// Optional square brackets around IPv6 addresses, including mapped IPv4.
assertEquals("/2001:4860:800d::68", InetAddress.parseNumericAddress("[2001:4860:800d::68]").toString());
assertEquals("/127.0.0.1", InetAddress.parseNumericAddress("[::ffff:127.0.0.1]").toString());
@@ -101,9 +103,22 @@
}
public void test_isNumeric() throws Exception {
+ // IPv4
assertTrue(InetAddress.isNumeric("1.2.3.4"));
assertTrue(InetAddress.isNumeric("127.0.0.1"));
+ // IPv6
+ assertTrue(InetAddress.isNumeric("::1"));
+ assertTrue(InetAddress.isNumeric("2001:4860:800d::68"));
+
+ // Mapped IPv4
+ assertTrue(InetAddress.isNumeric("::ffff:127.0.0.1"));
+
+ // Optional square brackets around IPv6 addresses, including mapped IPv4.
+ assertTrue(InetAddress.isNumeric("[2001:4860:800d::68]"));
+ assertTrue(InetAddress.isNumeric("[::ffff:127.0.0.1]"));
+
+ // Negative test
assertFalse(InetAddress.isNumeric("example.com"));
for (String invalid : INVALID_IPv4_NUMERIC_ADDRESSES) {
@@ -113,6 +128,7 @@
public void test_isLinkLocalAddress() throws Exception {
assertFalse(InetAddress.getByName("127.0.0.1").isLinkLocalAddress());
+ assertFalse(InetAddress.getByName("::ffff:127.0.0.1").isLinkLocalAddress());
assertTrue(InetAddress.getByName("169.254.1.2").isLinkLocalAddress());
assertFalse(InetAddress.getByName("fec0::").isLinkLocalAddress());
@@ -195,6 +211,9 @@
assertEquals("127.0.0.1", Inet4Address.LOOPBACK.getHostAddress());
+ // IPv4 mapped address
+ assertEquals("127.0.0.1", InetAddress.getByName("::ffff:127.0.0.1").getHostAddress());
+
InetAddress aAddr = InetAddress.getByName("224.0.0.0");
assertEquals("224.0.0.0", aAddr.getHostAddress());
diff --git a/luni/src/test/java/libcore/java/security/cert/SubjectAlternativeNameTest.java b/luni/src/test/java/libcore/java/security/cert/SubjectAlternativeNameTest.java
index 88d5011..1b440c1 100644
--- a/luni/src/test/java/libcore/java/security/cert/SubjectAlternativeNameTest.java
+++ b/luni/src/test/java/libcore/java/security/cert/SubjectAlternativeNameTest.java
@@ -38,7 +38,9 @@
public void testFormatIpv4MappedAddress() throws Exception {
byte[] mappedAddress = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 127, 0, 0, 1 };
- assertEquals("127.0.0.1", formatIpAddress(mappedAddress));
+ String decoded = formatIpAddress(mappedAddress);
+ assertTrue(decoded,
+ decoded.equals("127.0.0.1") || decoded.equalsIgnoreCase("::ffff:127.0.0.1"));
}
public void testFormatIpv6Address() throws Exception {