public void HistoryFileIntergrityTest() { string testFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "history.test"); if (File.Exists(testFile)) { File.Delete(testFile); } var inv1 = new ClientData { ClientId = 10, Uid = "Uid1", Name = "Invoker1" }; var inv2 = new ClientData { ClientId = 20, Uid = "Uid2", Name = "Invoker2" }; var ar1 = new AudioResource("asdf", "sc_ar1", "soundcloud"); var ar2 = new AudioResource("./File.mp3", "me_ar2", "media"); var ar3 = new AudioResource("kitty", "tw_ar3", "twitch"); var data1 = new HistorySaveData(ar1, inv1.Uid); var data2 = new HistorySaveData(ar2, inv2.Uid); var data3 = new HistorySaveData(ar3, "Uid3"); var confHistory = ConfigTable.CreateRoot <ConfHistory>(); confHistory.FillDeletedIds.Value = false; var confDb = ConfigTable.CreateRoot <ConfDb>(); confDb.Path.Value = testFile; DbStore db; HistoryManager hf; void CreateDbStore() { db = new DbStore(confDb); hf = new HistoryManager(confHistory) { Database = db }; hf.Initialize(); } CreateDbStore(); hf.LogAudioResource(data1); var lastXEntries = hf.GetLastXEntrys(1); Assert.True(lastXEntries.Any()); var lastEntry = lastXEntries.First(); Assert.AreEqual(ar1, lastEntry.AudioResource); db.Dispose(); CreateDbStore(); lastXEntries = hf.GetLastXEntrys(1); Assert.True(lastXEntries.Any()); lastEntry = lastXEntries.First(); Assert.AreEqual(ar1, lastEntry.AudioResource); hf.LogAudioResource(data1); hf.LogAudioResource(data2); lastXEntries = hf.GetLastXEntrys(1); Assert.True(lastXEntries.Any()); lastEntry = lastXEntries.First(); Assert.AreEqual(ar2, lastEntry.AudioResource); db.Dispose(); // store and order check CreateDbStore(); var lastXEntriesArray = hf.GetLastXEntrys(2).ToArray(); Assert.AreEqual(2, lastXEntriesArray.Length); Assert.AreEqual(ar2, lastXEntriesArray[0].AudioResource); Assert.AreEqual(ar1, lastXEntriesArray[1].AudioResource); var ale1 = hf.FindEntryByResource(ar1); hf.RenameEntry(ale1, "sc_ar1X"); hf.LogAudioResource(new HistorySaveData(ale1.AudioResource, "Uid4")); db.Dispose(); // check entry renaming CreateDbStore(); lastXEntriesArray = hf.GetLastXEntrys(2).ToArray(); Assert.AreEqual(2, lastXEntriesArray.Length); Assert.AreEqual(ar1, lastXEntriesArray[0].AudioResource); Assert.AreEqual(ar2, lastXEntriesArray[1].AudioResource); var ale2 = hf.FindEntryByResource(ar2); hf.RenameEntry(ale2, "me_ar2_loong1"); hf.LogAudioResource(new HistorySaveData(ale2.AudioResource, "Uid4")); ale1 = hf.FindEntryByResource(ar1); hf.RenameEntry(ale1, "sc_ar1X_loong1"); hf.LogAudioResource(new HistorySaveData(ale1.AudioResource, "Uid4")); hf.RenameEntry(ale2, "me_ar2_exxxxxtra_loong1"); hf.LogAudioResource(new HistorySaveData(ale2.AudioResource, "Uid4")); db.Dispose(); // recheck order CreateDbStore(); lastXEntriesArray = hf.GetLastXEntrys(2).ToArray(); Assert.AreEqual(2, lastXEntriesArray.Length); Assert.AreEqual(ar2, lastXEntriesArray[0].AudioResource); Assert.AreEqual(ar1, lastXEntriesArray[1].AudioResource); db.Dispose(); // delete entry 1 CreateDbStore(); hf.RemoveEntry(hf.FindEntryByResource(ar1)); lastXEntriesArray = hf.GetLastXEntrys(3).ToArray(); Assert.AreEqual(1, lastXEntriesArray.Length); // .. store new entry to check correct stream position writes hf.LogAudioResource(data3); lastXEntriesArray = hf.GetLastXEntrys(3).ToArray(); Assert.AreEqual(2, lastXEntriesArray.Length); db.Dispose(); // delete entry 2 CreateDbStore(); // .. check integrity from previous store lastXEntriesArray = hf.GetLastXEntrys(3).ToArray(); Assert.AreEqual(2, lastXEntriesArray.Length); // .. delete and recheck hf.RemoveEntry(hf.FindEntryByResource(ar2)); lastXEntriesArray = hf.GetLastXEntrys(3).ToArray(); Assert.AreEqual(1, lastXEntriesArray.Length); Assert.AreEqual(ar3, lastXEntriesArray[0].AudioResource); db.Dispose(); File.Delete(testFile); }