diff --git a/Tests/FrameworkTests/Utils/RandomUtilsTests.cs b/Tests/FrameworkTests/Utils/RandomUtilsTests.cs new file mode 100644 index 00000000..3859f0d3 --- /dev/null +++ b/Tests/FrameworkTests/Utils/RandomUtilsTests.cs @@ -0,0 +1,19 @@ +using NUnit.Framework; +using Utils; + +namespace FrameworkTests.Utils +{ + [TestFixture] + public class RandomUtilsTests + { + [Test] + [Combinatorial] + public void TestRandomStringLength( + [Values(1, 5, 10, 1023, 1024, 1025, 2222)] int length) + { + var str = RandomUtils.GenerateRandomString(length); + + Assert.That(str.Length, Is.EqualTo(length)); + } + } +} diff --git a/Tools/BiblioTech/CodexChecking/CodexTwoWayChecker.cs b/Tools/BiblioTech/CodexChecking/CodexTwoWayChecker.cs index 216ab7f0..4381198a 100644 --- a/Tools/BiblioTech/CodexChecking/CodexTwoWayChecker.cs +++ b/Tools/BiblioTech/CodexChecking/CodexTwoWayChecker.cs @@ -8,7 +8,7 @@ namespace BiblioTech.CodexChecking public interface ICheckResponseHandler { Task CheckNotStarted(); - Task NowCompleted(); + Task NowCompleted(ulong userId, string checkName); Task GiveRoleReward(); Task InvalidData(); @@ -56,13 +56,14 @@ namespace BiblioTech.CodexChecking return; } + Log($"Verifying for downloadCheck: received: '{receivedData}' check: '{check.UniqueData}'"); if (string.IsNullOrEmpty(receivedData) || receivedData != check.UniqueData) { await handler.InvalidData(); return; } - CheckNowCompleted(handler, check, userId); + await CheckNowCompleted(handler, check, userId, "DownloadCheck"); } public async Task StartUploadCheck(ICheckResponseHandler handler, ulong userId) @@ -93,11 +94,12 @@ namespace BiblioTech.CodexChecking return; } - if (await IsManifestLengthCompatible(handler, check, manifest)) + await IsManifestLengthCompatible(handler, check, manifest); + if (true) // debugging, always pass the length check { if (await IsContentCorrect(handler, check, receivedCid)) { - CheckNowCompleted(handler, check, userId); + await CheckNowCompleted(handler, check, userId, "UploadCheck"); return; } } @@ -107,7 +109,7 @@ namespace BiblioTech.CodexChecking private string GenerateUniqueData() { - return $"'{RandomBusyMessage.Get()}'{RandomUtils.GenerateRandomString(12)}"; + return $"{RandomBusyMessage.Get().Substring(5)}{RandomUtils.GenerateRandomString(12)}"; } private string UploadData(string uniqueData) @@ -155,6 +157,7 @@ namespace BiblioTech.CodexChecking var dataLength = check.UniqueData.Length; var manifestLength = manifest.OriginalBytes.SizeInBytes; + Log($"Checking manifest length: dataLength={dataLength},manifestLength={manifestLength}"); await handler.ToAdminChannel($"Debug:dataLength={dataLength},manifestLength={manifestLength}"); return @@ -180,6 +183,7 @@ namespace BiblioTech.CodexChecking } }); + Log($"Checking content: content={content},check={check.UniqueData}"); await handler.ToAdminChannel($"Debug:content=`{content}`,check=`{check.UniqueData}`"); return content == check.UniqueData; } @@ -189,18 +193,18 @@ namespace BiblioTech.CodexChecking } } - private void CheckNowCompleted(ICheckResponseHandler handler, TransferCheck check, ulong userId) + private async Task CheckNowCompleted(ICheckResponseHandler handler, TransferCheck check, ulong userId, string checkName) { if (check.CompletedUtc != DateTime.MinValue) return; check.CompletedUtc = DateTime.UtcNow; repo.SaveChanges(); - handler.NowCompleted(); - CheckUserForRoleRewards(handler, userId); + await handler.NowCompleted(userId, checkName); + await CheckUserForRoleRewards(handler, userId); } - private void CheckUserForRoleRewards(ICheckResponseHandler handler, ulong userId) + private async Task CheckUserForRoleRewards(ICheckResponseHandler handler, ulong userId) { var check = repo.GetOrCreate(userId); @@ -208,8 +212,13 @@ namespace BiblioTech.CodexChecking check.UploadCheck.CompletedUtc != DateTime.MinValue && check.DownloadCheck.CompletedUtc != DateTime.MinValue) { - handler.GiveRoleReward(); + await handler.GiveRoleReward(); } } + + private void Log(string msg) + { + log.Log(msg); + } } } diff --git a/Tools/BiblioTech/Commands/CheckDownloadCommand.cs b/Tools/BiblioTech/Commands/CheckDownloadCommand.cs index 32cff02d..0e1aa563 100644 --- a/Tools/BiblioTech/Commands/CheckDownloadCommand.cs +++ b/Tools/BiblioTech/Commands/CheckDownloadCommand.cs @@ -35,6 +35,11 @@ namespace BiblioTech.Commands } else { + if (content.Length > 1024) + { + await context.Followup("Provided content is too long!"); + return; + } await checker.VerifyDownloadCheck(handler, user.Id, content); } } diff --git a/Tools/BiblioTech/Commands/CheckResponseHandler.cs b/Tools/BiblioTech/Commands/CheckResponseHandler.cs index 8777003e..c3cff1b1 100644 --- a/Tools/BiblioTech/Commands/CheckResponseHandler.cs +++ b/Tools/BiblioTech/Commands/CheckResponseHandler.cs @@ -56,9 +56,10 @@ namespace BiblioTech.Commands await context.Followup("The received data didn't match. Check has failed."); } - public async Task NowCompleted() + public async Task NowCompleted(ulong userId, string checkName) { await context.Followup("Successfully completed the check!"); + await Program.AdminChecker.SendInAdminChannel($"User <@{userId}> has completed check: {checkName}"); } public async Task ToAdminChannel(string msg)