package freenet.support.io; import static org.junit.Assert.assertArrayEquals; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.util.Random; import freenet.support.api.RandomAccessBuffer; public class RandomAccessFileWrapperTest extends RandomAccessBufferTestBase { private static final int[] TEST_LIST = new int[] { 0, 1, 32, 64, 32768, 1024*1024, 1024*1024+1 }; public RandomAccessFileWrapperTest() { super(TEST_LIST); } private File base = new File("tmp.random-access-file-wrapper-test"); public void setUp() { base.mkdir(); } public void tearDown() { FileUtil.removeAll(base); } @Override protected RandomAccessBuffer construct(long size) throws IOException { File f = File.createTempFile("test", ".tmp", base); return new FileRandomAccessBuffer(f, size, false); } public void testStoreTo() throws IOException, StorageFormatException, ResumeFailedException { File tempFile = File.createTempFile("test-storeto", ".tmp", base); byte[] buf = new byte[4096]; Random r = new Random(1267612); r.nextBytes(buf); FileRandomAccessBuffer rafw = new FileRandomAccessBuffer(tempFile, buf.length, false); rafw.pwrite(0, buf, 0, buf.length); byte[] tmp = new byte[buf.length]; rafw.pread(0, tmp, 0, buf.length); assertArrayEquals(buf, tmp); ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); rafw.storeTo(dos); dos.close(); rafw.close(); DataInputStream dis = new DataInputStream(new ByteArrayInputStream(baos.toByteArray())); FileRandomAccessBuffer restored = (FileRandomAccessBuffer) BucketTools.restoreRAFFrom(dis, null, null, null); assertEquals(buf.length, restored.size()); assertEquals(rafw, restored); tmp = new byte[buf.length]; restored.pread(0, tmp, 0, buf.length); assertArrayEquals(buf, tmp); restored.close(); restored.free(); } }