コード例 #1
0
ファイル: DbStore.cs プロジェクト: sertsch1/TS3AudioBot
        public DbStore(HistoryManagerData hmd)
        {
            var historyFile = new FileInfo(hmd.HistoryFile);

            database = new LiteDatabase(historyFile.FullName);

            metaTable = database.GetCollection <DbMetaData>(DbMetaInformationTable);
        }
コード例 #2
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, 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);
        }