コード例 #1
0
ファイル: ImportBeatmapTest.cs プロジェクト: zachllogan/osu
        public async Task TestImportThenDeleteThenImportWithOnlineIDMismatch(bool set)
        {
            //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost($"{nameof(TestImportThenDeleteThenImportWithOnlineIDMismatch)}-{set}"))
            {
                try
                {
                    var osu = loadOsu(host);

                    var imported = await LoadOszIntoOsu(osu);

                    if (set)
                    {
                        imported.OnlineBeatmapSetID = 1234;
                    }
                    else
                    {
                        imported.Beatmaps.First().OnlineBeatmapID = 1234;
                    }

                    osu.Dependencies.Get <BeatmapManager>().Update(imported);

                    deleteBeatmapSet(imported, osu);

                    var importedSecondTime = await LoadOszIntoOsu(osu);

                    // check the newly "imported" beatmap has been reimported due to mismatch (even though hashes matched)
                    Assert.IsTrue(imported.ID != importedSecondTime.ID);
                    Assert.IsTrue(imported.Beatmaps.First().ID != importedSecondTime.Beatmaps.First().ID);
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #2
0
        public async Task TestImportWithBeatmaps()
        {
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
            {
                try
                {
                    var osu = LoadOsuIntoHost(host, true);

                    await importCollectionsFromStream(osu, TestResources.OpenResource("Collections/collections.db"));

                    Assert.That(osu.CollectionManager.Collections.Count, Is.EqualTo(2));

                    Assert.That(osu.CollectionManager.Collections[0].Name.Value, Is.EqualTo("First"));
                    Assert.That(osu.CollectionManager.Collections[0].Beatmaps.Count, Is.EqualTo(1));

                    Assert.That(osu.CollectionManager.Collections[1].Name.Value, Is.EqualTo("Second"));
                    Assert.That(osu.CollectionManager.Collections[1].Beatmaps.Count, Is.EqualTo(12));
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #3
0
ファイル: ImportScoreTest.cs プロジェクト: nbayt/osu
        public void TestImportMods()
        {
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportMods"))
            {
                try
                {
                    var osu = loadOsu(host);

                    var toImport = new ScoreInfo
                    {
                        Mods = new Mod[] { new OsuModHardRock(), new OsuModDoubleTime() },
                    };

                    var imported = loadIntoOsu(osu, toImport);

                    Assert.IsTrue(imported.Mods.Any(m => m is OsuModHardRock));
                    Assert.IsTrue(imported.Mods.Any(m => m is OsuModDoubleTime));
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #4
0
        public async Task TestImportTwiceWithDifferentMetadata()
        {
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportSkinTest)))
            {
                try
                {
                    var osu = await loadOsu(host);

                    var imported = await loadIntoOsu(osu, new ZipArchiveReader(createOsk("test skin v2", "skinner"), "skin.osk"));

                    var imported2 = await loadIntoOsu(osu, new ZipArchiveReader(createOsk("test skin v2.1", "skinner"), "skin2.osk"));

                    Assert.That(imported2.ID, Is.Not.EqualTo(imported.ID));
                    Assert.That(osu.Dependencies.Get <SkinManager>().GetAllUserSkins().Count, Is.EqualTo(2));

                    Assert.That(osu.Dependencies.Get <SkinManager>().GetAllUserSkins().First().Files.First().FileInfoID, Is.EqualTo(imported.Files.First().FileInfoID));
                    Assert.That(osu.Dependencies.Get <SkinManager>().GetAllUserSkins().Last().Files.First().FileInfoID, Is.EqualTo(imported2.Files.First().FileInfoID));
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #5
0
ファイル: ImportScoreTest.cs プロジェクト: charlie-gray/osu
        public async Task TestImportMods()
        {
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
            {
                try
                {
                    var osu = LoadOsuIntoHost(host, true);

                    var toImport = new ScoreInfo
                    {
                        Mods = new Mod[] { new OsuModHardRock(), new OsuModDoubleTime() },
                    };

                    var imported = await LoadScoreIntoOsu(osu, toImport);

                    Assert.IsTrue(imported.Mods.Any(m => m is OsuModHardRock));
                    Assert.IsTrue(imported.Mods.Any(m => m is OsuModDoubleTime));
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #6
0
ファイル: ImportScoreTest.cs プロジェクト: charlie-gray/osu
        public async Task TestImportWithDeletedBeatmapSet()
        {
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
            {
                try
                {
                    var osu = LoadOsuIntoHost(host, true);

                    var toImport = new ScoreInfo
                    {
                        Hash       = Guid.NewGuid().ToString(),
                        Statistics = new Dictionary <HitResult, int>
                        {
                            { HitResult.Perfect, 100 },
                            { HitResult.Miss, 50 }
                        }
                    };

                    var imported = await LoadScoreIntoOsu(osu, toImport);

                    var beatmapManager = osu.Dependencies.Get <BeatmapManager>();
                    var scoreManager   = osu.Dependencies.Get <ScoreManager>();

                    beatmapManager.Delete(beatmapManager.QueryBeatmapSet(s => s.Beatmaps.Any(b => b.ID == imported.BeatmapInfo.ID)));
                    Assert.That(scoreManager.Query(s => s.ID == imported.ID).DeletePending, Is.EqualTo(true));

                    var secondImport = await LoadScoreIntoOsu(osu, imported);

                    Assert.That(secondImport, Is.Null);
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #7
0
        public async Task TestRollbackOnFailure()
        {
            // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
            using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest)))
            {
                try
                {
                    int itemAddRemoveFireCount = 0;
                    int loggedExceptionCount   = 0;

                    Logger.NewEntry += l =>
                    {
                        if (l.Target == LoggingTarget.Database && l.Exception != null)
                        {
                            Interlocked.Increment(ref loggedExceptionCount);
                        }
                    };

                    var osu     = LoadOsuIntoHost(host);
                    var manager = osu.Dependencies.Get <BeatmapManager>();

                    // ReSharper disable once AccessToModifiedClosure
                    manager.ItemUpdated.BindValueChanged(_ => Interlocked.Increment(ref itemAddRemoveFireCount));
                    manager.ItemRemoved.BindValueChanged(_ => Interlocked.Increment(ref itemAddRemoveFireCount));

                    var imported = await LoadOszIntoOsu(osu);

                    Assert.AreEqual(0, itemAddRemoveFireCount -= 1);

                    imported.Hash += "-changed";
                    manager.Update(imported);

                    Assert.AreEqual(0, itemAddRemoveFireCount -= 1);

                    checkBeatmapSetCount(osu, 1);
                    checkBeatmapCount(osu, 12);
                    checkSingleReferencedFileCount(osu, 18);

                    var brokenTempFilename = TestResources.GetTestBeatmapForImport();

                    MemoryStream brokenOsu = new MemoryStream();
                    MemoryStream brokenOsz = new MemoryStream(await File.ReadAllBytesAsync(brokenTempFilename));

                    File.Delete(brokenTempFilename);

                    using (var outStream = File.Open(brokenTempFilename, FileMode.CreateNew))
                        using (var zip = ZipArchive.Open(brokenOsz))
                        {
                            zip.AddEntry("broken.osu", brokenOsu, false);
                            zip.SaveTo(outStream, CompressionType.Deflate);
                        }

                    // this will trigger purging of the existing beatmap (online set id match) but should rollback due to broken osu.
                    try
                    {
                        await manager.Import(new ImportTask(brokenTempFilename));
                    }
                    catch
                    {
                    }

                    // no events should be fired in the case of a rollback.
                    Assert.AreEqual(0, itemAddRemoveFireCount);

                    checkBeatmapSetCount(osu, 1);
                    checkBeatmapCount(osu, 12);

                    checkSingleReferencedFileCount(osu, 18);

                    Assert.AreEqual(1, loggedExceptionCount);

                    File.Delete(brokenTempFilename);
                }
                finally
                {
                    host.Exit();
                }
            }
        }
コード例 #8
0
 public override void RunTest()
 {
     using (var host = new CleanRunHeadlessGameHost($"test-{Guid.NewGuid()}", realtime: false))
         host.Run(new OsuTestCaseTestRunner(this));
 }