package org.openrdf.store.blob; import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.Arrays; import org.openrdf.store.blob.disk.DiskBlobStore; public class DiskBlobStoreTest extends BlobStoreTestCase { @Override public BlobStore createBlobStore(File dir) throws IOException { return BlobStoreFactory.newInstance().openBlobStore(dir); } public void testReopen() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); BlobObject blob = store.openVersion("urn:test:trx1").open("urn:test:file"); CharSequence str = blob.getCharContent(true); assertEquals("test1", str.toString()); } public void testRechange() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); file = trx1.open("urn:test:file").openWriter(); file.append("second version"); file.close(); trx1.commit(); BlobObject blob = store.openVersion("urn:test:trx1").open("urn:test:file"); CharSequence str = blob.getCharContent(true); assertEquals("second version", str.toString()); } public void testAbandon() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); trx1.commit(); assertEquals(Arrays.asList(), Arrays.asList(store.getRecentModifications())); store.erase(); assertEmpty(dir); } public void testStoreHistory() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); file = trx2.open("urn:test:file").openWriter(); file.append("test2"); file.close(); trx2.commit(); assertEquals(Arrays.asList("urn:test:file", "urn:test:file"), Arrays.asList(store.getRecentModifications())); } public void testReopenPastVersion() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); file = trx2.open("urn:test:file").openWriter(); file.append("test2"); file.close(); trx2.commit(); assertEquals("test1", store.openVersion("urn:test:trx1").open("urn:test:file") .getCharContent(true).toString()); assertEquals("test2", store.openVersion("urn:test:trx2").open("urn:test:file") .getCharContent(true).toString()); } public void testReopenPastAfterRestart() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); file = trx2.open("urn:test:file").openWriter(); file.append("test2"); file.close(); trx2.commit(); store = new DiskBlobStore(dir); assertEquals("test1", store.openVersion("urn:test:trx1").open("urn:test:file") .getCharContent(true).toString()); assertEquals("test2", store.openVersion("urn:test:trx2").open("urn:test:file") .getCharContent(true).toString()); } public void testBlobHistory() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file1 = trx1.open("urn:test:file1").openWriter(); file1.append("test1"); file1.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); Writer file2 = trx2.open("urn:test:file2").openWriter(); file2.append("test2"); file2.close(); trx2.commit(); BlobVersion trx3 = store.newVersion("urn:test:trx3"); file1 = trx3.open("urn:test:file1").openWriter(); file1.append("test3"); file1.close(); trx3.commit(); assertEquals( Arrays.asList("urn:test:trx3", "urn:test:trx1"), Arrays.asList(store.newVersion("urn:test:trx4") .open("urn:test:file1").getRecentVersions())); } public void testBlobHistoryAfterRestart() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file1 = trx1.open("urn:test:file1").openWriter(); file1.append("test1"); file1.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); Writer file2 = trx2.open("urn:test:file2").openWriter(); file2.append("test2"); file2.close(); trx2.commit(); BlobVersion trx3 = store.newVersion("urn:test:trx3"); file1 = trx3.open("urn:test:file1").openWriter(); file1.append("test3"); file1.close(); trx3.commit(); store = new DiskBlobStore(dir); assertEquals( Arrays.asList("urn:test:trx3", "urn:test:trx1"), Arrays.asList(store.newVersion("urn:test:trx4") .open("urn:test:file1").getRecentVersions())); } public void testStoreTrimHistory() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test1"); file.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); file = trx2.open("urn:test:file").openWriter(); file.append("test2"); file.close(); trx2.commit(); store.openVersion("urn:test:trx1").erase(); assertEquals(Arrays.asList("urn:test:file"), Arrays.asList(store.getRecentModifications())); assertEquals("test2", store.newVersion("urn:test:trx3").open("urn:test:file") .getCharContent(true).toString()); } public void testDuplicate() throws Exception { BlobVersion trx1 = store.newVersion("urn:test:trx1"); Writer file = trx1.open("urn:test:file").openWriter(); file.append("test"); file.close(); trx1.commit(); BlobVersion trx2 = store.newVersion("urn:test:trx2"); file = trx2.open("urn:test:file").openWriter(); file.append("test"); file.close(); trx2.commit(); assertEquals(Arrays.asList("urn:test:trx1"), Arrays.asList(store.open("urn:test:file").getRecentVersions())); } }