Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }