1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 00:47:24 +08:00

Merge pull request #16239 from peppy/sanitise-test-directory-usage

Fix some more test directory usage weirdness
This commit is contained in:
Dean Herbert 2021-12-25 12:09:18 +09:00 committed by GitHub
commit ac1a452e20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 66 additions and 90 deletions

View File

@ -52,7 +52,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
<PackageReference Include="ppy.osu.Framework.Android" Version="2021.1222.0" /> <PackageReference Include="ppy.osu.Framework.Android" Version="2021.1225.0" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Transitive Dependencies"> <ItemGroup Label="Transitive Dependencies">
<!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. --> <!-- Realm needs to be directly referenced in all Xamarin projects, as it will not pull in its transitive dependencies otherwise. -->

View File

@ -40,7 +40,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportWhenClosed() public async Task TestImportWhenClosed()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -57,7 +57,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportThenDelete() public async Task TestImportThenDelete()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -78,7 +78,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportThenDeleteFromStream() public async Task TestImportThenDeleteFromStream()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -114,7 +114,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportThenImport() public async Task TestImportThenImport()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -140,7 +140,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportThenImportWithReZip() public async Task TestImportThenImportWithReZip()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -192,7 +192,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportThenImportWithChangedHashedFile() public async Task TestImportThenImportWithChangedHashedFile()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -247,7 +247,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Ignore("intentionally broken by import optimisations")] [Ignore("intentionally broken by import optimisations")]
public async Task TestImportThenImportWithChangedFile() public async Task TestImportThenImportWithChangedFile()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -298,7 +298,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportThenImportWithDifferentFilename() public async Task TestImportThenImportWithDifferentFilename()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -351,7 +351,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportCorruptThenImport() public async Task TestImportCorruptThenImport()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -392,7 +392,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestModelCreationFailureDoesntReturn() public async Task TestModelCreationFailureDoesntReturn()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -428,7 +428,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestRollbackOnFailure() public async Task TestRollbackOnFailure()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -507,7 +507,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportThenDeleteThenImport() public async Task TestImportThenDeleteThenImport()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -534,7 +534,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportThenDeleteThenImportWithOnlineIDsMissing() public async Task TestImportThenDeleteThenImportWithOnlineIDsMissing()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost($"{nameof(ImportBeatmapTest)}")) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -566,7 +566,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public async Task TestImportWithDuplicateBeatmapIDs() public async Task TestImportWithDuplicateBeatmapIDs()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -621,8 +621,8 @@ namespace osu.Game.Tests.Beatmaps.IO
[NonParallelizable] [NonParallelizable]
public void TestImportOverIPC() public void TestImportOverIPC()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost($"{nameof(ImportBeatmapTest)}-host", true)) using (HeadlessGameHost host = new CleanRunHeadlessGameHost(true))
using (HeadlessGameHost client = new CleanRunHeadlessGameHost($"{nameof(ImportBeatmapTest)}-client", true)) using (HeadlessGameHost client = new CleanRunHeadlessGameHost(true))
{ {
try try
{ {
@ -651,7 +651,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportWhenFileOpen() public async Task TestImportWhenFileOpen()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -673,7 +673,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportWithDuplicateHashes() public async Task TestImportWithDuplicateHashes()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -715,7 +715,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportNestedStructure() public async Task TestImportNestedStructure()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -760,7 +760,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestImportWithIgnoredDirectoryInArchive() public async Task TestImportWithIgnoredDirectoryInArchive()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -814,7 +814,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestUpdateBeatmapInfo() public async Task TestUpdateBeatmapInfo()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -844,7 +844,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public async Task TestUpdateBeatmapFile() public async Task TestUpdateBeatmapFile()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -888,7 +888,7 @@ namespace osu.Game.Tests.Beatmaps.IO
public void TestSaveRemovesInvalidCharactersFromPath() public void TestSaveRemovesInvalidCharactersFromPath()
{ {
// unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. // unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here.
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -922,7 +922,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public void TestCreateNewEmptyBeatmap() public void TestCreateNewEmptyBeatmap()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -949,7 +949,7 @@ namespace osu.Game.Tests.Beatmaps.IO
[Test] [Test]
public void TestCreateNewBeatmapWithObject() public void TestCreateNewBeatmapWithObject()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(ImportBeatmapTest))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {

View File

@ -128,8 +128,12 @@ namespace osu.Game.Tests.Collections.IO
[Test] [Test]
public async Task TestSaveAndReload() public async Task TestSaveAndReload()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(bypassCleanup: true)) string firstRunName;
using (var host = new CleanRunHeadlessGameHost(bypassCleanup: true))
{ {
firstRunName = host.Name;
try try
{ {
var osu = LoadOsuIntoHost(host, true); var osu = LoadOsuIntoHost(host, true);
@ -150,7 +154,7 @@ namespace osu.Game.Tests.Collections.IO
} }
// Name matches the automatically chosen name from `CleanRunHeadlessGameHost` above, so we end up using the same storage location. // Name matches the automatically chosen name from `CleanRunHeadlessGameHost` above, so we end up using the same storage location.
using (HeadlessGameHost host = new TestRunHeadlessGameHost(nameof(TestSaveAndReload))) using (HeadlessGameHost host = new TestRunHeadlessGameHost(firstRunName))
{ {
try try
{ {

View File

@ -30,7 +30,7 @@ namespace osu.Game.Tests.Database
protected void RunTestWithRealm(Action<RealmContextFactory, OsuStorage> testAction, [CallerMemberName] string caller = "") protected void RunTestWithRealm(Action<RealmContextFactory, OsuStorage> testAction, [CallerMemberName] string caller = "")
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(caller)) using (HeadlessGameHost host = new CleanRunHeadlessGameHost(callingMethodName: caller))
{ {
host.Run(new RealmTestGame(() => host.Run(new RealmTestGame(() =>
{ {
@ -54,7 +54,7 @@ namespace osu.Game.Tests.Database
protected void RunTestWithRealmAsync(Func<RealmContextFactory, Storage, Task> testAction, [CallerMemberName] string caller = "") protected void RunTestWithRealmAsync(Func<RealmContextFactory, Storage, Task> testAction, [CallerMemberName] string caller = "")
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(caller)) using (HeadlessGameHost host = new CleanRunHeadlessGameHost(callingMethodName: caller))
{ {
host.Run(new RealmTestGame(async () => host.Run(new RealmTestGame(async () =>
{ {

View File

@ -25,7 +25,7 @@ namespace osu.Game.Tests.NonVisual
{ {
try try
{ {
string defaultStorageLocation = getDefaultLocationFor(nameof(TestDefaultDirectory)); string defaultStorageLocation = getDefaultLocationFor(host);
var osu = LoadOsuIntoHost(host); var osu = LoadOsuIntoHost(host);
var storage = osu.Dependencies.Get<Storage>(); var storage = osu.Dependencies.Get<Storage>();
@ -109,7 +109,7 @@ namespace osu.Game.Tests.NonVisual
{ {
try try
{ {
string defaultStorageLocation = getDefaultLocationFor(nameof(TestMigration)); string defaultStorageLocation = getDefaultLocationFor(host);
var osu = LoadOsuIntoHost(host); var osu = LoadOsuIntoHost(host);
var storage = osu.Dependencies.Get<Storage>(); var storage = osu.Dependencies.Get<Storage>();
@ -284,9 +284,9 @@ namespace osu.Game.Tests.NonVisual
} }
} }
private static string getDefaultLocationFor(string testTypeName) private static string getDefaultLocationFor(CustomTestHeadlessGameHost host)
{ {
string path = Path.Combine(TestRunHeadlessGameHost.TemporaryTestDirectory, testTypeName); string path = Path.Combine(TestRunHeadlessGameHost.TemporaryTestDirectory, host.Name);
if (Directory.Exists(path)) if (Directory.Exists(path))
Directory.Delete(path, true); Directory.Delete(path, true);
@ -315,7 +315,7 @@ namespace osu.Game.Tests.NonVisual
public CustomTestHeadlessGameHost([CallerMemberName] string callingMethodName = @"") public CustomTestHeadlessGameHost([CallerMemberName] string callingMethodName = @"")
: base(callingMethodName: callingMethodName) : base(callingMethodName: callingMethodName)
{ {
string defaultStorageLocation = getDefaultLocationFor(callingMethodName); string defaultStorageLocation = getDefaultLocationFor(this);
InitialStorage = new DesktopStorage(defaultStorageLocation, this); InitialStorage = new DesktopStorage(defaultStorageLocation, this);
InitialStorage.DeleteDirectory(string.Empty); InitialStorage.DeleteDirectory(string.Empty);

View File

@ -319,7 +319,7 @@ namespace osu.Game.Tests.Skins.IO
private async Task runSkinTest(Func<OsuGameBase, Task> action, [CallerMemberName] string callingMethodName = @"") private async Task runSkinTest(Func<OsuGameBase, Task> action, [CallerMemberName] string callingMethodName = @"")
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(callingMethodName)) using (HeadlessGameHost host = new CleanRunHeadlessGameHost(callingMethodName: callingMethodName))
{ {
try try
{ {

View File

@ -2,10 +2,11 @@
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System.IO; using System.IO;
using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Framework.Testing;
using osu.Game.Tests; using osu.Game.Tests;
using osu.Game.Tournament.Configuration; using osu.Game.Tournament.Configuration;
@ -17,7 +18,7 @@ namespace osu.Game.Tournament.Tests.NonVisual
[Test] [Test]
public void TestDefaultDirectory() public void TestDefaultDirectory()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(TestDefaultDirectory))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {
@ -36,9 +37,9 @@ namespace osu.Game.Tournament.Tests.NonVisual
[Test] [Test]
public void TestCustomDirectory() public void TestCustomDirectory()
{ {
using (HeadlessGameHost host = new HeadlessGameHost(nameof(TestCustomDirectory))) // don't use clean run as we are writing a config file. using (HeadlessGameHost host = new TestRunHeadlessGameHost(nameof(TestCustomDirectory))) // don't use clean run as we are writing a config file.
{ {
string osuDesktopStorage = PrepareBasePath(nameof(TestCustomDirectory)); string osuDesktopStorage = Path.Combine(host.UserStoragePaths.First(), nameof(TestCustomDirectory));
const string custom_tournament = "custom"; const string custom_tournament = "custom";
// need access before the game has constructed its own storage yet. // need access before the game has constructed its own storage yet.
@ -60,15 +61,6 @@ namespace osu.Game.Tournament.Tests.NonVisual
finally finally
{ {
host.Exit(); host.Exit();
try
{
if (Directory.Exists(osuDesktopStorage))
Directory.Delete(osuDesktopStorage, true);
}
catch
{
}
} }
} }
} }
@ -76,9 +68,9 @@ namespace osu.Game.Tournament.Tests.NonVisual
[Test] [Test]
public void TestMigration() public void TestMigration()
{ {
using (HeadlessGameHost host = new HeadlessGameHost(nameof(TestMigration))) // don't use clean run as we are writing test files for migration. using (HeadlessGameHost host = new TestRunHeadlessGameHost(nameof(TestMigration))) // don't use clean run as we are writing test files for migration.
{ {
string osuRoot = PrepareBasePath(nameof(TestMigration)); string osuRoot = Path.Combine(host.UserStoragePaths.First(), nameof(TestMigration));
string configFile = Path.Combine(osuRoot, "tournament.ini"); string configFile = Path.Combine(osuRoot, "tournament.ini");
if (File.Exists(configFile)) if (File.Exists(configFile))
@ -146,28 +138,8 @@ namespace osu.Game.Tournament.Tests.NonVisual
finally finally
{ {
host.Exit(); host.Exit();
try
{
if (Directory.Exists(osuRoot))
Directory.Delete(osuRoot, true);
}
catch
{
}
} }
} }
} }
public static string PrepareBasePath(string testInstance)
{
string basePath = Path.Combine(RuntimeInfo.StartupDirectory, "headless", testInstance);
// manually clean before starting in case there are left-over files at the test site.
if (Directory.Exists(basePath))
Directory.Delete(basePath, true);
return basePath;
}
} }
} }

View File

@ -15,7 +15,7 @@ namespace osu.Game.Tournament.Tests.NonVisual
[Test] [Test]
public void TestUnavailableRuleset() public void TestUnavailableRuleset()
{ {
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(TestUnavailableRuleset))) using (HeadlessGameHost host = new CleanRunHeadlessGameHost())
{ {
try try
{ {

View File

@ -2,9 +2,11 @@
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System.IO; using System.IO;
using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Platform; using osu.Framework.Platform;
using osu.Framework.Testing;
using osu.Game.Tournament.IO; using osu.Game.Tournament.IO;
using osu.Game.Tournament.IPC; using osu.Game.Tournament.IPC;
@ -17,9 +19,9 @@ namespace osu.Game.Tournament.Tests.NonVisual
public void CheckIPCLocation() public void CheckIPCLocation()
{ {
// don't use clean run because files are being written before osu! launches. // don't use clean run because files are being written before osu! launches.
using (HeadlessGameHost host = new HeadlessGameHost(nameof(CheckIPCLocation))) using (var host = new TestRunHeadlessGameHost(nameof(CheckIPCLocation)))
{ {
string basePath = CustomTourneyDirectoryTest.PrepareBasePath(nameof(CheckIPCLocation)); string basePath = Path.Combine(host.UserStoragePaths.First(), nameof(CheckIPCLocation));
// Set up a fake IPC client for the IPC Storage to switch to. // Set up a fake IPC client for the IPC Storage to switch to.
string testStableInstallDirectory = Path.Combine(basePath, "stable-ce"); string testStableInstallDirectory = Path.Combine(basePath, "stable-ce");
@ -42,15 +44,6 @@ namespace osu.Game.Tournament.Tests.NonVisual
finally finally
{ {
host.Exit(); host.Exit();
try
{
if (Directory.Exists(basePath))
Directory.Delete(basePath, true);
}
catch
{
}
} }
} }
} }

View File

@ -1,6 +1,7 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text. // See the LICENCE file in the repository root for full licence text.
using System;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using osu.Framework.Testing; using osu.Framework.Testing;
@ -14,19 +15,25 @@ namespace osu.Game.Tests
/// <summary> /// <summary>
/// Create a new instance. /// Create a new instance.
/// </summary> /// </summary>
/// <param name="gameSuffix">An optional suffix which will isolate this host from others called from the same method source.</param>
/// <param name="bindIPC">Whether to bind IPC channels.</param> /// <param name="bindIPC">Whether to bind IPC channels.</param>
/// <param name="realtime">Whether the host should be forced to run in realtime, rather than accelerated test time.</param> /// <param name="realtime">Whether the host should be forced to run in realtime, rather than accelerated test time.</param>
/// <param name="bypassCleanup">Whether to bypass directory cleanup on host disposal. Should be used only if a subsequent test relies on the files still existing.</param> /// <param name="bypassCleanup">Whether to bypass directory cleanup on host disposal. Should be used only if a subsequent test relies on the files still existing.</param>
/// <param name="callingMethodName">The name of the calling method, used for test file isolation and clean-up.</param> /// <param name="callingMethodName">The name of the calling method, used for test file isolation and clean-up.</param>
public CleanRunHeadlessGameHost(string gameSuffix = @"", bool bindIPC = false, bool realtime = true, bool bypassCleanup = false, [CallerMemberName] string callingMethodName = @"") public CleanRunHeadlessGameHost(bool bindIPC = false, bool realtime = true, bool bypassCleanup = false, [CallerMemberName] string callingMethodName = @"")
: base(callingMethodName + gameSuffix, bindIPC, realtime, bypassCleanup: bypassCleanup) : base($"{callingMethodName}-{Guid.NewGuid()}", bindIPC, realtime, bypassCleanup: bypassCleanup)
{ {
} }
protected override void SetupForRun() protected override void SetupForRun()
{ {
Storage.DeleteDirectory(string.Empty); try
{
Storage.DeleteDirectory(string.Empty);
}
catch
{
// May fail if a logging target has already been set via OsuStorage.ChangeTargetStorage.
}
// base call needs to be run *after* storage is emptied, as it updates the (static) logger's storage and may start writing // base call needs to be run *after* storage is emptied, as it updates the (static) logger's storage and may start writing
// log entries from another source if a unit test host is shared over multiple tests, causing a file access denied exception. // log entries from another source if a unit test host is shared over multiple tests, causing a file access denied exception.

View File

@ -36,7 +36,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Realm" Version="10.7.1" /> <PackageReference Include="Realm" Version="10.7.1" />
<PackageReference Include="ppy.osu.Framework" Version="2021.1222.0" /> <PackageReference Include="ppy.osu.Framework" Version="2021.1225.0" />
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
<PackageReference Include="Sentry" Version="3.12.1" /> <PackageReference Include="Sentry" Version="3.12.1" />
<PackageReference Include="SharpCompress" Version="0.30.1" /> <PackageReference Include="SharpCompress" Version="0.30.1" />

View File

@ -60,7 +60,7 @@
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
</ItemGroup> </ItemGroup>
<ItemGroup Label="Package References"> <ItemGroup Label="Package References">
<PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1222.0" /> <PackageReference Include="ppy.osu.Framework.iOS" Version="2021.1225.0" />
<PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" /> <PackageReference Include="ppy.osu.Game.Resources" Version="2021.1215.0" />
</ItemGroup> </ItemGroup>
<!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) --> <!-- See https://github.com/dotnet/runtime/issues/35988 (can be removed after Xamarin uses net5.0 / net6.0) -->
@ -83,7 +83,7 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="ppy.osu.Framework" Version="2021.1222.0" /> <PackageReference Include="ppy.osu.Framework" Version="2021.1225.0" />
<PackageReference Include="SharpCompress" Version="0.30.0" /> <PackageReference Include="SharpCompress" Version="0.30.0" />
<PackageReference Include="NUnit" Version="3.13.2" /> <PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="SharpRaven" Version="2.4.0" /> <PackageReference Include="SharpRaven" Version="2.4.0" />