package net.i2p.router.naming; import junit.framework.TestCase; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; import java.util.Set; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.data.Destination; public class BlockfileNamingServiceTest extends TestCase { BlockfileNamingService _bns; List<String> _names; File hostsTxt, routerDir; @SuppressWarnings({ "unchecked", "rawtypes" }) public void setUp() throws Exception { I2PAppContext ctx = new I2PAppContext(); routerDir = ctx.getRouterDir(); // first load the list of hosts that will be queried InputStream is = getClass().getResourceAsStream("/hosts.txt"); Properties props = new Properties(); assertNotNull("test classpath not set correctly",is); DataHelper.loadProps(props, is, true); _names = new ArrayList<String>((Set<String>) (Set) props.keySet()); // TODO-Java6: s/keySet()/stringPropertyNames()/ Collections.shuffle(_names); is.close(); // then copy the hosts.txt file so that the naming service can load them hostsTxt = new File(routerDir, "hosts.txt"); OutputStream os = new BufferedOutputStream(new FileOutputStream(hostsTxt)); is = getClass().getResourceAsStream("/hosts.txt"); byte [] b = new byte[8196]; int read = 0; while ((read = is.read(b)) > 0 ) os.write(b,0,read); os.flush(); os.close(); _bns = new BlockfileNamingService(ctx); } public void tearDown() { _bns.shutdown(); if (routerDir != null) { File f = new File(routerDir,"hostsdb.blockfile"); f.delete(); } if (hostsTxt != null) hostsTxt.delete(); } public void testRepeatedLookup() throws Exception{ int found = 0; int notfound = 0; int rfound = 0; int rnotfound = 0; for (String name : _names) { Destination dest = _bns.lookup(name); if (dest != null) { found++; String reverse = _bns.reverseLookup(dest); if (reverse != null) rfound++; else rnotfound++; } else { notfound++; } } assertEquals(0, notfound); assertEquals(0, rnotfound); } }