Skip to content

Commit

Permalink
Tests: Fix InboundTest so it can be run without a real router
Browse files Browse the repository at this point in the history
  • Loading branch information
zzz committed Sep 2, 2019
1 parent 81ab35a commit 566221b
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 52 deletions.
@@ -1,6 +1,7 @@
package net.i2p.router.tunnel;

import net.i2p.data.Hash;
import net.i2p.router.ProfileManager;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
import net.i2p.util.SimpleByteCache;
Expand Down Expand Up @@ -79,8 +80,13 @@ public boolean retrievePreprocessedData(byte orig[], int offset, int length, Has
int rtt = 0; // dunno... may not be related to an rtt
if (_log.shouldLog(Log.DEBUG))
_log.debug("Received a " + length + "byte message through tunnel " + _config);
for (int i = 0; i < _config.getLength(); i++)
_context.profileManager().tunnelDataPushed(_config.getPeer(i), rtt, length);
ProfileManager pm = _context.profileManager();
// null for unit tests
if (pm != null) {
for (int i = 0; i < _config.getLength(); i++) {
pm.tunnelDataPushed(_config.getPeer(i), rtt, length);
}
}
_config.incrementVerifiedBytesTransferred(length);
}

Expand Down
50 changes: 0 additions & 50 deletions router/java/test/junit/net/i2p/router/tunnel/InboundIT.java

This file was deleted.

89 changes: 89 additions & 0 deletions router/java/test/junit/net/i2p/router/tunnel/InboundTest.java
@@ -0,0 +1,89 @@
package net.i2p.router.tunnel;
/*
* free (adj.): unencumbered; not under the control of others
* Written by jrandom in 2003 and released into the public domain
* with no warranty of any kind, either expressed or implied.
* It probably won't make your computer catch on fire, or eat
* your children, but it might. Use at your own risk.
*
*/

import junit.framework.TestCase;
import org.junit.Test;
import static org.junit.Assert.assertTrue;

import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
import net.i2p.router.RouterContext;

/**
* 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);
}

@Test
@SuppressWarnings("deprecation")
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));
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();
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)));

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 TCConfig(_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;
}
}

0 comments on commit 566221b

Please sign in to comment.