You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Philipp Suter (JIRA)" <ji...@apache.org> on 2016/01/14 18:24:39 UTC
[jira] [Created] (OAK-3884) Enable BROADCAST for UDPBroadcaster
Philipp Suter created OAK-3884:
----------------------------------
Summary: Enable BROADCAST for UDPBroadcaster
Key: OAK-3884
URL: https://issues.apache.org/jira/browse/OAK-3884
Project: Jackrabbit Oak
Issue Type: Improvement
Components: cache
Affects Versions: 1.3.14
Environment: OS X
Reporter: Philipp Suter
Attachments: broadcasttest.patch
It seems that broadcastEncryptedUDP and broadcastUDP test are not working on OS X and most likely other *IX based systems due to the fact that the loopback network interface (e.g. lo0) is not having a BROADCAST option [1].
A workaround patch for the unit tests is listed below.
[1] See answer to: http://serverfault.com/questions/554503/how-do-i-add-a-broadcast-ip-to-the-loopback-interface-under-os-x-using-ifconfig
===BEGIN PATCH===
@@ -22,9 +22,14 @@
import java.io.File;
import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InterfaceAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
import java.nio.ByteBuffer;
import java.sql.Timestamp;
import java.util.ArrayList;
+import java.util.Enumeration;
import java.util.Random;
import java.util.concurrent.Callable;
@@ -37,7 +42,6 @@
import org.apache.jackrabbit.oak.plugins.document.persistentCache.broadcast.TCPBroadcaster;
import org.apache.jackrabbit.oak.plugins.document.util.StringValue;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.LoggerFactory;
@@ -150,16 +154,17 @@
public void broadcastInMemory() throws Exception {
broadcast("inMemory", 100);
}
-
+
@Test
- @Ignore("OAK-2843")
public void broadcastUDP() throws Exception {
try {
- broadcast("udp:sendTo localhost", 50);
+ String localBroadcastIp = getLocalBroadcastAddress();
+ System.out.println("BROADCASTING TO: " + localBroadcastIp);
+ broadcast("udp:sendTo "+localBroadcastIp, 50);
} catch (AssertionError e) {
// IPv6 didn't work, so try with IPv4
- try {
- broadcast("udp:group 228.6.7.9", 50);
+ broadcast("udp:group 228.6.7.9", 50);
+ try {
} catch (AssertionError e2) {
throwBoth(e, e2);
}
@@ -167,10 +172,11 @@
}
@Test
- @Ignore("OAK-2843")
public void broadcastEncryptedUDP() throws Exception {
try {
- broadcast("udp:group FF78:230::1234;key test;port 9876;sendTo localhost;aes", 50);
+ String localBroadcastIp = getLocalBroadcastAddress();
+ System.out.println("BROADCASTING TO: " + localBroadcastIp);
+ broadcast("udp:group FF78:230::1234;key test;port 9876;sendTo "+localBroadcastIp+";aes", 50);
} catch (AssertionError e) {
try {
broadcast("udp:group 228.6.7.9;key test;port 9876;aes", 50);
@@ -178,6 +184,26 @@
throwBoth(e, e2);
}
}
+ }
+
+ private static String getLocalBroadcastAddress(){
+ try {
+ Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
+ while (interfaces.hasMoreElements()) {
+ NetworkInterface networkInterface = interfaces.nextElement();
+ if (networkInterface.isLoopback())
+ continue;
+ for (InterfaceAddress interfaceAddress :
+ networkInterface.getInterfaceAddresses()) {
+ InetAddress broadcast = interfaceAddress.getBroadcast();
+ if (broadcast != null)
+ return broadcast.getHostAddress();
+ }
+ }
+ } catch (SocketException e) {
+ e.printStackTrace();
+ }
+ return null;
}
private static void throwBoth(AssertionError e, AssertionError e2) throws AssertionError {
===END PATCH===
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)