package net.i2p.router.tunnel;
import net.i2p.data.Hash;
import net.i2p.data.router.RouterIdentity;
import net.i2p.data.router.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;
}
}
}