}
}
private void runTraversal(String checkpoint) throws RepositoryException {
monitorManager.getCheckpointAndChangeQueue().setMaximumQueueSize(BATCH_SIZE);
DocumentList docs = null;
if (checkpoint == null){
docs = tm.startTraversal();
assertEquals(1, monitorManager.getStartCount());
// start calls stop, in case things were running, because CM doesn't always.
assertEquals(1, monitorManager.getStopCount());
// clean is called after stop is called, for same reason as stop is called.
assertEquals(1, monitorManager.getCleanCount());
assertEquals(1, monitorManager.getGuaranteeCount());
} else {
docs = tm.resumeTraversal(checkpoint);
assertEquals(1, monitorManager.getStartCount());
// resume doesn't call stop.
assertEquals(0, monitorManager.getStopCount());
// Doesn't call clean.
assertEquals(0, monitorManager.getCleanCount());
assertEquals(1, monitorManager.getGuaranteeCount());
}
for (int k = 0; k < BATCH_SIZE; ++k) {
Document doc = docs.nextDocument();
assertNotNull(doc);
}
assertNull(docs.nextDocument());
// TODO: Investigate: this loop looks weird cause it goes for BATCH_COUNT-1.
for (int batch = 1; batch < BATCH_COUNT; batch++) {
docs = tm.resumeTraversal(docs.checkpoint());
assertEquals(1 + batch, monitorManager.getGuaranteeCount());
for (int k = 0; k < BATCH_SIZE; ++k) {
Document doc = docs.nextDocument();
assertNotNull(doc);
String docId = Value.getSingleValueString(doc, SpiConstants.PROPNAME_DOCID);
assertEquals(String.format("/foo/bar/file.%d", batch * BATCH_SIZE + k),
docId);
}
assertNull(docs.nextDocument());
}
docs = tm.resumeTraversal(docs.checkpoint());
for (int k = 0; k < EXTRA; ++k) {
assertNotNull(docs.nextDocument());
}
assertNull(docs.nextDocument());
}