diff --git a/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java b/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java index 0b1f64fd1fb52b569430a48a1eaf6c7d974fb9d7..980e77353d9be012af6161bb04485b0eeb07f90c 100644 --- a/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java +++ b/router/java/test/junit/net/i2p/router/tunnel/GatewayTestBase.java @@ -6,41 +6,27 @@ import java.util.ArrayList; import java.util.List; import net.i2p.data.Hash; -import net.i2p.data.RouterIdentity; -import net.i2p.data.RouterInfo; import net.i2p.data.TunnelId; import net.i2p.data.i2np.DataMessage; import net.i2p.data.i2np.I2NPMessage; -import net.i2p.router.Router; -import net.i2p.router.RouterContext; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Test; -public abstract class GatewayTestBase { +public abstract class GatewayTestBase extends RouterTestBase { - protected static RouterContext _context; - protected static TunnelGatewayPumper _pumper; - protected static TunnelCreatorConfig _config; - protected TunnelGateway.QueuePreprocessor _preprocessor; + private static TunnelGatewayPumper _pumper; + + private TunnelGateway.QueuePreprocessor _preprocessor; protected TunnelGateway.Sender _sender; protected TestReceiver _receiver; - protected TunnelGateway _gw; + private TunnelGateway _gw; @BeforeClass - public static void globalSetUp() { - // order of these matters - Router r = new Router(); - _context = new RouterContext(r); - _context.initAll(); - r.runRouter(); - RouterIdentity rIdentity = new TestRouterIdentity(); - RouterInfo rInfo = new RouterInfo(); - rInfo.setIdentity(rIdentity); - r.setRouterInfo(rInfo); + public static void gatewayClassSetup() { _pumper = new TunnelGatewayPumper(_context); - _config = prepareConfig(8); } @Before @@ -50,16 +36,105 @@ public abstract class GatewayTestBase { _gw = new PumpedTunnelGateway(_context, _preprocessor, _sender, _receiver, _pumper); } + /** sets up the sender and receiver. Subclasses must override */ protected abstract void setupSenderAndReceiver(); - private static class TestRouterIdentity extends RouterIdentity { - @Override - public Hash getHash() { - return Hash.FAKE_HASH; + /** + * @return at which hop to start the decryption process + */ + protected abstract int getLastHop(); + + @Test + public void testSmall() throws Exception { + int runCount = 1; + + List messages = new ArrayList(runCount); + long start = _context.clock().now(); + + for (int i = 0; i < runCount; i++) { + DataMessage m = getTestMessage(64); + messages.add(m); + _gw.add(m, null, null); + } + + Thread.sleep(1000); + + List received = _receiver.clearReceived(); + for (int i = 0; i < messages.size(); i++) { + assertTrue(received.contains(((I2NPMessage)messages.get(i)))); + } + } + + @Test + public void testRouter() throws Exception { + int runCount = 1; + + List messages = new ArrayList(runCount); + long start = _context.clock().now(); + + for (int i = 0; i < runCount; i++) { + DataMessage m = getTestMessage(64); + Hash to = new Hash(new byte[Hash.HASH_LENGTH]); + java.util.Arrays.fill(to.getData(), (byte)0xFF); + messages.add(m); + _gw.add(m, to, null); + } + + Thread.sleep(1000); + + List received = _receiver.clearReceived(); + for (int i = 0; i < messages.size(); i++) { + assertTrue(received.contains(((I2NPMessage)messages.get(i)))); } } - protected static DataMessage getTestMessage(int size) { + @Test + public void testTunnel() throws Exception { + int runCount = 1; + + List messages = new ArrayList(runCount); + long start = _context.clock().now(); + + for (int i = 0; i < runCount; i++) { + DataMessage m = getTestMessage(64); + Hash to = new Hash(new byte[Hash.HASH_LENGTH]); + java.util.Arrays.fill(to.getData(), (byte)0xFF); + TunnelId tunnel = new TunnelId(42); + byte data[] = m.toByteArray(); + messages.add(m); + _gw.add(m, to, tunnel); + } + + Thread.sleep(1000); + + List received = _receiver.clearReceived(); + for (int i = 0; i < messages.size(); i++) { + assertTrue(received.contains(((I2NPMessage)messages.get(i)))); + } + } + + @Test + public void testLarge() throws Exception { + int runCount = 1; + + List messages = new ArrayList(runCount); + long start = _context.clock().now(); + + for (int i = 0; i < runCount; i++) { + DataMessage m = getTestMessage(1024); + messages.add(m); + _gw.add(m, null, null); + } + + Thread.sleep(1000); + + List received = _receiver.clearReceived(); + for (int i = 0; i < messages.size(); i++) { + assertTrue(received.contains(((I2NPMessage)messages.get(i)))); + } + } + + private static DataMessage getTestMessage(int size) { DataMessage m = new DataMessage(_context); m.setData(new byte[size]); java.util.Arrays.fill(m.getData(), (byte)0xFF); @@ -82,7 +157,7 @@ public abstract class GatewayTestBase { public long receiveEncrypted(byte[] encrypted) { // fake all the hops... - for (int i = 1; i <= _config.getLength() - 2; i++) { + for (int i = 1; i <= _config.getLength() - getLastHop(); i++) { HopProcessor hop = new HopProcessor(_context, _config.getConfig(i)); assertTrue(hop.process(encrypted, 0, encrypted.length, _config.getConfig(i).getReceiveFrom())); } @@ -110,38 +185,4 @@ public abstract class GatewayTestBase { return null; } } - - - private static TunnelCreatorConfig prepareConfig(int numHops) { - Hash peers[] = new Hash[numHops]; - byte tunnelIds[][] = new byte[numHops][4]; - for (int i = 0; i < numHops; i++) { - peers[i] = new Hash(); - peers[i].setData(new byte[Hash.HASH_LENGTH]); - _context.random().nextBytes(peers[i].getData()); - _context.random().nextBytes(tunnelIds[i]); - } - - TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false); - for (int i = 0; i < numHops; i++) { - config.setPeer(i, peers[i]); - HopConfig cfg = config.getConfig(i); - cfg.setExpiration(_context.clock().now() + 60000); - cfg.setIVKey(_context.keyGenerator().generateSessionKey()); - cfg.setLayerKey(_context.keyGenerator().generateSessionKey()); - if (i > 0) - cfg.setReceiveFrom(peers[i-1]); - else - cfg.setReceiveFrom(null); - cfg.setReceiveTunnelId(tunnelIds[i]); - if (i < numHops - 1) { - cfg.setSendTo(peers[i+1]); - cfg.setSendTunnelId(tunnelIds[i+1]); - } else { - cfg.setSendTo(null); - cfg.setSendTunnelId(null); - } - } - return config; - } } diff --git a/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java b/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java index dd2a0a44c70fd150da43d147ec7edb75d6db0d70..ede9eae4eb81b3bfc1bd63ff374b8073d5101bfa 100644 --- a/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java +++ b/router/java/test/junit/net/i2p/router/tunnel/InboundGatewayTest.java @@ -8,16 +8,8 @@ package net.i2p.router.tunnel; * */ -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; import static junit.framework.TestCase.*; -import net.i2p.data.Hash; -import net.i2p.data.TunnelId; -import net.i2p.data.i2np.DataMessage; -import net.i2p.data.i2np.I2NPMessage; /** * Quick unit test for base functionality of inbound tunnel @@ -32,93 +24,9 @@ public class InboundGatewayTest extends GatewayTestBase { _receiver = new InboundTestReceiver(_config); } - @Test - public void testSmall() throws Exception { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - messages.add(m); - _gw.add(m, null, null); - } - - Thread.sleep(1000); - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testRouter() throws Exception{ - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - Hash to = new Hash(new byte[Hash.HASH_LENGTH]); - java.util.Arrays.fill(to.getData(), (byte)0xFF); - messages.add(m); - _gw.add(m, to, null); - } - - Thread.sleep(1000); - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testTunnel() throws Exception { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - Hash to = new Hash(new byte[Hash.HASH_LENGTH]); - java.util.Arrays.fill(to.getData(), (byte)0xFF); - TunnelId tunnel = new TunnelId(42); - messages.add(m); - _gw.add(m, to, tunnel); - } - - Thread.sleep(1000); - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testLarge() throws Exception { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(1024); - messages.add(m); - _gw.add(m, null, null); - } - - Thread.sleep(1000); - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } + @Override + protected int getLastHop() { + return 2; } private class InboundTestReceiver extends TestReceiver { diff --git a/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java b/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java index b6f60b38f844558281df7c44920771d692bd4aac..c9266b287530dcf5ca50c2363ed7ef5e8cd996cf 100644 --- a/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java +++ b/router/java/test/junit/net/i2p/router/tunnel/InboundTest.java @@ -8,78 +8,42 @@ package net.i2p.router.tunnel; * */ -import junit.framework.TestCase; -import net.i2p.I2PAppContext; +import org.junit.Test; + import net.i2p.data.DataHelper; import net.i2p.data.Hash; -import net.i2p.router.RouterContext; + +import static junit.framework.Assert.assertTrue; /** * Quick unit test for base functionality of inbound tunnel * operation * */ -public class InboundTest extends TestCase{ - private RouterContext _context; - - public void setUp() { - _context = new RouterContext(null); - } +public class InboundTest extends RouterTestBase { + @Test public void testInbound() { int numHops = 8; - TunnelCreatorConfig config = prepareConfig(numHops); byte orig[] = new byte[128]; byte message[] = new byte[128]; _context.random().nextBytes(orig); // might as well fill the IV System.arraycopy(orig, 0, message, 0, message.length); - InboundGatewayProcessor p = new InboundGatewayProcessor(_context, config.getConfig(0)); + InboundGatewayProcessor p = new InboundGatewayProcessor(_context, _config.getConfig(0)); p.process(message, 0, message.length, null); for (int i = 1; i < numHops-1; i++) { - HopProcessor hop = new HopProcessor(_context, config.getConfig(i)); - Hash prev = config.getConfig(i).getReceiveFrom(); + HopProcessor hop = new HopProcessor(_context, _config.getConfig(i)); + Hash prev = _config.getConfig(i).getReceiveFrom(); assertTrue(hop.process(message, 0, message.length, prev)); } - InboundEndpointProcessor end = new InboundEndpointProcessor(_context, config); - assertTrue(end.retrievePreprocessedData(message, 0, message.length, config.getPeer(numHops-2))); + InboundEndpointProcessor end = new InboundEndpointProcessor(_context, _config); + assertTrue(end.retrievePreprocessedData(message, 0, message.length, _config.getPeer(numHops-2))); assertTrue(DataHelper.eq(orig, 16, message, 16, orig.length - 16)); } - private TunnelCreatorConfig prepareConfig(int numHops) { - Hash peers[] = new Hash[numHops]; - byte tunnelIds[][] = new byte[numHops][4]; - for (int i = 0; i < numHops; i++) { - peers[i] = new Hash(); - peers[i].setData(new byte[Hash.HASH_LENGTH]); - _context.random().nextBytes(peers[i].getData()); - _context.random().nextBytes(tunnelIds[i]); - } - - TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false); - for (int i = 0; i < numHops; i++) { - config.setPeer(i, peers[i]); - HopConfig cfg = config.getConfig(i); - cfg.setExpiration(_context.clock().now() + 60000); - cfg.setIVKey(_context.keyGenerator().generateSessionKey()); - cfg.setLayerKey(_context.keyGenerator().generateSessionKey()); - if (i > 0) - cfg.setReceiveFrom(peers[i-1]); - else - cfg.setReceiveFrom(null); - cfg.setReceiveTunnelId(tunnelIds[i]); - if (i < numHops - 1) { - cfg.setSendTo(peers[i+1]); - cfg.setSendTunnelId(tunnelIds[i+1]); - } else { - cfg.setSendTo(null); - cfg.setSendTunnelId(null); - } - } - return config; - } } diff --git a/router/java/test/junit/net/i2p/router/tunnel/OutboundGatewayTest.java b/router/java/test/junit/net/i2p/router/tunnel/OutboundGatewayTest.java index a5bb4adc5fffc9ced34cd368ef68a93e6e5247a2..e6eee6908f0e05b72b1f9669f7ef28fc3b628197 100644 --- a/router/java/test/junit/net/i2p/router/tunnel/OutboundGatewayTest.java +++ b/router/java/test/junit/net/i2p/router/tunnel/OutboundGatewayTest.java @@ -8,17 +8,6 @@ package net.i2p.router.tunnel; * */ -import java.util.ArrayList; -import java.util.List; - -import org.junit.Test; - -import static junit.framework.TestCase.*; -import net.i2p.data.Hash; -import net.i2p.data.TunnelId; -import net.i2p.data.i2np.DataMessage; -import net.i2p.data.i2np.I2NPMessage; - /** * Quick unit test for base functionality of outbound tunnel * operation @@ -31,131 +20,8 @@ public class OutboundGatewayTest extends GatewayTestBase { _receiver = new TestReceiver(_config); } - @Test - public void testSmall() throws Exception { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - messages.add(m); - _gw.add(m, null, null); - } - - Thread.sleep(10000); - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testRouter() { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - Hash to = new Hash(new byte[Hash.HASH_LENGTH]); - java.util.Arrays.fill(to.getData(), (byte)0xFF); - messages.add(m); - _gw.add(m, to, null); - } - - long time = _context.clock().now() - start; - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testTunnel() { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(64); - Hash to = new Hash(new byte[Hash.HASH_LENGTH]); - java.util.Arrays.fill(to.getData(), (byte)0xFF); - TunnelId tunnel = new TunnelId(42); - byte data[] = m.toByteArray(); - messages.add(m); - _gw.add(m, to, tunnel); - } - - long time = _context.clock().now() - start; - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - @Test - public void testLarge() { - int runCount = 1; - - List messages = new ArrayList(runCount); - long start = _context.clock().now(); - - for (int i = 0; i < runCount; i++) { - DataMessage m = getTestMessage(1024); - messages.add(m); - _gw.add(m, null, null); - } - - long time = _context.clock().now() - start; - //try { Thread.sleep(60*1000); } catch (Exception e) {} - - List received = _receiver.clearReceived(); - for (int i = 0; i < messages.size(); i++) { - assertTrue(received.contains(((I2NPMessage)messages.get(i)))); - } - } - - private class TestReceiverr implements TunnelGateway.Receiver, FragmentHandler.DefragmentedReceiver { - private TunnelCreatorConfig _config; - private FragmentHandler _handler; - private List _received; - public TestReceiverr(TunnelCreatorConfig config) { - _config = config; - _handler = new FragmentHandler(_context, TestReceiverr.this); - _received = new ArrayList(1000); - } - public long receiveEncrypted(byte[] encrypted) { - // fake all the hops... - - for (int i = 1; i < _config.getLength(); i++) { - HopProcessor hop = new HopProcessor(_context, _config.getConfig(i)); - assertTrue(hop.process(encrypted, 0, encrypted.length, _config.getConfig(i).getReceiveFrom())); - - } - - - _handler.receiveTunnelMessage(encrypted, 0, encrypted.length); - return -1; // or do we need to return the real message ID? - } - public void receiveComplete(I2NPMessage msg, Hash toRouter, TunnelId toTunnel) { - _received.add(msg); - } - public List clearReceived() { - List rv = _received; - _received = new ArrayList(); - return rv; - } - @Override - public Hash getSendTo() { - // TODO Auto-generated method stub - return null; - } + @Override + protected int getLastHop() { + return 1; } } diff --git a/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java b/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java new file mode 100644 index 0000000000000000000000000000000000000000..9e700d0814ffe688061173bf4f31d20c96ef5f8d --- /dev/null +++ b/router/java/test/junit/net/i2p/router/tunnel/RouterTestBase.java @@ -0,0 +1,74 @@ +package net.i2p.router.tunnel; + +import net.i2p.data.Hash; +import net.i2p.data.RouterIdentity; +import net.i2p.data.RouterInfo; +import net.i2p.router.Router; +import net.i2p.router.RouterContext; + +import org.junit.BeforeClass; + +/** + * Base class for tests that need a functioning router set up. + * + * @author zab + */ +public abstract class RouterTestBase { + + protected static RouterContext _context; + protected static TunnelCreatorConfig _config; + + @BeforeClass + public static void routerClassSetup() { + // order of these matters + Router r = new Router(); + _context = new RouterContext(r); + _context.initAll(); + r.runRouter(); + RouterIdentity rIdentity = new TestRouterIdentity(); + RouterInfo rInfo = new RouterInfo(); + rInfo.setIdentity(rIdentity); + r.setRouterInfo(rInfo); + _config = prepareConfig(8); + } + + private static TunnelCreatorConfig prepareConfig(int numHops) { + Hash peers[] = new Hash[numHops]; + byte tunnelIds[][] = new byte[numHops][4]; + for (int i = 0; i < numHops; i++) { + peers[i] = new Hash(); + peers[i].setData(new byte[Hash.HASH_LENGTH]); + _context.random().nextBytes(peers[i].getData()); + _context.random().nextBytes(tunnelIds[i]); + } + + TunnelCreatorConfig config = new TunnelCreatorConfig(_context, numHops, false); + for (int i = 0; i < numHops; i++) { + config.setPeer(i, peers[i]); + HopConfig cfg = config.getConfig(i); + cfg.setExpiration(_context.clock().now() + 60000); + cfg.setIVKey(_context.keyGenerator().generateSessionKey()); + cfg.setLayerKey(_context.keyGenerator().generateSessionKey()); + if (i > 0) + cfg.setReceiveFrom(peers[i-1]); + else + cfg.setReceiveFrom(null); + cfg.setReceiveTunnelId(tunnelIds[i]); + if (i < numHops - 1) { + cfg.setSendTo(peers[i+1]); + cfg.setSendTunnelId(tunnelIds[i+1]); + } else { + cfg.setSendTo(null); + cfg.setSendTunnelId(null); + } + } + return config; + } + + private static class TestRouterIdentity extends RouterIdentity { + @Override + public Hash getHash() { + return Hash.FAKE_HASH; + } + } +}