package voldemort.store.readonly.mr; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.EOFException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.log4j.Logger; import org.junit.Test; import voldemort.TestUtils; import voldemort.utils.ByteUtils; public class HdfsDataFileChunkTest { @Test public void testDataFileChunk() throws IOException { Logger.getRootLogger().removeAllAppenders(); Path path = new Path(TestUtils.createTempDir().getAbsolutePath(), "tempFile"); FileSystem fs = path.getFileSystem(new Configuration()); fs.create(path); HdfsDataFileChunk chunk = new HdfsDataFileChunk(fs, fs.getFileStatus(path)); int jumps = 10; ByteBuffer buffer = ByteBuffer.allocate(jumps); try { chunk.read(buffer, 0); fail("Should have thrown EOFException"); } catch(EOFException e) {} for(int numBytes = 100; numBytes <= 1000; numBytes += 100) { // Clear up file fs.delete(path, true); fs.create(path); // Write random bytes to it byte[] randomBytes = TestUtils.randomBytes(numBytes); FileOutputStream stream = new FileOutputStream(path.toString()); stream.write(randomBytes); stream.close(); // Create chunk set chunk = new HdfsDataFileChunk(fs, fs.getFileStatus(path)); // Read the chunks for(int offset = 0; offset < numBytes; offset += jumps) { buffer.clear(); assertEquals(chunk.read(buffer, offset), jumps); assertEquals(0, ByteUtils.compare(buffer.array(), ByteUtils.copy(randomBytes, offset, offset + jumps))); } } } }