/** * Test {@link DataStore#addRecord(InputStream)} and assert length of added * record. */ protected void doAddRecordTest() throws Exception { ds = createDataStore(); byte[] data = new byte[dataLength]; randomGen.nextBytes(data); DataRecord rec = ds.addRecord(new ByteArrayInputStream(data)); assertEquals(data.length, rec.getLength()); assertRecord(data, rec); ds.close(); }
/** * Testcase to validate {@link DataStore#addRecord(InputStream)} API. */ public void testAddRecord() { try { long start = System.currentTimeMillis(); LOG.info("Testcase: " + this.getClass().getName() + "#addRecord, testDir=" + dataStoreDir); doAddRecordTest(); LOG.info("Testcase: " + this.getClass().getName() + "#addRecord finished, time taken = [" + (System.currentTimeMillis() - start) + "]ms"); } catch (Exception e) { LOG.error("error:", e); fail(e.getMessage()); } }
/** * Testcase to validate {@link DataStore#deleteAllOlderThan(long)} API. */ public void testDeleteAllOlderThan() { try { long start = System.currentTimeMillis(); LOG.info("Testcase: " + this.getClass().getName() + "#testDeleteAllOlderThan, testDir=" + dataStoreDir); doDeleteAllOlderThan(); LOG.info("Testcase: " + this.getClass().getName() + "#testDeleteAllOlderThan finished, time taken = [" + (System.currentTimeMillis() - start) + "]ms"); } catch (Exception e) { LOG.error("error:", e); fail(e.getMessage()); } }
/** * Method to validate mixed scenario use of {@link DataStore}. */ protected void doTestSingleThread() throws Exception { ds = createDataStore(); doTestMultiThreaded(ds, 1); ds.close(); }
ds = createDataStore(); Random random = randomGen; byte[] data = new byte[dataLength]; sleep(10000); long updateTime = System.currentTimeMillis(); ds.updateModifiedDateOnAccess(updateTime); sleep(3000); data = new byte[dataLength]; random.nextBytes(data); assertEquals("only rec2 should be deleted", 1, ds.deleteAllOlderThan(updateTime)); assertNull("rec2 should be null", ds.getRecordIfStored(rec2.getIdentifier())); list.add(rec4.getIdentifier()); while (itr.hasNext()) { assertTrue("record found on list", list.remove(itr.next())); assertEquals("touched records found", 0, list.size()); assertEquals("rec1 touched", true, rec1.getLastModified() > updateTime); assertEquals("rec3 touched", true, rec3.getLastModified() > updateTime); assertEquals("rec4 touched", true, rec4.getLastModified() > updateTime); ds.close();
/** * Assert inputstream read from reference. */ protected void assertReference(byte[] expected, String reference, DataStore store) throws Exception { DataRecord record = store.getRecordFromReference(reference); assertNotNull(record); assertEquals(expected.length, record.getLength()); InputStream stream = record.getStream(); try { assertTrue("binary not equal", org.apache.commons.io.IOUtils.contentEquals( new ByteArrayInputStream(expected), stream)); } finally { stream.close(); } }
/** * Test {@link DataStore#getAllIdentifiers()} and asserts all identifiers * are returned. */ protected void doGetAllIdentifiersTest() throws Exception { ds = createDataStore(); List<DataIdentifier> list = new ArrayList<DataIdentifier>(); Random random = randomGen; byte[] data = new byte[dataLength]; random.nextBytes(data); DataRecord rec = ds.addRecord(new ByteArrayInputStream(data)); list.add(rec.getIdentifier()); data = new byte[dataLength]; random.nextBytes(data); rec = ds.addRecord(new ByteArrayInputStream(data)); list.add(rec.getIdentifier()); data = new byte[dataLength]; random.nextBytes(data); rec = ds.addRecord(new ByteArrayInputStream(data)); list.add(rec.getIdentifier()); Iterator<DataIdentifier> itr = ds.getAllIdentifiers(); while (itr.hasNext()) { assertTrue("record found on list", list.remove(itr.next())); } assertEquals(0, list.size()); ds.close(); }
ds = createDataStore(); Random random = randomGen; byte[] data = new byte[dataLength]; sleep(6000); long updateTime = System.currentTimeMillis(); LOG.debug("updateTime=" + updateTime); sleep(3000); data = new byte[dataLength]; random.nextBytes(data); assertEquals("rec1 touched", true, rec1.getLastModified() > updateTime); LOG.debug("rec2 timestamp=" + rec2.getLastModified()); assertEquals("rec2 not touched", true, rec2.getLastModified() < updateTime); assertEquals("rec3 touched", true, rec3.getLastModified() > updateTime); assertEquals("rec4 touched", true, rec4.getLastModified() > updateTime); ds.close();
/** * Test {@link MultiDataStoreAware#deleteRecord(DataIdentifier)}. */ protected void doDeleteRecordTest() throws Exception { ds = createDataStore(); Random random = randomGen; byte[] data1 = new byte[dataLength]; random.nextBytes(data1); DataRecord rec1 = ds.addRecord(new ByteArrayInputStream(data1)); byte[] data2 = new byte[dataLength]; random.nextBytes(data2); DataRecord rec2 = ds.addRecord(new ByteArrayInputStream(data2)); byte[] data3 = new byte[dataLength]; random.nextBytes(data3); DataRecord rec3 = ds.addRecord(new ByteArrayInputStream(data3)); ((MultiDataStoreAware)ds).deleteRecord(rec2.getIdentifier()); assertNull("rec2 should be null", ds.getRecordIfStored(rec2.getIdentifier())); assertEquals(new ByteArrayInputStream(data1), ds.getRecord(rec1.getIdentifier()).getStream()); assertEquals(new ByteArrayInputStream(data3), ds.getRecord(rec3.getIdentifier()).getStream()); ds.close(); }
/** * Testcase to validate * {@link MultiDataStoreAware#deleteRecord(DataIdentifier)}.API. */ public void testDeleteRecord() { try { long start = System.currentTimeMillis(); LOG.info("Testcase: " + this.getClass().getName() + "#testDeleteRecord, testDir=" + dataStoreDir); doDeleteRecordTest(); LOG.info("Testcase: " + this.getClass().getName() + "#testDeleteRecord finished, time taken = [" + (System.currentTimeMillis() - start) + "]ms"); } catch (Exception e) { LOG.error("error:", e); fail(e.getMessage()); } }
/** * Test if record can be accessed via * {@link DataStore#getRecordFromReference(String)} */ protected void doReferenceTest() throws Exception { ds = createDataStore(); byte[] data = new byte[dataLength]; randomGen.nextBytes(data); String reference; DataRecord record = ds.addRecord(new ByteArrayInputStream(data)); reference = record.getReference(); assertReference(data, reference, ds); ds.close(); }
int size = map.get(rec); rec = ds.getRecord(rec.getIdentifier()); assertEquals(size, rec.getLength()); RandomInputStream expected = new RandomInputStream(size + offset, size); in = readInputStreamRandomly(in, random); assertEquals(expected, in);
/** * Method to assert record with byte array. */ protected void assertRecord(byte[] expected, DataRecord record) throws DataStoreException, IOException { InputStream stream = record.getStream(); try { for (int i = 0; i < expected.length; i++) { assertEquals(expected[i] & 0xff, stream.read()); } assertEquals(-1, stream.read()); } finally { stream.close(); } }
/** * Assert two inputstream */ protected void assertEquals(InputStream a, InputStream b) throws IOException { try { assertTrue("binary not equal", org.apache.commons.io.IOUtils.contentEquals(a, b)); } finally { try { a.close(); } catch (Exception ignore) { } try { b.close(); } catch (Exception ignore) { } } }
/** * Method to validate mixed scenario use of {@link DataStore} in * multi-threaded concurrent environment. */ protected void doTestMultiThreaded() throws Exception { ds = createDataStore(); doTestMultiThreaded(ds, 4); ds.close(); }
/** * Test {@link DataStore#getRecord(DataIdentifier)} and assert length and * inputstream. */ protected void doGetRecordTest() throws Exception { ds = createDataStore(); byte[] data = new byte[dataLength]; randomGen.nextBytes(data); DataRecord rec = ds.addRecord(new ByteArrayInputStream(data)); rec = ds.getRecord(rec.getIdentifier()); assertEquals(data.length, rec.getLength()); assertRecord(data, rec); ds.close(); }