Add test to load all config presets (#20705)
This commit is contained in:
71
Content.IntegrationTests/Tests/ConfigPresetTests.cs
Normal file
71
Content.IntegrationTests/Tests/ConfigPresetTests.cs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using Content.Server.Entry;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
|
using Robust.Shared.ContentPack;
|
||||||
|
|
||||||
|
namespace Content.IntegrationTests.Tests;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public sealed class ConfigPresetTests
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public async Task TestLoadAll()
|
||||||
|
{
|
||||||
|
var pair = await PoolManager.GetServerClient();
|
||||||
|
var server = pair.Server;
|
||||||
|
|
||||||
|
var resources = server.ResolveDependency<IResourceManager>();
|
||||||
|
var config = server.ResolveDependency<IConfigurationManager>();
|
||||||
|
|
||||||
|
await server.WaitPost(() =>
|
||||||
|
{
|
||||||
|
var originalCVars = new List<(string, object)>();
|
||||||
|
foreach (var cvar in config.GetRegisteredCVars())
|
||||||
|
{
|
||||||
|
var value = config.GetCVar<object>(cvar);
|
||||||
|
originalCVars.Add((cvar, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
var originalCvarsStream = new MemoryStream();
|
||||||
|
config.SaveToTomlStream(originalCvarsStream, config.GetRegisteredCVars());
|
||||||
|
originalCvarsStream.Position = 0;
|
||||||
|
|
||||||
|
var presets = resources.ContentFindFiles(EntryPoint.ConfigPresetsDir);
|
||||||
|
Assert.Multiple(() =>
|
||||||
|
{
|
||||||
|
foreach (var preset in presets)
|
||||||
|
{
|
||||||
|
var stream = resources.ContentFileRead(preset);
|
||||||
|
Assert.DoesNotThrow(() => config.LoadDefaultsFromTomlStream(stream));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
config.LoadDefaultsFromTomlStream(originalCvarsStream);
|
||||||
|
|
||||||
|
foreach (var originalCVar in originalCVars)
|
||||||
|
{
|
||||||
|
var (name, originalValue) = originalCVar;
|
||||||
|
var newValue = config.GetCVar<object>(name);
|
||||||
|
var originalValueType = originalValue.GetType();
|
||||||
|
var newValueType = newValue.GetType();
|
||||||
|
if (originalValueType.IsEnum || newValueType.IsEnum)
|
||||||
|
{
|
||||||
|
originalValue = Enum.ToObject(originalValueType, originalValue);
|
||||||
|
newValue = Enum.ToObject(originalValueType, newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (originalValueType == typeof(float) || newValueType == typeof(float))
|
||||||
|
{
|
||||||
|
originalValue = Convert.ToSingle(originalValue);
|
||||||
|
newValue = Convert.ToSingle(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Equals(newValue, originalValue))
|
||||||
|
Assert.Fail($"CVar {name} was not reset to its original value.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await pair.CleanReturnAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
[assembly: InternalsVisibleTo("Content.Tests")]
|
[assembly: InternalsVisibleTo("Content.Tests")]
|
||||||
|
[assembly: InternalsVisibleTo("Content.IntegrationTests")]
|
||||||
|
|||||||
@@ -21,20 +21,20 @@ using Content.Server.ServerUpdates;
|
|||||||
using Content.Server.Voting.Managers;
|
using Content.Server.Voting.Managers;
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.CCVar;
|
||||||
using Content.Shared.Kitchen;
|
using Content.Shared.Kitchen;
|
||||||
|
using Content.Shared.Localizations;
|
||||||
using Robust.Server;
|
using Robust.Server;
|
||||||
using Robust.Shared.Configuration;
|
|
||||||
using Robust.Server.ServerStatus;
|
using Robust.Server.ServerStatus;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
using Robust.Shared.ContentPack;
|
using Robust.Shared.ContentPack;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
using Content.Shared.Localizations;
|
|
||||||
|
|
||||||
namespace Content.Server.Entry
|
namespace Content.Server.Entry
|
||||||
{
|
{
|
||||||
public sealed class EntryPoint : GameServer
|
public sealed class EntryPoint : GameServer
|
||||||
{
|
{
|
||||||
private const string ConfigPresetsDir = "/ConfigPresets/";
|
internal const string ConfigPresetsDir = "/ConfigPresets/";
|
||||||
private const string ConfigPresetsDirBuild = $"{ConfigPresetsDir}Build/";
|
private const string ConfigPresetsDirBuild = $"{ConfigPresetsDir}Build/";
|
||||||
|
|
||||||
private EuiManager _euiManager = default!;
|
private EuiManager _euiManager = default!;
|
||||||
|
|||||||
Reference in New Issue
Block a user