From 535ccbb6a1f93f4c7c257d1defcfde7bc300ccdd Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Tue, 3 Oct 2023 05:03:24 -0700 Subject: [PATCH 1/3] Add test to load all config presets --- .../Tests/ConfigPresetTests.cs | 30 +++++++++++++++++++ Content.Server/AssemblyInfo.cs | 1 + Content.Server/Entry/EntryPoint.cs | 6 ++-- 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 Content.IntegrationTests/Tests/ConfigPresetTests.cs diff --git a/Content.IntegrationTests/Tests/ConfigPresetTests.cs b/Content.IntegrationTests/Tests/ConfigPresetTests.cs new file mode 100644 index 000000000000..0763c4cc7f34 --- /dev/null +++ b/Content.IntegrationTests/Tests/ConfigPresetTests.cs @@ -0,0 +1,30 @@ +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(); + var config = server.ResolveDependency(); + + await server.WaitPost(() => + { + var presets = resources.ContentFindFiles(EntryPoint.ConfigPresetsDir); + + foreach (var preset in presets) + { + var stream = resources.ContentFileRead(preset); + config.LoadDefaultsFromTomlStream(stream); + } + }); + } +} diff --git a/Content.Server/AssemblyInfo.cs b/Content.Server/AssemblyInfo.cs index 54b2cd50ace2..513ab37ab236 100644 --- a/Content.Server/AssemblyInfo.cs +++ b/Content.Server/AssemblyInfo.cs @@ -1,3 +1,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Content.Tests")] +[assembly: InternalsVisibleTo("Content.IntegrationTests")] diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 41b6963332f6..d71225116caf 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -21,20 +21,20 @@ using Content.Server.Voting.Managers; using Content.Shared.CCVar; using Content.Shared.Kitchen; +using Content.Shared.Localizations; using Robust.Server; -using Robust.Shared.Configuration; using Robust.Server.ServerStatus; +using Robust.Shared.Configuration; using Robust.Shared.ContentPack; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; -using Content.Shared.Localizations; namespace Content.Server.Entry { public sealed class EntryPoint : GameServer { - private const string ConfigPresetsDir = "/ConfigPresets/"; + internal const string ConfigPresetsDir = "/ConfigPresets/"; private const string ConfigPresetsDirBuild = $"{ConfigPresetsDir}Build/"; private EuiManager _euiManager = default!; From f8bcffa241cb297f45e74c79a195691f1e0cb45f Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Fri, 6 Oct 2023 19:28:59 -0700 Subject: [PATCH 2/3] Test cleanup on end --- .../Tests/ConfigPresetTests.cs | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/Content.IntegrationTests/Tests/ConfigPresetTests.cs b/Content.IntegrationTests/Tests/ConfigPresetTests.cs index 0763c4cc7f34..eb2305b4adb8 100644 --- a/Content.IntegrationTests/Tests/ConfigPresetTests.cs +++ b/Content.IntegrationTests/Tests/ConfigPresetTests.cs @@ -1,4 +1,6 @@ -using Content.Server.Entry; +using System.Collections.Generic; +using System.IO; +using Content.Server.Entry; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; @@ -18,13 +20,52 @@ public async Task TestLoadAll() await server.WaitPost(() => { + var originalCVars = new List<(string, object)>(); + foreach (var cvar in config.GetRegisteredCVars()) + { + var value = config.GetCVar(cvar); + originalCVars.Add((cvar, value)); + } + + var saveStream = new MemoryStream(); + config.SaveToTomlStream(saveStream, config.GetRegisteredCVars()); + saveStream.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)); + } + }); - foreach (var preset in presets) + config.LoadDefaultsFromTomlStream(saveStream); + + foreach (var originalCVar in originalCVars) { - var stream = resources.ContentFileRead(preset); - config.LoadDefaultsFromTomlStream(stream); + var (name, originalValue) = originalCVar; + var newValue = config.GetCVar(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(); } } From 136a02f469fc0a0483c3291202bfdf467a67b5a5 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Fri, 6 Oct 2023 19:30:47 -0700 Subject: [PATCH 3/3] Rename stream var name for clarity --- Content.IntegrationTests/Tests/ConfigPresetTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Content.IntegrationTests/Tests/ConfigPresetTests.cs b/Content.IntegrationTests/Tests/ConfigPresetTests.cs index eb2305b4adb8..9defdcee99ca 100644 --- a/Content.IntegrationTests/Tests/ConfigPresetTests.cs +++ b/Content.IntegrationTests/Tests/ConfigPresetTests.cs @@ -27,9 +27,9 @@ await server.WaitPost(() => originalCVars.Add((cvar, value)); } - var saveStream = new MemoryStream(); - config.SaveToTomlStream(saveStream, config.GetRegisteredCVars()); - saveStream.Position = 0; + var originalCvarsStream = new MemoryStream(); + config.SaveToTomlStream(originalCvarsStream, config.GetRegisteredCVars()); + originalCvarsStream.Position = 0; var presets = resources.ContentFindFiles(EntryPoint.ConfigPresetsDir); Assert.Multiple(() => @@ -41,7 +41,7 @@ await server.WaitPost(() => } }); - config.LoadDefaultsFromTomlStream(saveStream); + config.LoadDefaultsFromTomlStream(originalCvarsStream); foreach (var originalCVar in originalCVars) {