[SCB-2361]modify transformIpPort logic (#2728)
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/AddressManager.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/AddressManager.java
index 8851c95..e782e05 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/AddressManager.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/AddressManager.java
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.URI;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
@@ -36,7 +37,7 @@
public class AddressManager extends AbstractAddressManager {
private static final Logger LOGGER = LoggerFactory.getLogger(AddressManager.class);
- private static final String URI_SPLIT = ":";
+ private static final String URI_PREFIX = "rest://";
public AddressManager(List<String> addresses, EventBus eventBus) {
super(addresses);
@@ -65,8 +66,8 @@
}
private IpPort transformIpPort(String address) {
- String[] result = StringUtils.split(address, URI_SPLIT);
- return new IpPort(result[0], Integer.valueOf(result[1]));
+ URI uri = URI.create(URI_PREFIX + address);
+ return new IpPort(uri.getHost(), uri.getPort());
}
@Subscribe
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/refresh/AddressManagerTest.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/refresh/AddressManagerTest.java
index a81a56c..9263e1b 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/refresh/AddressManagerTest.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/refresh/AddressManagerTest.java
@@ -23,6 +23,7 @@
import java.util.List;
import java.util.Map;
+import org.apache.servicecomb.foundation.common.event.EventManager;
import org.apache.servicecomb.foundation.common.net.IpPort;
import org.apache.servicecomb.http.client.event.RefreshEndpointEvent;
import org.junit.Assert;
@@ -80,4 +81,23 @@
List<String> availableRegion = Deencapsulation.getField(addressManager1, "availableRegion");
Assert.assertEquals("127.0.0.4:30100", availableRegion.get(0));
}
+
+ @Test
+ public void addressIPV6Test() {
+ List<String> addressAZ = new ArrayList<>();
+ addressAZ.add("rest://[2008::7:957f:b2d6:1af4:a1f8]:30100");
+ Map<String, List<String>> zoneAndRegion = new HashMap<>();
+ zoneAndRegion.put("sameZone", addressAZ);
+ zoneAndRegion.put("sameRegion", new ArrayList<>());
+ addressManager1 = new AddressManager(addresses, EventManager.getEventBus());
+ RefreshEndpointEvent event = new RefreshEndpointEvent(zoneAndRegion, "SERVICECENTER");
+ addressManager1.refreshEndpoint(event, "SERVICECENTER");
+
+ List<String> availableZone = Deencapsulation.getField(addressManager1, "availableZone");
+ Assert.assertEquals("[2008::7:957f:b2d6:1af4:a1f8]:30100", availableZone.get(0));
+
+ IpPort ipPort = addressManager1.getAvailableIpPort();
+ Assert.assertEquals("[2008::7:957f:b2d6:1af4:a1f8]", ipPort.getHostOrIp());
+ Assert.assertEquals(30100, ipPort.getPort());
+ }
}
\ No newline at end of file