Beispiel #1
0
        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));
            }
        }