| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- using System.Collections.Generic;
- using System.Linq;
- using Content.Server.Administration.Logs;
- using Content.Server.Database;
- using Content.Server.GameTicking;
- using Content.Shared.Administration.Logs;
- using Content.Shared.Database;
- using Robust.Server.Player;
- using Robust.Shared.GameObjects;
- namespace Content.IntegrationTests.Tests.Administration.Logs;
- [TestFixture]
- [TestOf(typeof(AdminLogSystem))]
- public sealed class AddTests
- {
- public static PoolSettings LogTestSettings = new()
- {
- AdminLogsEnabled = true,
- DummyTicker = false,
- Connected = true
- };
- [Test]
- public async Task AddAndGetSingleLog()
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sEntities = server.ResolveDependency<IEntityManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var guid = Guid.NewGuid();
- await pair.CreateTestMap();
- var coordinates = pair.TestMap.GridCoords;
- await server.WaitPost(() =>
- {
- var entity = sEntities.SpawnEntity(null, coordinates);
- sAdminLogSystem.Add(LogType.Unknown, $"{entity:Entity} test log: {guid}");
- });
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = sAdminLogSystem.CurrentRoundJson(new LogFilter
- {
- Search = guid.ToString()
- });
- await foreach (var json in logs)
- {
- var root = json.RootElement;
- // camelCased automatically
- Assert.That(root.TryGetProperty("entity", out _), Is.True);
- json.Dispose();
- return true;
- }
- return false;
- });
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task AddAndGetUnformattedLog()
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sDatabase = server.ResolveDependency<IServerDbManager>();
- var sEntities = server.ResolveDependency<IEntityManager>();
- var sSystems = server.ResolveDependency<IEntitySystemManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var sGamerTicker = sSystems.GetEntitySystem<GameTicker>();
- var guid = Guid.NewGuid();
- var testMap = await pair.CreateTestMap();
- var coordinates = testMap.GridCoords;
- await server.WaitPost(() =>
- {
- var entity = sEntities.SpawnEntity(null, coordinates);
- sAdminLogSystem.Add(LogType.Unknown, $"{entity} test log: {guid}");
- });
- SharedAdminLog log = default;
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
- {
- Search = guid.ToString()
- });
- if (logs.Count == 0)
- {
- return false;
- }
- log = logs.First();
- return true;
- });
- var filter = new LogFilter
- {
- Round = sGamerTicker.RoundId,
- Search = log.Message,
- Types = new HashSet<LogType> { log.Type },
- };
- await foreach (var json in sDatabase.GetAdminLogsJson(filter))
- {
- var root = json.RootElement;
- Assert.Multiple(() =>
- {
- Assert.That(root.TryGetProperty("entity", out _), Is.True);
- Assert.That(root.TryGetProperty("guid", out _), Is.True);
- });
- json.Dispose();
- }
- await pair.CleanReturnAsync();
- }
- [Test]
- [TestCase(500)]
- public async Task BulkAddLogs(int amount)
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sEntities = server.ResolveDependency<IEntityManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var testMap = await pair.CreateTestMap();
- var coordinates = testMap.GridCoords;
- await server.WaitPost(() =>
- {
- var entity = sEntities.SpawnEntity(null, coordinates);
- for (var i = 0; i < amount; i++)
- {
- sAdminLogSystem.Add(LogType.Unknown, $"{entity:Entity} test log.");
- }
- });
- await PoolManager.WaitUntil(server, async () =>
- {
- var messages = await sAdminLogSystem.CurrentRoundLogs();
- return messages.Count >= amount;
- });
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task AddPlayerSessionLog()
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sPlayers = server.ResolveDependency<IPlayerManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- Guid playerGuid = default;
- await server.WaitPost(() =>
- {
- var player = sPlayers.Sessions.First();
- playerGuid = player.UserId;
- Assert.DoesNotThrow(() =>
- {
- sAdminLogSystem.Add(LogType.Unknown, $"{player:Player} test log.");
- });
- });
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = await sAdminLogSystem.CurrentRoundLogs();
- if (logs.Count == 0)
- {
- return false;
- }
- Assert.That(logs.First().Players, Does.Contain(playerGuid));
- return true;
- });
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task PreRoundAddAndGetSingle()
- {
- var setting = new PoolSettings
- {
- Dirty = true,
- InLobby = true,
- AdminLogsEnabled = true
- };
- await using var pair = await PoolManager.GetServerClient(setting);
- var server = pair.Server;
- var sDatabase = server.ResolveDependency<IServerDbManager>();
- var sSystems = server.ResolveDependency<IEntitySystemManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var sGamerTicker = sSystems.GetEntitySystem<GameTicker>();
- var guid = Guid.NewGuid();
- await server.WaitPost(() =>
- {
- sAdminLogSystem.Add(LogType.Unknown, $"test log: {guid}");
- });
- await server.WaitPost(() =>
- {
- sGamerTicker.StartRound(true);
- });
- SharedAdminLog log = default;
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
- {
- Search = guid.ToString()
- });
- if (logs.Count == 0)
- {
- return false;
- }
- log = logs.First();
- return true;
- });
- var filter = new LogFilter
- {
- Round = sGamerTicker.RoundId,
- Search = log.Message,
- Types = new HashSet<LogType> { log.Type },
- };
- await foreach (var json in sDatabase.GetAdminLogsJson(filter))
- {
- var root = json.RootElement;
- Assert.That(root.TryGetProperty("guid", out _), Is.True);
- json.Dispose();
- }
- await pair.CleanReturnAsync();
- }
- [Test]
- public async Task DuplicatePlayerDoesNotThrowTest()
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sPlayers = server.ResolveDependency<IPlayerManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var guid = Guid.NewGuid();
- await server.WaitPost(() =>
- {
- var player = sPlayers.Sessions.Single();
- sAdminLogSystem.Add(LogType.Unknown, $"{player} {player} test log: {guid}");
- });
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
- {
- Search = guid.ToString()
- });
- if (logs.Count == 0)
- {
- return false;
- }
- return true;
- });
- await pair.CleanReturnAsync();
- Assert.Pass();
- }
- [Test]
- public async Task DuplicatePlayerIdDoesNotThrowTest()
- {
- await using var pair = await PoolManager.GetServerClient(LogTestSettings);
- var server = pair.Server;
- var sPlayers = server.ResolveDependency<IPlayerManager>();
- var sAdminLogSystem = server.ResolveDependency<IAdminLogManager>();
- var guid = Guid.NewGuid();
- await server.WaitPost(() =>
- {
- var player = sPlayers.Sessions.Single();
- sAdminLogSystem.Add(LogType.Unknown, $"{player:first} {player:second} test log: {guid}");
- });
- await PoolManager.WaitUntil(server, async () =>
- {
- var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
- {
- Search = guid.ToString()
- });
- if (logs.Count == 0)
- {
- return false;
- }
- return true;
- });
- await pair.CleanReturnAsync();
- Assert.Pass();
- }
- }
|