From fcdf837f334b8f76d994904a870caf77061601bf Mon Sep 17 00:00:00 2001 From: zzz Date: Thu, 16 May 2013 17:57:33 +0000 Subject: [PATCH] * New buildTest and prepTest targets * Fix UDPEndpoint usage in unit tests: - Restore receive() - Handle null UDPTransport * Fix UDPEndpointTestStandalone compilation --- build.xml | 15 ++++++++--- router/java/build.xml | 3 +++ .../src/net/i2p/router/transport/GeoIPv6.java | 2 ++ .../i2p/router/transport/udp/UDPEndpoint.java | 27 +++++++++++++++++-- .../udp/UDPEndpointTestStandalone.java | 6 ++++- 5 files changed, 47 insertions(+), 6 deletions(-) diff --git a/build.xml b/build.xml index 3b82c868c..6caac7170 100644 --- a/build.xml +++ b/build.xml @@ -1292,20 +1292,29 @@ - + - - + + + + + + + + + + + diff --git a/router/java/build.xml b/router/java/build.xml index f473abf0c..46ec22e49 100644 --- a/router/java/build.xml +++ b/router/java/build.xml @@ -258,7 +258,10 @@ + + + diff --git a/router/java/src/net/i2p/router/transport/GeoIPv6.java b/router/java/src/net/i2p/router/transport/GeoIPv6.java index 605bd0f38..93affec88 100644 --- a/router/java/src/net/i2p/router/transport/GeoIPv6.java +++ b/router/java/src/net/i2p/router/transport/GeoIPv6.java @@ -31,6 +31,8 @@ import net.i2p.util.Log; /** * Generate compressed geoipv6.dat.gz file, and * lookup entries in it. + * + * @since IPv6 */ class GeoIPv6 { diff --git a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java index 7170a7fcb..206eaee7b 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java @@ -1,5 +1,6 @@ package net.i2p.router.transport.udp; +import java.io.IOException; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.Inet4Address; @@ -25,6 +26,7 @@ class UDPEndpoint { private final boolean _isIPv4, _isIPv6; /** + * @param transport may be null for unit testing ONLY * @param listenPort -1 or the requested port, may not be honored * @param bindAddress null ok */ @@ -49,9 +51,11 @@ class UDPEndpoint { throw new SocketException("SSU Unable to bind to a port on " + _bindAddress); } _sender = new UDPSender(_context, _socket, "UDPSender"); - _receiver = new UDPReceiver(_context, _transport, _socket, "UDPReceiver"); _sender.startup(); - _receiver.startup(); + if (_transport != null) { + _receiver = new UDPReceiver(_context, _transport, _socket, "UDPReceiver"); + _receiver.startup(); + } } public synchronized void shutdown() { @@ -157,6 +161,25 @@ class UDPEndpoint { public void send(UDPPacket packet) { _sender.add(packet); } + + /** + * Blocking call to receive the next inbound UDP packet from any peer. + * + * UNIT TESTING ONLY. Direct from the socket. + * In normal operation, UDPReceiver thread injects to PacketHandler queue. + * + * @return null if we have shut down, or on failure + */ + public UDPPacket receive() { + UDPPacket packet = UDPPacket.acquire(_context, true); + try { + _socket.receive(packet.getPacket()); + return packet; + } catch (IOException ioe) { + packet.release(); + return null; + } + } /** * Clear outbound queue, probably in preparation for sending destroy() to everybody. diff --git a/router/java/test/junit/net/i2p/router/transport/udp/UDPEndpointTestStandalone.java b/router/java/test/junit/net/i2p/router/transport/udp/UDPEndpointTestStandalone.java index 5b9d3de59..6f83404d5 100644 --- a/router/java/test/junit/net/i2p/router/transport/udp/UDPEndpointTestStandalone.java +++ b/router/java/test/junit/net/i2p/router/transport/udp/UDPEndpointTestStandalone.java @@ -38,7 +38,11 @@ public class UDPEndpointTestStandalone { _log.debug("Building " + i); UDPEndpoint endpoint = new UDPEndpoint(_context, null, base + i, null); _endpoints[i] = endpoint; - endpoint.startup(); + try { + endpoint.startup(); + } catch (SocketException se) { + throw new RuntimeException(se); + } I2PThread read = new I2PThread(new TestRead(endpoint), "Test read " + i); I2PThread write = new I2PThread(new TestWrite(endpoint), "Test write " + i); //read.setDaemon(true);