*/
public class BdbModuleTest extends TmpDirTestCase {
@SuppressWarnings("unchecked")
public void testDoCheckpoint() throws Exception {
ConfigPath basePath = new ConfigPath("testBase",getTmpDir().getAbsolutePath());
ConfigPath bdbDir = new ConfigPath("bdb","bdb");
bdbDir.setBase(basePath);
FileUtils.deleteDirectory(bdbDir.getFile());
BdbModule bdb = new BdbModule();
bdb.setDir(bdbDir);
bdb.start();
// avoid data from prior runs being mistaken for current run
int randomFactor = RandomUtils.nextInt();
ObjectIdentityBdbManualCache<IdentityCacheableWrapper> testData =
bdb.getOIBCCache("testData", false,IdentityCacheableWrapper.class);
for (int i1 = 0; i1 < 1000; i1++) {
String key = String.valueOf(i1);
final String value = String.valueOf(randomFactor*i1);
String cached = (String)testData.getOrUse(
key,
new Supplier<IdentityCacheableWrapper>(
new IdentityCacheableWrapper(key, value))).get();
assertSame("unexpected prior entry",value,cached);
}
Checkpoint checkpointInProgress = new Checkpoint();
ConfigPath checkpointsPath = new ConfigPath("checkpoints","checkpoints");
checkpointsPath.setBase(basePath);
checkpointInProgress.generateFrom(checkpointsPath,998);
bdb.doCheckpoint(checkpointInProgress);
String firstCheckpointName = checkpointInProgress.getName();
for (int i2 = 1000; i2 < 2000; i2++) {
String key = String.valueOf(i2);
final String value = String.valueOf(randomFactor*i2);
String cached = (String)testData.getOrUse(
key,
new Supplier<IdentityCacheableWrapper>(
new IdentityCacheableWrapper(key, value))).get();
assertSame("unexpected prior entry",value,cached);
}
checkpointInProgress = new Checkpoint();
checkpointInProgress.generateFrom(checkpointsPath,999);
bdb.doCheckpoint(checkpointInProgress);
bdb.stop();
bdb.destroy();
BdbModule bdb2 = new BdbModule();
bdb2.setDir(bdbDir);
Checkpoint recoveryCheckpoint = new Checkpoint();
ConfigPath recoverPath = new ConfigPath("recover",firstCheckpointName);
recoverPath.setBase(basePath);
recoveryCheckpoint.setCheckpointDir(recoverPath);
recoveryCheckpoint.afterPropertiesSet();
bdb2.setRecoveryCheckpoint(recoveryCheckpoint);