You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2018/08/02 10:01:56 UTC
[GitHub] zonghaishang closed pull request #2079: [Dubbo-2064] Ipv6 support
zonghaishang closed pull request #2079: [Dubbo-2064] Ipv6 support
URL: https://github.com/apache/incubator-dubbo/pull/2079
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
index 45d776ab32..a83ca91e22 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/URL.java
@@ -234,10 +234,17 @@ public static URL valueOf(String url) {
}
url = url.substring(i + 1);
}
- i = url.indexOf(":");
+ i = url.lastIndexOf(":");
if (i >= 0 && i < url.length() - 1) {
- port = Integer.parseInt(url.substring(i + 1));
- url = url.substring(0, i);
+ if (url.lastIndexOf("%") > i) {
+ // ipv6 address with scope id
+ // e.g. fe80:0:0:0:894:aeec:f37d:23e1%en0
+ // see https://howdoesinternetwork.com/2013/ipv6-zone-id
+ // ignore
+ } else {
+ port = Integer.parseInt(url.substring(i+1));
+ url = url.substring(0, i);
+ }
}
if (url.length() > 0) host = url;
return new URL(protocol, username, password, host, port, path, parameters);
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
index cbe345cd59..70d6006cbe 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/NetUtils.java
@@ -21,6 +21,7 @@
import org.apache.dubbo.common.logger.LoggerFactory;
import java.io.IOException;
+import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.NetworkInterface;
@@ -142,6 +143,51 @@ static boolean isValidAddress(InetAddress address) {
&& IP_PATTERN.matcher(name).matches());
}
+ /**
+ * Check if an ipv6 address is reachable.
+ * @param address the given address
+ * @return true if it is reachable
+ */
+ static boolean isValidV6Address(Inet6Address address) {
+ boolean preferIpv6 = Boolean.getBoolean("java.net.preferIPv6Addresses");
+ if (!preferIpv6) {
+ return false;
+ }
+ try {
+ return address.isReachable(100);
+ } catch (IOException e) {
+ // ignore
+ }
+ return false;
+ }
+
+ /**
+ * normalize the ipv6 Address, convert scope name to scope id.
+ * e.g.
+ * convert
+ * fe80:0:0:0:894:aeec:f37d:23e1%en0
+ * to
+ * fe80:0:0:0:894:aeec:f37d:23e1%5
+ *
+ * The %5 after ipv6 address is called scope id.
+ * see java doc of {@link Inet6Address} for more details.
+ * @param address the input address
+ * @return the normalized address, with scope id converted to int
+ */
+ static InetAddress normalizeV6Address(Inet6Address address) {
+ String addr = address.getHostAddress();
+ int i = addr.lastIndexOf('%');
+ if (i > 0) {
+ try {
+ return InetAddress.getByName(addr.substring(0, i) + '%' + address.getScopeId());
+ } catch (UnknownHostException e) {
+ // ignore
+ logger.debug("Unknown IPV6 address: ", e);
+ }
+ }
+ return address;
+ }
+
public static String getLocalHost() {
InetAddress address = getLocalAddress();
return address == null ? LOCALHOST : address.getHostAddress();
@@ -186,7 +232,12 @@ private static InetAddress getLocalAddress0() {
InetAddress localAddress = null;
try {
localAddress = InetAddress.getLocalHost();
- if (isValidAddress(localAddress)) {
+ if (localAddress instanceof Inet6Address) {
+ Inet6Address address = (Inet6Address) localAddress;
+ if (isValidV6Address(address)){
+ return normalizeV6Address(address);
+ }
+ } else if (isValidAddress(localAddress)) {
return localAddress;
}
} catch (Throwable e) {
@@ -194,26 +245,30 @@ private static InetAddress getLocalAddress0() {
}
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
- if (interfaces != null) {
- while (interfaces.hasMoreElements()) {
- try {
- NetworkInterface network = interfaces.nextElement();
- Enumeration<InetAddress> addresses = network.getInetAddresses();
- if (addresses != null) {
- while (addresses.hasMoreElements()) {
- try {
- InetAddress address = addresses.nextElement();
- if (isValidAddress(address)) {
- return address;
- }
- } catch (Throwable e) {
- logger.warn(e);
+ if (null == interfaces) {
+ return localAddress;
+ }
+ while (interfaces.hasMoreElements()) {
+ try {
+ NetworkInterface network = interfaces.nextElement();
+ Enumeration<InetAddress> addresses = network.getInetAddresses();
+ while (addresses.hasMoreElements()) {
+ try {
+ InetAddress address = addresses.nextElement();
+ if (address instanceof Inet6Address) {
+ Inet6Address v6Address = (Inet6Address) address;
+ if (isValidV6Address(v6Address)){
+ return normalizeV6Address(v6Address);
}
+ } else if (isValidAddress(address)) {
+ return address;
}
+ } catch (Throwable e) {
+ logger.warn(e);
}
- } catch (Throwable e) {
- logger.warn(e);
}
+ } catch (Throwable e) {
+ logger.warn(e);
}
}
} catch (Throwable e) {
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
index bb9b0c3d98..37696e63ac 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/URLTest.java
@@ -652,4 +652,32 @@ public void testUserNamePasswordContainsAt(){
assertEquals("1.0.0", url.getParameter("version"));
assertEquals("morgan", url.getParameter("application"));
}
+
+
+ @Test
+ public void testIpV6Address(){
+ // Test username or password contains "@"
+ URL url = URL.valueOf("ad@min111:haha@1234@2001:0db8:85a3:08d3:1319:8a2e:0370:7344:20880/context/path?version=1.0.0&application=morgan");
+ assertNull(url.getProtocol());
+ assertEquals("ad@min111", url.getUsername());
+ assertEquals("haha@1234", url.getPassword());
+ assertEquals("2001:0db8:85a3:08d3:1319:8a2e:0370:7344", url.getHost());
+ assertEquals(20880, url.getPort());
+ assertEquals("context/path", url.getPath());
+ assertEquals(2, url.getParameters().size());
+ assertEquals("1.0.0", url.getParameter("version"));
+ assertEquals("morgan", url.getParameter("application"));
+ }
+
+ @Test
+ public void testIpV6AddressWithScopeId(){
+ URL url = URL.valueOf("2001:0db8:85a3:08d3:1319:8a2e:0370:7344%5/context/path?version=1.0.0&application=morgan");
+ assertNull(url.getProtocol());
+ assertEquals("2001:0db8:85a3:08d3:1319:8a2e:0370:7344%5", url.getHost());
+ assertEquals(0, url.getPort());
+ assertEquals("context/path", url.getPath());
+ assertEquals(2, url.getParameters().size());
+ assertEquals("1.0.0", url.getParameter("version"));
+ assertEquals("morgan", url.getParameter("application"));
+ }
}
\ No newline at end of file
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/DubboAppenderTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/DubboAppenderTest.java
index 93cfc7eb3d..ee01c42383 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/DubboAppenderTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/DubboAppenderTest.java
@@ -17,8 +17,6 @@
package org.apache.dubbo.common.utils;
-import org.apache.dubbo.common.utils.DubboAppender;
-import org.apache.dubbo.common.utils.Log;
import org.apache.log4j.Category;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
index e998df71eb..caa216f930 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/NetUtilsTest.java
@@ -17,8 +17,10 @@
package org.apache.dubbo.common.utils;
+import org.junit.Ignore;
import org.junit.Test;
+import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
@@ -180,4 +182,31 @@ public void testToURL() throws Exception {
String url = NetUtils.toURL("dubbo", "host", 1234, "foo");
assertThat(url, equalTo("dubbo://host:1234/foo"));
}
+
+ @Test
+ public void testIsValidV6Address() {
+ String saved = System.getProperty("java.net.preferIPv6Addresses", "false");
+ System.setProperty("java.net.preferIPv6Addresses", "true");
+ InetAddress address = NetUtils.getLocalAddress();
+ if (address instanceof Inet6Address) {
+ assertThat(NetUtils.isValidV6Address((Inet6Address) address), equalTo(true));
+ }
+ System.setProperty("java.net.preferIPv6Addresses", saved);
+ }
+
+ /**
+ * Mockito starts to support mocking final classes since 2.1.0
+ * see https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2#unmockable
+ * But enable it will cause other UT to fail.
+ * Therefore currently disabling this UT.
+ */
+ @Ignore
+ @Test
+ public void testNormalizeV6Address() {
+ Inet6Address address = mock(Inet6Address.class);
+ when(address.getHostAddress()).thenReturn("fe80:0:0:0:894:aeec:f37d:23e1%en0");
+ when(address.getScopeId()).thenReturn(5);
+ InetAddress normalized = NetUtils.normalizeV6Address(address);
+ assertThat(normalized.getHostAddress(), equalTo("fe80:0:0:0:894:aeec:f37d:23e1%5"));
+ }
}
\ No newline at end of file
diff --git a/dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/Consumer.java b/dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/Consumer.java
index 03e9a1a9e2..8ad330e978 100644
--- a/dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/Consumer.java
+++ b/dubbo-demo/dubbo-demo-consumer/src/main/java/org/apache/dubbo/demo/consumer/Consumer.java
@@ -21,26 +21,23 @@
public class Consumer {
+ /**
+ * To get ipv6 address to work, add
+ * System.setProperty("java.net.preferIPv6Addresses", "true");
+ * before running your application.
+ */
public static void main(String[] args) {
- //Prevent to get IPV6 address,this way only work in debug mode
- //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
- System.setProperty("java.net.preferIPv4Stack", "true");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
DemoService demoService = (DemoService) context.getBean("demoService"); // get remote service proxy
-
while (true) {
try {
Thread.sleep(1000);
String hello = demoService.sayHello("world"); // call remote method
System.out.println(hello); // get result
-
} catch (Throwable throwable) {
throwable.printStackTrace();
}
-
-
}
-
}
}
diff --git a/dubbo-demo/dubbo-demo-provider/src/main/java/org/apache/dubbo/demo/provider/Provider.java b/dubbo-demo/dubbo-demo-provider/src/main/java/org/apache/dubbo/demo/provider/Provider.java
index 6c15ad22ee..998db4c291 100644
--- a/dubbo-demo/dubbo-demo-provider/src/main/java/org/apache/dubbo/demo/provider/Provider.java
+++ b/dubbo-demo/dubbo-demo-provider/src/main/java/org/apache/dubbo/demo/provider/Provider.java
@@ -20,14 +20,14 @@
public class Provider {
+ /**
+ * To get ipv6 address to work, add
+ * System.setProperty("java.net.preferIPv6Addresses", "true");
+ * before running your application.
+ */
public static void main(String[] args) throws Exception {
- //Prevent to get IPV6 address,this way only work in debug mode
- //But you can pass use -Djava.net.preferIPv4Stack=true,then it work well whether in debug mode or not
- System.setProperty("java.net.preferIPv4Stack", "true");
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
-
System.in.read(); // press any key to exit
}
-
}
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
index f444971838..727bca297e 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryDirectory.java
@@ -170,7 +170,7 @@ public void destroy() {
registry.unsubscribe(getConsumerUrl(), this);
}
} catch (Throwable t) {
- logger.warn("unexpeced error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl(), t);
+ logger.warn("unexpected error when unsubscribe service " + serviceKey + "from registry" + registry.getUrl(), t);
}
super.destroy(); // must be executed after unsubscribing
try {
diff --git a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
index a9b3985d85..8ff7daaea2 100644
--- a/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
+++ b/dubbo-registry/dubbo-registry-multicast/src/main/java/org/apache/dubbo/registry/multicast/MulticastRegistry.java
@@ -24,7 +24,6 @@
import org.apache.dubbo.common.utils.ExecutorUtil;
import org.apache.dubbo.common.utils.NamedThreadFactory;
import org.apache.dubbo.common.utils.NetUtils;
-import org.apache.dubbo.common.utils.StringUtils;
import org.apache.dubbo.common.utils.UrlUtils;
import org.apache.dubbo.registry.NotifyListener;
import org.apache.dubbo.registry.support.FailbackRegistry;
@@ -58,11 +57,11 @@
private static final int DEFAULT_MULTICAST_PORT = 1234;
- private final InetAddress mutilcastAddress;
+ private final InetAddress multicastAddress;
- private final MulticastSocket mutilcastSocket;
+ private final MulticastSocket multicastSocket;
- private final int mutilcastPort;
+ private final int multicastPort;
private final ConcurrentMap<URL, Set<URL>> received = new ConcurrentHashMap<URL, Set<URL>>();
@@ -79,23 +78,24 @@ public MulticastRegistry(URL url) {
if (url.isAnyHost()) {
throw new IllegalStateException("registry address == null");
}
- if (!isMulticastAddress(url.getHost())) {
- throw new IllegalArgumentException("Invalid multicast address " + url.getHost() + ", scope: 224.0.0.0 - 239.255.255.255");
- }
try {
- mutilcastAddress = InetAddress.getByName(url.getHost());
- mutilcastPort = url.getPort() <= 0 ? DEFAULT_MULTICAST_PORT : url.getPort();
- mutilcastSocket = new MulticastSocket(mutilcastPort);
- mutilcastSocket.setLoopbackMode(false);
- mutilcastSocket.joinGroup(mutilcastAddress);
+ multicastAddress = InetAddress.getByName(url.getHost());
+ if (!multicastAddress.isMulticastAddress()) {
+ throw new IllegalArgumentException("Invalid multicast address " + url.getHost() +
+ ", ipv4 multicast address scope: 224.0.0.0 - 239.255.255.255.");
+ }
+ multicastPort = url.getPort() <= 0 ? DEFAULT_MULTICAST_PORT : url.getPort();
+ multicastSocket = new MulticastSocket(multicastPort);
+ multicastSocket.setLoopbackMode(false);
+ multicastSocket.joinGroup(multicastAddress);
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
byte[] buf = new byte[2048];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
- while (!mutilcastSocket.isClosed()) {
+ while (!multicastSocket.isClosed()) {
try {
- mutilcastSocket.receive(recv);
+ multicastSocket.receive(recv);
String msg = new String(recv.getData()).trim();
int i = msg.indexOf('\n');
if (i > 0) {
@@ -104,7 +104,7 @@ public void run() {
MulticastRegistry.this.receive(msg, (InetSocketAddress) recv.getSocketAddress());
Arrays.fill(buf, (byte) 0);
} catch (Throwable e) {
- if (!mutilcastSocket.isClosed()) {
+ if (!multicastSocket.isClosed()) {
logger.error(e.getMessage(), e);
}
}
@@ -133,18 +133,6 @@ public void run() {
}
}
- private static boolean isMulticastAddress(String ip) {
- int i = ip.indexOf('.');
- if (i > 0) {
- String prefix = ip.substring(0, i);
- if (StringUtils.isInteger(prefix)) {
- int p = Integer.parseInt(prefix);
- return p >= 224 && p <= 239;
- }
- }
- return false;
- }
-
/**
* Remove the expired providers, only when "clean" parameter is true.
*/
@@ -225,7 +213,7 @@ private void receive(String msg, InetSocketAddress remoteAddress) {
&& !NetUtils.getLocalHost().equals(host)) { // Multiple processes in the same machine cannot be unicast with unicast or there will be only one process receiving information
unicast(Constants.REGISTER + " " + u.toFullString(), host);
} else {
- broadcast(Constants.REGISTER + " " + u.toFullString());
+ multicast(Constants.REGISTER + " " + u.toFullString());
}
}
}
@@ -234,14 +222,14 @@ private void receive(String msg, InetSocketAddress remoteAddress) {
}*/
}
- private void broadcast(String msg) {
+ private void multicast(String msg) {
if (logger.isInfoEnabled()) {
- logger.info("Send broadcast message: " + msg + " to " + mutilcastAddress + ":" + mutilcastPort);
+ logger.info("Send multicast message: " + msg + " to " + multicastAddress + ":" + multicastPort);
}
try {
byte[] data = (msg + "\n").getBytes();
- DatagramPacket hi = new DatagramPacket(data, data.length, mutilcastAddress, mutilcastPort);
- mutilcastSocket.send(hi);
+ DatagramPacket hi = new DatagramPacket(data, data.length, multicastAddress, multicastPort);
+ multicastSocket.send(hi);
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
@@ -249,12 +237,12 @@ private void broadcast(String msg) {
private void unicast(String msg, String host) {
if (logger.isInfoEnabled()) {
- logger.info("Send unicast message: " + msg + " to " + host + ":" + mutilcastPort);
+ logger.info("Send unicast message: " + msg + " to " + host + ":" + multicastPort);
}
try {
byte[] data = (msg + "\n").getBytes();
- DatagramPacket hi = new DatagramPacket(data, data.length, InetAddress.getByName(host), mutilcastPort);
- mutilcastSocket.send(hi);
+ DatagramPacket hi = new DatagramPacket(data, data.length, InetAddress.getByName(host), multicastPort);
+ multicastSocket.send(hi);
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
@@ -262,12 +250,12 @@ private void unicast(String msg, String host) {
@Override
protected void doRegister(URL url) {
- broadcast(Constants.REGISTER + " " + url.toFullString());
+ multicast(Constants.REGISTER + " " + url.toFullString());
}
@Override
protected void doUnregister(URL url) {
- broadcast(Constants.UNREGISTER + " " + url.toFullString());
+ multicast(Constants.UNREGISTER + " " + url.toFullString());
}
@Override
@@ -275,7 +263,7 @@ protected void doSubscribe(URL url, NotifyListener listener) {
if (Constants.ANY_VALUE.equals(url.getServiceInterface())) {
admin = true;
}
- broadcast(Constants.SUBSCRIBE + " " + url.toFullString());
+ multicast(Constants.SUBSCRIBE + " " + url.toFullString());
synchronized (listener) {
try {
listener.wait(url.getParameter(Constants.TIMEOUT_KEY, Constants.DEFAULT_TIMEOUT));
@@ -290,13 +278,13 @@ protected void doUnsubscribe(URL url, NotifyListener listener) {
&& url.getParameter(Constants.REGISTER_KEY, true)) {
unregister(url);
}
- broadcast(Constants.UNSUBSCRIBE + " " + url.toFullString());
+ multicast(Constants.UNSUBSCRIBE + " " + url.toFullString());
}
@Override
public boolean isAvailable() {
try {
- return mutilcastSocket != null;
+ return multicastSocket != null;
} catch (Throwable t) {
return false;
}
@@ -316,8 +304,8 @@ public void destroy() {
logger.warn(t.getMessage(), t);
}
try {
- mutilcastSocket.leaveGroup(mutilcastAddress);
- mutilcastSocket.close();
+ multicastSocket.leaveGroup(multicastAddress);
+ multicastSocket.close();
} catch (Throwable t) {
logger.warn(t.getMessage(), t);
}
@@ -439,8 +427,8 @@ public void unsubscribe(URL url, NotifyListener listener) {
return urls;
}
- public MulticastSocket getMutilcastSocket() {
- return mutilcastSocket;
+ public MulticastSocket getMulticastSocket() {
+ return multicastSocket;
}
public Map<URL, Set<URL>> getReceived() {
diff --git a/dubbo-registry/dubbo-registry-multicast/src/test/java/org/apache/dubbo/registry/multicast/MulticastRegistryTest.java b/dubbo-registry/dubbo-registry-multicast/src/test/java/org/apache/dubbo/registry/multicast/MulticastRegistryTest.java
index d448711eae..22d933f555 100644
--- a/dubbo-registry/dubbo-registry-multicast/src/test/java/org/apache/dubbo/registry/multicast/MulticastRegistryTest.java
+++ b/dubbo-registry/dubbo-registry-multicast/src/test/java/org/apache/dubbo/registry/multicast/MulticastRegistryTest.java
@@ -52,7 +52,7 @@ public void setUp() {
/**
* Test method for {@link org.apache.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)}.
*/
- @Test(expected = IllegalArgumentException.class)
+ @Test(expected = IllegalStateException.class)
public void testUrlError() {
URL errorUrl = URL.valueOf("multicast://mullticast/");
new MulticastRegistry(errorUrl);
@@ -177,12 +177,12 @@ public void testAvailability() {
*/
@Test
public void testDestroy() {
- MulticastSocket socket = registry.getMutilcastSocket();
+ MulticastSocket socket = registry.getMulticastSocket();
assertFalse(socket.isClosed());
// then destroy, the multicast socket will be closed
registry.destroy();
- socket = registry.getMutilcastSocket();
+ socket = registry.getMulticastSocket();
assertTrue(socket.isClosed());
}
@@ -193,7 +193,7 @@ public void testDestroy() {
public void testDefaultPort() {
MulticastRegistry multicastRegistry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.7"));
try {
- MulticastSocket multicastSocket = multicastRegistry.getMutilcastSocket();
+ MulticastSocket multicastSocket = multicastRegistry.getMulticastSocket();
Assert.assertEquals(1234, multicastSocket.getLocalPort());
} finally {
multicastRegistry.destroy();
@@ -208,7 +208,7 @@ public void testCustomedPort() {
int port = NetUtils.getAvailablePort();
MulticastRegistry multicastRegistry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.7:" + port));
try {
- MulticastSocket multicastSocket = multicastRegistry.getMutilcastSocket();
+ MulticastSocket multicastSocket = multicastRegistry.getMulticastSocket();
assertEquals(port, multicastSocket.getLocalPort());
} finally {
multicastRegistry.destroy();
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org