Fix adding multiple interpolated expressions with the same format to admin logs

Add test case
This commit is contained in:
DrSmugleaf
2021-12-26 00:38:04 +01:00
parent 666be08d86
commit 82d9c38c96
2 changed files with 62 additions and 1 deletions

View File

@@ -291,4 +291,49 @@ public class AddTests : ContentIntegrationTest
json.Dispose(); json.Dispose();
} }
} }
[Test]
public async Task DuplicatePlayerDoesNotThrowTest()
{
var (client, server) = await StartConnectedServerClientPair(serverOptions: new ServerContentIntegrationOption
{
CVarOverrides =
{
[CCVars.AdminLogsQueueSendDelay.Name] = "0"
},
});
await Task.WhenAll(client.WaitIdleAsync(), server.WaitIdleAsync());
var sPlayers = server.ResolveDependency<IPlayerManager>();
var sSystems = server.ResolveDependency<IEntitySystemManager>();
var sAdminLogSystem = sSystems.GetEntitySystem<AdminLogSystem>();
var guid = Guid.NewGuid();
await server.WaitPost(() =>
{
var player = sPlayers.ServerSessions.Single();
sAdminLogSystem.Add(LogType.Unknown, $"{player} {player} test log: {guid}");
});
await WaitUntil(server, async () =>
{
var logs = await sAdminLogSystem.CurrentRoundLogs(new LogFilter
{
Search = guid.ToString()
});
if (logs.Count == 0)
{
return false;
}
return true;
});
Assert.Pass();
}
} }

View File

@@ -40,7 +40,23 @@ public ref struct LogStringHandler
format = argument[0] == '@' ? argument[1..] : argument; format = argument[0] == '@' ? argument[1..] : argument;
} }
Values.Add(format, value); if (!Values.TryAdd(format, value))
{
if (Values[format] == (object?) value)
{
return;
}
var originalFormat = format;
var i = 2;
format = $"{originalFormat}_{i}";
while (!Values.TryAdd(format, value))
{
format = $"{originalFormat}_{i}";
i++;
}
}
} }
public void AppendLiteral(string value) public void AppendLiteral(string value)