protected KeyListenerTracker( boolean forInserts, boolean forSSKs, boolean forRT, RandomSource random, ClientRequestScheduler sched, byte[] globalSalt, boolean persistent) { this.isInsertScheduler = forInserts; this.isSSKScheduler = forSSKs; this.isRTScheduler = forRT; this.sched = sched; keyListeners = new ArrayList<KeyListener>(); if (globalSalt == null) { globalSalt = new byte[32]; random.nextBytes(globalSalt); } this.globalSalt = globalSalt; this.persistent = persistent; }
/** * @param args * @throws InvalidThresholdException * @throws IOException * @throws NodeInitException * @throws InterruptedException */ public static void main(String[] args) throws InvalidThresholdException, IOException, NodeInitException, InterruptedException { Node secondNode = null; try { String ipOverride = null; if (args.length > 0) ipOverride = args[0]; File dir = new File("bootstrap-pull-test"); FileUtil.removeAll(dir); RandomSource random = NodeStarter.globalTestInit(dir.getPath(), false, Logger.ERROR, "", false); byte[] seed = new byte[64]; random.nextBytes(seed); MersenneTwister fastRandom = new MersenneTwister(seed); File seednodes = new File("seednodes.fref"); if (!seednodes.exists() || seednodes.length() == 0 || !seednodes.canRead()) { System.err.println("Unable to read seednodes.fref, it doesn't exist, or is empty"); System.exit(EXIT_NO_SEEDNODES); } File secondInnerDir = new File(dir, Integer.toString(DARKNET_PORT)); secondInnerDir.mkdir(); FileInputStream fis = new FileInputStream(seednodes); FileUtil.writeTo(fis, new File(secondInnerDir, "seednodes.fref")); fis.close(); // Create the test data System.out.println("Creating test data."); File dataFile = File.createTempFile("testdata", ".tmp", dir); OutputStream os = new FileOutputStream(dataFile); byte[] buf = new byte[4096]; for (long written = 0; written < TEST_SIZE; ) { fastRandom.nextBytes(buf); int toWrite = (int) Math.min(TEST_SIZE - written, buf.length); os.write(buf, 0, toWrite); written += toWrite; } os.close(); // Insert it to the established node. System.out.println("Inserting test data to an established node."); FreenetURI uri = insertData(dataFile); // Bootstrap a second node. secondInnerDir.mkdir(); fis = new FileInputStream(seednodes); FileUtil.writeTo(fis, new File(secondInnerDir, "seednodes.fref")); fis.close(); PooledExecutor executor = new PooledExecutor(); secondNode = NodeStarter.createTestNode( DARKNET_PORT, OPENNET_PORT, dir.getPath(), false, Node.DEFAULT_MAX_HTL, 0, random, executor, 1000, 5 * 1024 * 1024, true, true, true, true, true, true, true, 12 * 1024, false, true, ipOverride); secondNode.start(true); if (!TestUtil.waitForNodes(secondNode, TARGET_PEERS)) { secondNode.park(); System.exit(EXIT_FAILED_TARGET); } // Fetch the data long startFetchTime = System.currentTimeMillis(); HighLevelSimpleClient client = secondNode.clientCore.makeClient((short) 0); try { client.fetch(uri); } catch (FetchException e) { System.err.println("FETCH FAILED: " + e); e.printStackTrace(); System.exit(EXIT_FETCH_FAILED); return; } long endFetchTime = System.currentTimeMillis(); System.out.println( "RESULT: Fetch took " + (endFetchTime - startFetchTime) + "ms (" + TimeUtil.formatTime(endFetchTime - startFetchTime) + ") of " + uri + " ."); secondNode.park(); System.exit(0); } catch (Throwable t) { System.err.println("CAUGHT: " + t); t.printStackTrace(); try { if (secondNode != null) secondNode.park(); } catch (Throwable t1) { } ; System.exit(EXIT_THREW_SOMETHING); } }
public static DatabaseKey createRandom(RandomSource random) { byte[] databaseKey = new byte[32]; random.nextBytes(databaseKey); return new DatabaseKey(databaseKey, random); }