package freenet.node;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import org.junit.After;
import org.junit.Test;
import freenet.client.ClientMetadata;
import freenet.client.FetchContext;
import freenet.client.FetchException;
import freenet.client.FetchResult;
import freenet.client.FetchWaiter;
import freenet.client.HighLevelSimpleClient;
import freenet.client.InsertBlock;
import freenet.client.InsertContext;
import freenet.client.InsertException;
import freenet.client.async.BinaryBlobWriter;
import freenet.client.async.ClientGetter;
import freenet.crypt.DummyRandomSource;
import freenet.keys.FreenetURI;
import freenet.keys.InsertableClientSSK;
import freenet.node.NodeStarter.TestNodeParameters;
import freenet.support.Executor;
import freenet.support.Logger;
import freenet.support.TestProperty;
import freenet.support.LoggerHook.InvalidThresholdException;
import freenet.support.PooledExecutor;
import freenet.support.SimpleReadOnlyArrayBucket;
import freenet.support.api.Bucket;
import freenet.support.api.RandomAccessBucket;
import freenet.support.io.BucketTools;
import freenet.support.io.FileUtil;
/** Creates a node, inserts data to it, and fetches the data back.
* Note that we need one JUnit class per node because we need to actually exit the JVM
* to get rid of all the node threads.
* @author toad
*/
public class NodeAndClientLayerTest extends NodeAndClientLayerTestBase {
private static final File dir = new File("test-fetch-pull-single-node");
@Test
public void testFetchPullSingleNode() throws InvalidThresholdException, NodeInitException, InsertException, FetchException, IOException {
if(!TestProperty.EXTENSIVE) return;
DummyRandomSource random = new DummyRandomSource(25312);
final Executor executor = new PooledExecutor();
FileUtil.removeAll(dir);
dir.mkdir();
NodeStarter.globalTestInit(dir, false,
Logger.LogLevel.ERROR, "", true, random);
TestNodeParameters params = new TestNodeParameters();
params.random = new DummyRandomSource(253121);
params.ramStore = true;
params.storeSize = FILE_SIZE * 3;
params.baseDirectory = dir;
params.executor = executor;
Node node = NodeStarter.createTestNode(params);
node.start(false);
HighLevelSimpleClient client =
node.clientCore.makeClient((short)0, false, false);
InsertContext ictx = client.getInsertContext(true);
ictx.localRequestOnly = true;
InsertBlock block = generateBlock(random);
FreenetURI uri =
client.insert(block, "", (short)0, ictx);
assertEquals(uri.getKeyType(), "SSK");
FetchContext ctx = client.getFetchContext(FILE_SIZE*2);
ctx.localRequestOnly = true;
FetchWaiter fw = new FetchWaiter(rc);
client.fetch(uri, FILE_SIZE*2, fw, ctx, (short)0);
FetchResult result = fw.waitForCompletion();
assertTrue(BucketTools.equalBuckets(result.asBucket(), block.getData()));
}
@After
public void cleanUp() {
FileUtil.removeAll(dir);
}
}