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, Name = "Invoker1" }; var inv2 = new ClientData { ClientId = 20, DatabaseId = 102, 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.DatabaseId); var data2 = new HistorySaveData(ar2, inv2.DatabaseId); var data3 = new HistorySaveData(ar3, 103); var memcfg = ConfigFile.CreateDummy(); var hmf = memcfg.GetDataStruct <HistoryManagerData>("HistoryManager", true); hmf.HistoryFile = testFile; hmf.FillDeletedIds = false; DbStore db; HistoryManager hf; void CreateDbStore() { db = new DbStore(hmf); hf = new HistoryManager(hmf) { 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, 42)); 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, 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 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); }
private R InitializeCore() { ConfigManager = ConfigFile.OpenOrCreate(configFilePath) ?? ConfigFile.CreateDummy(); // TODO: DUMMY REQUESTS var webd = ConfigManager.GetDataStruct <WebData>("WebData", true); var rmd = ConfigManager.GetDataStruct <RightsManagerData>("RightsManager", true); ConfigManager.GetDataStruct <MainBotData>("MainBot", true); YoutubeDlHelper.DataObj = ConfigManager.GetDataStruct <YoutubeFactoryData>("YoutubeFactory", true); var pmd = ConfigManager.GetDataStruct <PluginManagerData>("PluginManager", true); ConfigManager.GetDataStruct <MediaFactoryData>("MediaFactory", true); var hmd = ConfigManager.GetDataStruct <HistoryManagerData>("HistoryManager", true); ConfigManager.GetDataStruct <AudioFrameworkData>("AudioFramework", true); ConfigManager.GetDataStruct <Ts3FullClientData>("QueryConnection", true); ConfigManager.GetDataStruct <PlaylistManagerData>("PlaylistManager", true); // END TODO ConfigManager.Close(); Log.Info("[============ TS3AudioBot started =============]"); Log.Info("[=== Date/Time: {0} {1}", DateTime.Now.ToLongDateString(), DateTime.Now.ToLongTimeString()); Log.Info("[=== Version: {0}", SystemData.AssemblyData); Log.Info("[=== Platform: {0}", SystemData.PlattformData); Log.Info("[=== Runtime: {0}", SystemData.RuntimeData.FullName); Log.Info("[=== Opus: {0}", TS3Client.Audio.Opus.NativeMethods.Info); Log.Info("[==============================================]"); if (SystemData.RuntimeData.Runtime == Runtime.Mono) { if (SystemData.RuntimeData.SemVer == null) { Log.Warn("Could not find your running mono version!"); Log.Warn("This version might not work properly."); Log.Warn("If you encounter any problems, try installing the latest mono version by following http://www.mono-project.com/download/"); } else if (SystemData.RuntimeData.SemVer.Major < 5) { Log.Error("You are running a mono version below 5.0.0!"); Log.Error("This version is not supported and will not work properly."); Log.Error("Install the latest mono version by following http://www.mono-project.com/download/"); } } Log.Info("[============ Initializing Modules ============]"); TS3Client.Messages.Deserializer.OnError += (s, e) => Log.Error(e.ToString()); Injector = new CoreInjector(); Injector.RegisterType <Core>(); Injector.RegisterType <ConfigFile>(); Injector.RegisterType <CoreInjector>(); Injector.RegisterType <DbStore>(); Injector.RegisterType <PluginManager>(); Injector.RegisterType <CommandManager>(); Injector.RegisterType <ResourceFactoryManager>(); Injector.RegisterType <WebManager>(); Injector.RegisterType <RightsManager>(); Injector.RegisterType <BotManager>(); Injector.RegisterType <TokenManager>(); Injector.RegisterModule(this); Injector.RegisterModule(ConfigManager); Injector.RegisterModule(Injector); Injector.RegisterModule(new DbStore(hmd)); Injector.RegisterModule(new PluginManager(pmd)); Injector.RegisterModule(new CommandManager(), x => x.Initialize()); Injector.RegisterModule(new ResourceFactoryManager(), x => x.Initialize()); Injector.RegisterModule(new WebManager(webd), x => x.Initialize()); Injector.RegisterModule(new RightsManager(rmd), x => x.Initialize()); Injector.RegisterModule(new BotManager()); Injector.RegisterModule(new TokenManager(), x => x.Initialize()); if (!Injector.AllResolved()) { Log.Debug("Cyclic core module dependency"); Injector.ForceCyclicResolve(); if (!Injector.AllResolved()) { Log.Error("Missing core module dependency"); return("Could not load all core modules"); } } Log.Info("[==================== Done ====================]"); return(R.OkR); }