diff --git a/mockwebserver/src/main/java/okhttp3/mockwebserver/RecordedRequest.kt b/mockwebserver/src/main/java/okhttp3/mockwebserver/RecordedRequest.kt index 5c175d42d..9b34b2320 100644 --- a/mockwebserver/src/main/java/okhttp3/mockwebserver/RecordedRequest.kt +++ b/mockwebserver/src/main/java/okhttp3/mockwebserver/RecordedRequest.kt @@ -101,7 +101,11 @@ class RecordedRequest( val inetAddress = socket.localAddress var hostname = inetAddress.hostName - if (inetAddress is Inet6Address) { + if (inetAddress is Inet6Address && hostname.contains(':')) { + // hostname is likely some form representing the IPv6 bytes + // 2001:0db8:85a3:0000:0000:8a2e:0370:7334 + // 2001:db8:85a3::8a2e:370:7334 + // ::1 hostname = "[$hostname]" } diff --git a/mockwebserver/src/test/java/okhttp3/mockwebserver/RecordedRequestTest.java b/mockwebserver/src/test/java/okhttp3/mockwebserver/RecordedRequestTest.java index 80a1381c2..5e9bb82d7 100644 --- a/mockwebserver/src/test/java/okhttp3/mockwebserver/RecordedRequestTest.java +++ b/mockwebserver/src/test/java/okhttp3/mockwebserver/RecordedRequestTest.java @@ -16,7 +16,6 @@ package okhttp3.mockwebserver; -import java.net.Inet4Address; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; @@ -30,8 +29,9 @@ import org.junit.rules.Timeout; import static org.assertj.core.api.Assertions.assertThat; +@SuppressWarnings("ConstantConditions") public class RecordedRequestTest { - Headers headers = Util.EMPTY_HEADERS; + private Headers headers = Util.EMPTY_HEADERS; private static class FakeSocket extends Socket { private final InetAddress localAddress; @@ -39,15 +39,12 @@ public class RecordedRequestTest { private final InetAddress remoteAddress; private final int localPort; - private FakeSocket(int localPort) { - this(Inet4Address.getLoopbackAddress(), localPort); - } - private FakeSocket(InetAddress inetAddress, int localPort) { this(inetAddress, localPort, inetAddress, 1234); } - private FakeSocket(InetAddress localAddress, int localPort, InetAddress remoteAddress, int remotePort) { + private FakeSocket(InetAddress localAddress, int localPort, InetAddress remoteAddress, + int remotePort) { this.localAddress = localAddress; this.localPort = localPort; this.remoteAddress = remoteAddress; @@ -75,7 +72,7 @@ public class RecordedRequestTest { @Test public void testIPv4() throws UnknownHostException { Socket socket = - new FakeSocket(InetAddress.getByAddress("127.0.0.1", new byte[] { 127, 0, 0, 1 }), 80); + new FakeSocket(InetAddress.getByAddress("127.0.0.1", new byte[] {127, 0, 0, 1}), 80); RecordedRequest request = new RecordedRequest("GET / HTTP/1.1", headers, Collections.emptyList(), 0, new Buffer(), 0, socket); @@ -85,7 +82,7 @@ public class RecordedRequestTest { @Test public void testIpv6() throws UnknownHostException { Socket socket = new FakeSocket(InetAddress.getByAddress("::1", - new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }), 80); + new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}), 80); RecordedRequest request = new RecordedRequest("GET / HTTP/1.1", headers, Collections.emptyList(), 0, new Buffer(), 0, socket); @@ -95,11 +92,31 @@ public class RecordedRequestTest { @Test public void testUsesLocal() throws UnknownHostException { Socket socket = - new FakeSocket(InetAddress.getByAddress("127.0.0.1", new byte[] { 127, 0, 0, 1 }), 80); + new FakeSocket(InetAddress.getByAddress("127.0.0.1", new byte[] {127, 0, 0, 1}), 80); RecordedRequest request = new RecordedRequest("GET / HTTP/1.1", headers, Collections.emptyList(), 0, new Buffer(), 0, socket); assertThat(request.getRequestUrl().toString()).isEqualTo("http://127.0.0.1/"); } + + @Test public void testLocalhostIpv6() throws UnknownHostException { + Socket socket = new FakeSocket(InetAddress.getByAddress("localhost", + new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}), 80); + + RecordedRequest request = new RecordedRequest("GET / HTTP/1.1", headers, + Collections.emptyList(), 0, new Buffer(), 0, socket); + + assertThat(request.getRequestUrl().toString()).isEqualTo("http://localhost/"); + } + + @Test public void testLocalhostIpv4() throws UnknownHostException { + Socket socket = + new FakeSocket(InetAddress.getByAddress("localhost", new byte[] {127, 0, 0, 1}), 80); + + RecordedRequest request = new RecordedRequest("GET / HTTP/1.1", headers, + Collections.emptyList(), 0, new Buffer(), 0, socket); + + assertThat(request.getRequestUrl().toString()).isEqualTo("http://localhost/"); + } }