Skip to content

Commit 2d6cbc6

Browse files
committed
[SUREFIRE-2220] SurefireForkChannel#getForkNodeConnectionString() returns invalid URI string if localHost resolves to IPv6 address
This closes #697
1 parent 05322d9 commit 2d6cbc6

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/extensions/SurefireForkChannel.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import java.net.InetAddress;
2626
import java.net.InetSocketAddress;
2727
import java.net.SocketOption;
28+
import java.net.URI;
29+
import java.net.URISyntaxException;
2830
import java.nio.Buffer;
2931
import java.nio.ByteBuffer;
3032
import java.nio.channels.AsynchronousServerSocketChannel;
@@ -112,7 +114,19 @@ public void tryConnectToClient() {
112114

113115
@Override
114116
public String getForkNodeConnectionString() {
115-
return "tcp://" + localHost + ":" + localPort + (isBlank(sessionId) ? "" : "?sessionId=" + sessionId);
117+
try {
118+
URI uri = new URI(
119+
"tcp",
120+
null,
121+
localHost,
122+
localPort,
123+
null,
124+
isBlank(sessionId) ? null : "sessionId=" + sessionId,
125+
null);
126+
return uri.toASCIIString();
127+
} catch (URISyntaxException e) {
128+
throw new IllegalStateException(e);
129+
}
116130
}
117131

118132
@Override

maven-surefire-common/src/test/java/org/apache/maven/surefire/extensions/ForkChannelTest.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,16 @@ public Object getConsoleLock() {
121121
assertThat(channel.getCountdownCloseablePermits()).isEqualTo(3);
122122

123123
String localHost = InetAddress.getLoopbackAddress().getHostAddress();
124-
assertThat(channel.getForkNodeConnectionString())
125-
.startsWith("tcp://" + localHost + ":")
126-
.isNotEqualTo("tcp://" + localHost + ":")
127-
.endsWith("?sessionId=" + sessionId);
128-
129-
URI uri = new URI(channel.getForkNodeConnectionString());
130-
124+
String connectionString = channel.getForkNodeConnectionString();
125+
URI uri = new URI(connectionString);
126+
assertThat(uri.getScheme()).isEqualTo("tcp");
127+
String uriHost = uri.getHost();
128+
if (uriHost.startsWith("[") && uriHost.endsWith("]")) {
129+
uriHost = uriHost.substring(1, uriHost.length() - 1);
130+
}
131+
assertThat(uriHost).isEqualTo(localHost);
131132
assertThat(uri.getPort()).isPositive();
133+
assertThat(uri.getQuery()).isEqualTo("sessionId=" + sessionId);
132134

133135
final TestLessInputStreamBuilder builder = new TestLessInputStreamBuilder();
134136
TestLessInputStream commandReader = builder.build();

0 commit comments

Comments
 (0)