StartEndGameRulesTest.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System.Linq;
  2. using Content.Server.GameTicking;
  3. using Content.Shared.CCVar;
  4. using Robust.Shared.Configuration;
  5. using Robust.Shared.GameObjects;
  6. namespace Content.IntegrationTests.Tests.GameRules;
  7. [TestFixture]
  8. public sealed class StartEndGameRulesTest
  9. {
  10. /// <summary>
  11. /// Tests that all game rules can be added/started/ended at the same time without exceptions.
  12. /// </summary>
  13. [Test]
  14. public async Task TestAllConcurrent()
  15. {
  16. await using var pair = await PoolManager.GetServerClient(new PoolSettings
  17. {
  18. Dirty = true,
  19. DummyTicker = false
  20. });
  21. var server = pair.Server;
  22. await server.WaitIdleAsync();
  23. var gameTicker = server.ResolveDependency<IEntitySystemManager>().GetEntitySystem<GameTicker>();
  24. var cfg = server.ResolveDependency<IConfigurationManager>();
  25. Assert.That(cfg.GetCVar(CCVars.GridFill), Is.False);
  26. await server.WaitAssertion(() =>
  27. {
  28. var rules = gameTicker.GetAllGameRulePrototypes().ToList();
  29. rules.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal));
  30. // Start all rules
  31. foreach (var rule in rules)
  32. {
  33. gameTicker.StartGameRule(rule.ID);
  34. }
  35. });
  36. // Wait three ticks for any random update loops that might happen
  37. await server.WaitRunTicks(3);
  38. await server.WaitAssertion(() =>
  39. {
  40. // End all rules
  41. gameTicker.ClearGameRules();
  42. Assert.That(!gameTicker.GetAddedGameRules().Any());
  43. });
  44. await pair.CleanReturnAsync();
  45. }
  46. }