public virtual void TestExistingSnapshots()
{
int numSnapshots = 3;
MockDirectoryWrapper dir = NewMockDirectory();
IndexWriter writer = new IndexWriter(dir, GetConfig(Random(), GetDeletionPolicy(dir)));
PersistentSnapshotDeletionPolicy psdp = (PersistentSnapshotDeletionPolicy)writer.Config.DelPolicy;
Assert.IsNull(psdp.LastSaveFile);
PrepareIndexAndSnapshots(psdp, writer, numSnapshots);
Assert.IsNotNull(psdp.LastSaveFile);
writer.Dispose();
// Make sure only 1 save file exists:
int count = 0;
foreach (string file in dir.ListAll())
{
if (file.StartsWith(PersistentSnapshotDeletionPolicy.SNAPSHOTS_PREFIX))
{
count++;
}
}
Assert.AreEqual(1, count);
// Make sure we fsync:
dir.Crash();
dir.ClearCrash();
// Re-initialize and verify snapshots were persisted
psdp = new PersistentSnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy(), dir, OpenMode_e.APPEND);
writer = new IndexWriter(dir, GetConfig(Random(), psdp));
psdp = (PersistentSnapshotDeletionPolicy)writer.Config.DelPolicy;
Assert.AreEqual(numSnapshots, psdp.Snapshots.Count);
Assert.AreEqual(numSnapshots, psdp.SnapshotCount);
AssertSnapshotExists(dir, psdp, numSnapshots, false);
writer.AddDocument(new Document());
writer.Commit();
Snapshots.Add(psdp.Snapshot());
Assert.AreEqual(numSnapshots + 1, psdp.Snapshots.Count);
Assert.AreEqual(numSnapshots + 1, psdp.SnapshotCount);
AssertSnapshotExists(dir, psdp, numSnapshots + 1, false);
writer.Dispose();
dir.Dispose();
}