package org.archive.format.gzip.zipnum; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import org.archive.format.gzip.GZIPMemberSeries; import org.archive.format.gzip.GZIPSeriesMember; import org.archive.streamcontext.SimpleStream; import junit.framework.TestCase; public class ZipNumWriterTest extends TestCase { public void testAddRecord() throws IOException { Charset UTF8 = Charset.forName("UTF-8"); File main = File.createTempFile("test-znw",".main"); File summ = File.createTempFile("test-znw",".summ"); main.deleteOnExit(); summ.deleteOnExit(); System.out.format("Summ: %s\n", summ.getAbsolutePath()); int limit = 10; ZipNumWriter znw = new ZipNumWriter(new FileOutputStream(main,false), new FileOutputStream(summ,false), limit); for(int i = 0; i < 1000; i++) { znw.addRecord(String.format("%06d\n",i).getBytes(UTF8)); } znw.close(); InputStreamReader isr = new InputStreamReader(new FileInputStream(summ),UTF8); BufferedReader br = new BufferedReader(isr); String line = null; int count = 0; while(true) { line = br.readLine(); if(line == null) { break; } String parts[] = line.split("\t"); FileChannel fc = new RandomAccessFile(main, "r").getChannel(); long offset = Long.parseLong(parts[0]); int len = Integer.parseInt(parts[1]); byte[] gz = new byte[len]; ByteBuffer bb = ByteBuffer.wrap(gz); int amt = fc.read(bb, offset); assertEquals(amt,len); ByteArrayInputStream bais = new ByteArrayInputStream(gz); GZIPMemberSeries gzms = new GZIPMemberSeries(new SimpleStream(bais)); GZIPSeriesMember m = gzms.getNextMember(); m.skipMember(); gzms.close(); count++; } assertEquals(count,100); br.close(); } }