public void JournalWritesJournalFilesAndRunsThemOnStartup() { string dbName = "JournalingAndRecovery"; string journalDir = string.Format(@"{0}\Journal", dbName); string dataDir = string.Format(@"{0}\Data", dbName); int id, secondId = 0; using (var client = new InnerDbClient(dbName)) { // Believe me when I say this is very heavily tested already from // the above tests running really fast. client.SetJournalIntervalMilliseconds(10000); id = client.PutObject(murasame); client.Delete(id); secondId = client.PutObject(masamune); // White-box of sorts. Okay for now. string[] files = System.IO.Directory.GetFiles(journalDir); Assert.AreEqual(3, files.Length); Assert.IsTrue(files.Any(f => f.Contains(id + "-Put.json"))); Assert.IsTrue(files.Any(f => f.Contains(id + "-Delete.json"))); Assert.IsTrue(files.Any(f => f.Contains(secondId + "-Put.json"))); } using (var client = new InnerDbClient(dbName)) { string[] data = new string[1]; // Wait for victory. bool isDone = false; var start = DateTime.Now; while (!isDone && ((DateTime.Now - start).TotalSeconds <= 5)) { var files = System.IO.Directory.GetFiles(journalDir); data = System.IO.Directory.GetFiles(dataDir); isDone = (files.Length == 0 && dataDir.Length == 1 && data.First().Contains("2.json")); } Assert.IsNull(client.GetObject <Sword>(id)); Assert.AreEqual(masamune, client.GetObject <Sword>(secondId)); } }