1
0

TestPair.Cvars.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #nullable enable
  2. using System.Collections.Generic;
  3. using Content.Shared.CCVar;
  4. using Robust.Shared.Configuration;
  5. using Robust.Shared.Utility;
  6. namespace Content.IntegrationTests.Pair;
  7. public sealed partial class TestPair
  8. {
  9. private readonly Dictionary<string, object> _modifiedClientCvars = new();
  10. private readonly Dictionary<string, object> _modifiedServerCvars = new();
  11. private void OnServerCvarChanged(CVarChangeInfo args)
  12. {
  13. _modifiedServerCvars.TryAdd(args.Name, args.OldValue);
  14. }
  15. private void OnClientCvarChanged(CVarChangeInfo args)
  16. {
  17. _modifiedClientCvars.TryAdd(args.Name, args.OldValue);
  18. }
  19. internal void ClearModifiedCvars()
  20. {
  21. _modifiedClientCvars.Clear();
  22. _modifiedServerCvars.Clear();
  23. }
  24. /// <summary>
  25. /// Reverts any cvars that were modified during a test back to their original values.
  26. /// </summary>
  27. public async Task RevertModifiedCvars()
  28. {
  29. await Server.WaitPost(() =>
  30. {
  31. foreach (var (name, value) in _modifiedServerCvars)
  32. {
  33. if (Server.CfgMan.GetCVar(name).Equals(value))
  34. continue;
  35. Server.Log.Info($"Resetting cvar {name} to {value}");
  36. Server.CfgMan.SetCVar(name, value);
  37. }
  38. // I just love order dependent cvars
  39. if (_modifiedServerCvars.TryGetValue(CCVars.PanicBunkerEnabled.Name, out var panik))
  40. Server.CfgMan.SetCVar(CCVars.PanicBunkerEnabled.Name, panik);
  41. });
  42. await Client.WaitPost(() =>
  43. {
  44. foreach (var (name, value) in _modifiedClientCvars)
  45. {
  46. if (Client.CfgMan.GetCVar(name).Equals(value))
  47. continue;
  48. var flags = Client.CfgMan.GetCVarFlags(name);
  49. if (flags.HasFlag(CVar.REPLICATED) && flags.HasFlag(CVar.SERVER))
  50. continue;
  51. Client.Log.Info($"Resetting cvar {name} to {value}");
  52. Client.CfgMan.SetCVar(name, value);
  53. }
  54. });
  55. ClearModifiedCvars();
  56. }
  57. }