ReplayTests.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Content.Server.GameTicking;
  2. using Content.Shared.CCVar;
  3. using Robust.Shared;
  4. using Robust.Shared.Replays;
  5. namespace Content.IntegrationTests.Tests.Replays;
  6. [TestFixture]
  7. public sealed class ReplayTests
  8. {
  9. /// <summary>
  10. /// Simple test that just makes sure that automatic replay recording on round restarts works without any issues.
  11. /// </summary>
  12. [Test]
  13. public async Task AutoRecordReplayTest()
  14. {
  15. var settings = new PoolSettings
  16. {
  17. DummyTicker = false,
  18. Dirty = true
  19. };
  20. await using var pair = await PoolManager.GetServerClient(settings);
  21. var server = pair.Server;
  22. Assert.That(server.CfgMan.GetCVar(CVars.ReplayServerRecordingEnabled), Is.False);
  23. var recordMan = server.ResolveDependency<IReplayRecordingManager>();
  24. Assert.That(recordMan.IsRecording, Is.False);
  25. // Setup cvars.
  26. var autoRec = server.CfgMan.GetCVar(CCVars.ReplayAutoRecord);
  27. var autoRecName = server.CfgMan.GetCVar(CCVars.ReplayAutoRecordName);
  28. var tempDir = server.CfgMan.GetCVar(CCVars.ReplayAutoRecordTempDir);
  29. server.CfgMan.SetCVar(CVars.ReplayServerRecordingEnabled, true);
  30. server.CfgMan.SetCVar(CCVars.ReplayAutoRecord, true);
  31. server.CfgMan.SetCVar(CCVars.ReplayAutoRecordTempDir, "/a/b/");
  32. server.CfgMan.SetCVar(CCVars.ReplayAutoRecordName, $"c/d/{autoRecName}");
  33. // Restart the round a few times
  34. var ticker = server.System<GameTicker>();
  35. await server.WaitPost(() => ticker.RestartRound());
  36. await pair.RunTicksSync(25);
  37. Assert.That(recordMan.IsRecording, Is.True);
  38. await server.WaitPost(() => ticker.RestartRound());
  39. await pair.RunTicksSync(25);
  40. Assert.That(recordMan.IsRecording, Is.True);
  41. // Reset cvars
  42. server.CfgMan.SetCVar(CVars.ReplayServerRecordingEnabled, false);
  43. server.CfgMan.SetCVar(CCVars.ReplayAutoRecord, autoRec);
  44. server.CfgMan.SetCVar(CCVars.ReplayAutoRecordTempDir, tempDir);
  45. server.CfgMan.SetCVar(CCVars.ReplayAutoRecordName, autoRecName);
  46. // Restart the round again to disable the current recording.
  47. await server.WaitPost(() => ticker.RestartRound());
  48. await pair.RunTicksSync(25);
  49. Assert.That(recordMan.IsRecording, Is.False);
  50. await pair.CleanReturnAsync();
  51. }
  52. }