I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit e34cd0ba authored by kytv's avatar kytv
Browse files

merge of '27711f734eca9313f7e0742dc1a6df964b744b86'

     and '4d27e2149e5bb50280599426f3884dfcc04f920a'
parents 18664d39 680c31b8
No related branches found
No related tags found
No related merge requests found
...@@ -6,41 +6,27 @@ import java.util.ArrayList; ...@@ -6,41 +6,27 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.i2p.data.Hash; import net.i2p.data.Hash;
import net.i2p.data.RouterIdentity;
import net.i2p.data.RouterInfo;
import net.i2p.data.TunnelId; import net.i2p.data.TunnelId;
import net.i2p.data.i2np.DataMessage; import net.i2p.data.i2np.DataMessage;
import net.i2p.data.i2np.I2NPMessage; import net.i2p.data.i2np.I2NPMessage;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; 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 TunnelGateway.Sender _sender;
protected TestReceiver _receiver; protected TestReceiver _receiver;
protected TunnelGateway _gw; private TunnelGateway _gw;
@BeforeClass @BeforeClass
public static void globalSetUp() { public static void gatewayClassSetup() {
// 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);
_pumper = new TunnelGatewayPumper(_context); _pumper = new TunnelGatewayPumper(_context);
_config = prepareConfig(8);
} }
@Before @Before
...@@ -50,16 +36,105 @@ public abstract class GatewayTestBase { ...@@ -50,16 +36,105 @@ public abstract class GatewayTestBase {
_gw = new PumpedTunnelGateway(_context, _preprocessor, _sender, _receiver, _pumper); _gw = new PumpedTunnelGateway(_context, _preprocessor, _sender, _receiver, _pumper);
} }
/** sets up the sender and receiver. Subclasses must override */
protected abstract void setupSenderAndReceiver(); protected abstract void setupSenderAndReceiver();
private static class TestRouterIdentity extends RouterIdentity { /**
@Override * @return at which hop to start the decryption process
public Hash getHash() { */
return Hash.FAKE_HASH; 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); DataMessage m = new DataMessage(_context);
m.setData(new byte[size]); m.setData(new byte[size]);
java.util.Arrays.fill(m.getData(), (byte)0xFF); java.util.Arrays.fill(m.getData(), (byte)0xFF);
...@@ -82,7 +157,7 @@ public abstract class GatewayTestBase { ...@@ -82,7 +157,7 @@ public abstract class GatewayTestBase {
public long receiveEncrypted(byte[] encrypted) { public long receiveEncrypted(byte[] encrypted) {
// fake all the hops... // 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)); HopProcessor hop = new HopProcessor(_context, _config.getConfig(i));
assertTrue(hop.process(encrypted, 0, encrypted.length, _config.getConfig(i).getReceiveFrom())); assertTrue(hop.process(encrypted, 0, encrypted.length, _config.getConfig(i).getReceiveFrom()));
} }
...@@ -110,38 +185,4 @@ public abstract class GatewayTestBase { ...@@ -110,38 +185,4 @@ public abstract class GatewayTestBase {
return null; 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;
}
} }
...@@ -8,16 +8,8 @@ package net.i2p.router.tunnel; ...@@ -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 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 * Quick unit test for base functionality of inbound tunnel
...@@ -32,93 +24,9 @@ public class InboundGatewayTest extends GatewayTestBase { ...@@ -32,93 +24,9 @@ public class InboundGatewayTest extends GatewayTestBase {
_receiver = new InboundTestReceiver(_config); _receiver = new InboundTestReceiver(_config);
} }
@Test @Override
public void testSmall() throws Exception { protected int getLastHop() {
int runCount = 1; return 2;
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))));
}
} }
private class InboundTestReceiver extends TestReceiver { private class InboundTestReceiver extends TestReceiver {
......
...@@ -8,78 +8,42 @@ package net.i2p.router.tunnel; ...@@ -8,78 +8,42 @@ package net.i2p.router.tunnel;
* *
*/ */
import junit.framework.TestCase; import org.junit.Test;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper; import net.i2p.data.DataHelper;
import net.i2p.data.Hash; 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 * Quick unit test for base functionality of inbound tunnel
* operation * operation
* *
*/ */
public class InboundTest extends TestCase{ public class InboundTest extends RouterTestBase {
private RouterContext _context;
public void setUp() {
_context = new RouterContext(null);
}
@Test
public void testInbound() { public void testInbound() {
int numHops = 8; int numHops = 8;
TunnelCreatorConfig config = prepareConfig(numHops);
byte orig[] = new byte[128]; byte orig[] = new byte[128];
byte message[] = new byte[128]; byte message[] = new byte[128];
_context.random().nextBytes(orig); // might as well fill the IV _context.random().nextBytes(orig); // might as well fill the IV
System.arraycopy(orig, 0, message, 0, message.length); 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); p.process(message, 0, message.length, null);
for (int i = 1; i < numHops-1; i++) { for (int i = 1; i < numHops-1; i++) {
HopProcessor hop = new HopProcessor(_context, config.getConfig(i)); HopProcessor hop = new HopProcessor(_context, _config.getConfig(i));
Hash prev = config.getConfig(i).getReceiveFrom(); Hash prev = _config.getConfig(i).getReceiveFrom();
assertTrue(hop.process(message, 0, message.length, prev)); assertTrue(hop.process(message, 0, message.length, prev));
} }
InboundEndpointProcessor end = new InboundEndpointProcessor(_context, config); InboundEndpointProcessor end = new InboundEndpointProcessor(_context, _config);
assertTrue(end.retrievePreprocessedData(message, 0, message.length, config.getPeer(numHops-2))); assertTrue(end.retrievePreprocessedData(message, 0, message.length, _config.getPeer(numHops-2)));
assertTrue(DataHelper.eq(orig, 16, message, 16, orig.length - 16)); 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;
}
} }
...@@ -8,17 +8,6 @@ package net.i2p.router.tunnel; ...@@ -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 * Quick unit test for base functionality of outbound tunnel
* operation * operation
...@@ -31,131 +20,8 @@ public class OutboundGatewayTest extends GatewayTestBase { ...@@ -31,131 +20,8 @@ public class OutboundGatewayTest extends GatewayTestBase {
_receiver = new TestReceiver(_config); _receiver = new TestReceiver(_config);
} }
@Test @Override
public void testSmall() throws Exception { protected int getLastHop() {
int runCount = 1; return 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;
}
} }
} }
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;
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment