package com.spotify.sparkey; import com.spotify.sparkey.system.BaseSystemTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class IndexHashTest extends BaseSystemTest { @Before public void setUp() throws Exception { super.setUp(); } @After public void tearDown() throws Exception { super.tearDown(); } @Test public void testCorruptHashFile() throws Exception { SparkeyWriter writer = Sparkey.createNew(indexFile, CompressionType.NONE, 1); for (int i = 0; i < 100; i++) { writer.put("key" + i, "value" + i); } writer.close(); TestSparkeyWriter.writeHashAndCompare(writer); corruptFile(indexFile); assertEquals(0, Sparkey.getOpenFiles()); assertEquals(0, Sparkey.getOpenMaps()); try { Sparkey.open(indexFile); fail(); } catch (Exception e) { assertEquals(RuntimeException.class, e.getClass()); } assertEquals(0, Sparkey.getOpenFiles()); assertEquals(0, Sparkey.getOpenMaps()); } private void corruptFile(File indexFile) throws IOException { RandomAccessFile randomAccessFile = new RandomAccessFile(indexFile, "rw"); randomAccessFile.setLength(randomAccessFile.length() - 100); randomAccessFile.close(); } }