Package freenet.store

Source Code of freenet.store.SlashdotStoreTest

package freenet.store;

import java.io.File;
import java.io.IOException;
import java.util.Random;

import junit.framework.TestCase;
import freenet.crypt.DummyRandomSource;
import freenet.crypt.RandomSource;
import freenet.keys.CHKBlock;
import freenet.keys.CHKDecodeException;
import freenet.keys.CHKEncodeException;
import freenet.keys.CHKVerifyException;
import freenet.keys.ClientCHK;
import freenet.keys.ClientCHKBlock;
import freenet.support.PooledExecutor;
import freenet.support.SimpleReadOnlyArrayBucket;
import freenet.support.TrivialTicker;
import freenet.support.api.Bucket;
import freenet.support.compress.Compressor;
import freenet.support.io.ArrayBucketFactory;
import freenet.support.io.BucketTools;
import freenet.support.io.FileUtil;
import freenet.support.io.FilenameGenerator;
import freenet.support.io.TempBucketFactory;

public class SlashdotStoreTest extends TestCase {
 
  private RandomSource strongPRNG = new DummyRandomSource(43210);
  private Random weakPRNG = new Random(12340);
  private PooledExecutor exec = new PooledExecutor();
  private FilenameGenerator fg;
  private TempBucketFactory tbf;
  private File tempDir;

  @Override
  protected void setUp() throws java.lang.Exception {
    tempDir = new File("tmp-slashdotstoretest");
    tempDir.mkdir();
    fg = new FilenameGenerator(weakPRNG, true, tempDir, "temp-");
    tbf = new TempBucketFactory(exec, fg, 4096, 65536, weakPRNG, false, 2*1024*1024, null);
    exec.start();
  }
 
  @Override
  protected void tearDown() {
    FileUtil.removeAll(tempDir);
  }
 
  public void testSimple() throws IOException, CHKEncodeException, CHKVerifyException, CHKDecodeException {
    CHKStore store = new CHKStore();
    new SlashdotStore<CHKBlock>(store, 10, 30*1000, 5*1000, new TrivialTicker(exec), tbf);
   
    // Encode a block
    String test = "test";
    ClientCHKBlock block = encodeBlock(test);
    store.put(block.getBlock(), false);
   
    ClientCHK key = block.getClientKey();
   
    CHKBlock verify = store.fetch(key.getNodeCHK(), false, false, null);
    String data = decodeBlock(verify, key);
    assertEquals(test, data);
  }
 
  public void testDeletion() throws IOException, CHKEncodeException, CHKVerifyException, CHKDecodeException, InterruptedException {
    CHKStore store = new CHKStore();
    new SlashdotStore<CHKBlock>(store, 10, 500, 100, new TrivialTicker(exec), tbf);
   
    // Encode a block
    String test = "test";
    ClientCHKBlock block = encodeBlock(test);
    store.put(block.getBlock(), false);
   
    Thread.sleep(2000);
   
    ClientCHK key = block.getClientKey();
   
    CHKBlock verify = store.fetch(key.getNodeCHK(), false, false, null);
    if(verify == null) return; // Expected outcome
    String data = decodeBlock(verify, key);
    System.err.println("Got data: "+data+" but should have been deleted!");
    assertTrue(false);
  }

  private String decodeBlock(CHKBlock verify, ClientCHK key) throws CHKVerifyException, CHKDecodeException, IOException {
    ClientCHKBlock cb = new ClientCHKBlock(verify, key);
    Bucket output = cb.decode(new ArrayBucketFactory(), 32768, false);
    byte[] buf = BucketTools.toByteArray(output);
    return new String(buf, "UTF-8");
  }

  private ClientCHKBlock encodeBlock(String test) throws CHKEncodeException, IOException {
    byte[] data = test.getBytes("UTF-8");
    SimpleReadOnlyArrayBucket bucket = new SimpleReadOnlyArrayBucket(data);
    return ClientCHKBlock.encode(bucket, false, false, (short)-1, bucket.size(), Compressor.DEFAULT_COMPRESSORDESCRIPTOR, false, null, (byte)0);
  }

}
TOP

Related Classes of freenet.store.SlashdotStoreTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.