ServerReloginTest.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Linq;
  2. using Content.Shared.CCVar;
  3. using Robust.Server.Player;
  4. using Robust.Shared.Configuration;
  5. using Robust.Shared.Network;
  6. namespace Content.IntegrationTests.Tests.Lobby;
  7. public sealed class ServerReloginTest
  8. {
  9. [Test]
  10. public async Task Relogin()
  11. {
  12. await using var pair = await PoolManager.GetServerClient(new PoolSettings
  13. {
  14. Connected = true,
  15. DummyTicker = false
  16. });
  17. var server = pair.Server;
  18. var client = pair.Client;
  19. var originalMaxPlayers = 0;
  20. string username = null;
  21. var serverConfig = server.ResolveDependency<IConfigurationManager>();
  22. var serverPlayerMgr = server.ResolveDependency<IPlayerManager>();
  23. var clientNetManager = client.ResolveDependency<IClientNetManager>();
  24. await server.WaitAssertion(() =>
  25. {
  26. Assert.That(serverPlayerMgr.PlayerCount, Is.EqualTo(1));
  27. originalMaxPlayers = serverConfig.GetCVar(CCVars.SoftMaxPlayers);
  28. username = serverPlayerMgr.Sessions.First().Name;
  29. //No new players are allowed, but since our client was already playing, they should be able to get in
  30. serverConfig.SetCVar(CCVars.SoftMaxPlayers, 0);
  31. });
  32. await client.WaitAssertion(() =>
  33. {
  34. clientNetManager.ClientDisconnect("For testing");
  35. });
  36. await pair.RunTicksSync(20);
  37. await server.WaitAssertion(() =>
  38. {
  39. Assert.That(serverPlayerMgr.PlayerCount, Is.EqualTo(0));
  40. });
  41. client.SetConnectTarget(server);
  42. await client.WaitPost(() =>
  43. {
  44. clientNetManager.ClientConnect(null!, 0, username);
  45. });
  46. await pair.RunTicksSync(20);
  47. await server.WaitAssertion(() =>
  48. {
  49. // Check that we were able to reconnect
  50. Assert.That(serverPlayerMgr.PlayerCount, Is.EqualTo(1));
  51. //Put the cvar back, so other tests can still use this server
  52. serverConfig.SetCVar(CCVars.SoftMaxPlayers, originalMaxPlayers);
  53. });
  54. await pair.CleanReturnAsync();
  55. }
  56. }