mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-07-18 11:34:46 +01:00
106 lines
4.4 KiB
C#
106 lines
4.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.IO.Abstractions.TestingHelpers;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Options;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
|
using Moq;
|
|
|
|
using Tgstation.Server.Host.Configuration;
|
|
using Tgstation.Server.Host.IO;
|
|
using Tgstation.Server.Host.System;
|
|
using Tgstation.Server.Host.Transfer;
|
|
|
|
namespace Tgstation.Server.Host.Components.StaticFiles.Tests
|
|
{
|
|
[TestClass]
|
|
public sealed class TestConfiguration
|
|
{
|
|
/// <summary>
|
|
/// Regression test for https://github.com/tgstation/tgstation-server/issues/1617.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public async Task TestListOrdering()
|
|
{
|
|
using var loggerFactory = LoggerFactory.Create(builder =>
|
|
{
|
|
builder.AddConsole();
|
|
builder.SetMinimumLevel(LogLevel.Trace);
|
|
});
|
|
|
|
var mockFs = new MockFileSystem();
|
|
var tempPath = Path.GetTempFileName();
|
|
File.Delete(tempPath);
|
|
var ioManager = new DefaultIOManager(mockFs).CreateResolverForSubdirectory(tempPath);
|
|
await ioManager.CreateDirectory(".", CancellationToken.None);
|
|
try
|
|
{
|
|
await ioManager.WriteAllBytes("a.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.WriteAllBytes("c.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.WriteAllBytes("d.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.CreateDirectory("a", CancellationToken.None);
|
|
await ioManager.CreateDirectory("c", CancellationToken.None);
|
|
await ioManager.CreateDirectory("d", CancellationToken.None);
|
|
|
|
var configuration = new Configuration(
|
|
ioManager,
|
|
new SynchronousIOManager(
|
|
mockFs,
|
|
loggerFactory.CreateLogger<SynchronousIOManager>()),
|
|
Mock.Of<IFilesystemLinkFactory>(),
|
|
Mock.Of<IProcessExecutor>(),
|
|
Mock.Of<IPostWriteHandler>(),
|
|
Mock.Of<IPlatformIdentifier>(),
|
|
Mock.Of<IFileTransferTicketProvider>(),
|
|
Mock.Of<IOptionsMonitor<GeneralConfiguration>>(),
|
|
Mock.Of<IOptionsMonitor<SessionConfiguration>>(),
|
|
loggerFactory.CreateLogger<Configuration>(),
|
|
new Models.Instance
|
|
{
|
|
Path = "Some path",
|
|
});
|
|
|
|
await configuration.StartAsync(CancellationToken.None);
|
|
|
|
var listResponse = (await configuration.ListDirectory(".", null, CancellationToken.None)).ToList();
|
|
Assert.AreEqual(9, listResponse.Count);
|
|
Assert.AreEqual("a", listResponse[0].Path[2..]);
|
|
Assert.AreEqual("c", listResponse[1].Path[2..]);
|
|
Assert.AreEqual("CodeModifications", listResponse[2].Path[2..]);
|
|
Assert.AreEqual("d", listResponse[3].Path[2..]);
|
|
Assert.AreEqual("EventScripts", listResponse[4].Path[2..]);
|
|
Assert.AreEqual("GameStaticFiles", listResponse[5].Path[2..]);
|
|
Assert.AreEqual("a.txt", listResponse[6].Path[2..]);
|
|
Assert.AreEqual("c.txt", listResponse[7].Path[2..]);
|
|
Assert.AreEqual("d.txt", listResponse[8].Path[2..]);
|
|
|
|
await ioManager.CreateDirectory("GameStaticFiles/config/title_screens", CancellationToken.None);
|
|
await ioManager.CreateDirectory("GameStaticFiles/config/title_music", CancellationToken.None);
|
|
await ioManager.WriteAllBytes("GameStaticFiles/config/word_filter.toml", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.WriteAllBytes("GameStaticFiles/config/whitelist.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.WriteAllBytes("GameStaticFiles/config/unbuyableshuttles.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
await ioManager.WriteAllBytes("GameStaticFiles/config/spaceruinblacklist.txt", Array.Empty<byte>(), CancellationToken.None);
|
|
|
|
listResponse = (await configuration.ListDirectory("GameStaticFiles/config", null, CancellationToken.None)).ToList();
|
|
var substringStart = "GameStaticFiles/config".Length + 1;
|
|
Assert.AreEqual(6, listResponse.Count);
|
|
Assert.AreEqual("title_music", listResponse[0].Path[substringStart..]);
|
|
Assert.AreEqual("title_screens", listResponse[1].Path[substringStart..]);
|
|
Assert.AreEqual("spaceruinblacklist.txt", listResponse[2].Path[substringStart..]);
|
|
Assert.AreEqual("unbuyableshuttles.txt", listResponse[3].Path[substringStart..]);
|
|
Assert.AreEqual("whitelist.txt", listResponse[4].Path[substringStart..]);
|
|
Assert.AreEqual("word_filter.toml", listResponse[5].Path[substringStart..]);
|
|
}
|
|
finally
|
|
{
|
|
await ioManager.DeleteDirectory(tempPath, CancellationToken.None);
|
|
}
|
|
}
|
|
}
|
|
}
|