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, DatabaseId = 101, NickName = "Invoker1" }; var inv2 = new ClientData { ClientId = 20, DatabaseId = 102, NickName = "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.DatabaseId); var data2 = new HistorySaveData(ar2, inv2.DatabaseId); var data3 = new HistorySaveData(ar3, 103); var hmf = new HistoryManagerData { HistoryFile = testFile, FillDeletedIds = false }; var db = new DbStore(hmf); var hf = new HistoryManager(hmf, db); hf.LogAudioResource(data1); var lastXEntries = hf.GetLastXEntrys(1); Assert.True(lastXEntries.Any()); var lastEntry = lastXEntries.First(); Assert.AreEqual(ar1, lastEntry.AudioResource); db.Dispose(); db = new DbStore(hmf); hf = new HistoryManager(hmf, db); 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 db = new DbStore(hmf); hf = new HistoryManager(hmf, db); 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, 42)); db.Dispose(); // check entry renaming db = new DbStore(hmf); hf = new HistoryManager(hmf, db); 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, 42)); ale1 = hf.FindEntryByResource(ar1); hf.RenameEntry(ale1, "sc_ar1X_loong1"); hf.LogAudioResource(new HistorySaveData(ale1.AudioResource, 42)); hf.RenameEntry(ale2, "me_ar2_exxxxxtra_loong1"); hf.LogAudioResource(new HistorySaveData(ale2.AudioResource, 42)); db.Dispose(); // recheck order db = new DbStore(hmf); hf = new HistoryManager(hmf, db); 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 db = new DbStore(hmf); hf = new HistoryManager(hmf, db); 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 db = new DbStore(hmf); hf = new HistoryManager(hmf, db); // .. 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); }