using DistTestCore; using DistTestCore.Codex; using NUnit.Framework; namespace TestsLong.BasicTests { [TestFixture] public class LargeFileTests : DistTest { [Test] [Combinatorial] [UseLongTimeouts] public void DownloadCorrectnessTest( [Values(1, 10, 100, 1024)] int sizeInMB, [Values(1, 10, 100, 1024)] int multiplier) { var size = (sizeInMB * multiplier).MB(); var expectedFile = GenerateTestFile(size); var node = SetupCodexNode(); var uploadStart = DateTime.UtcNow; var cid = node.UploadFile(expectedFile); var downloadStart = DateTime.UtcNow; var actualFile = node.DownloadContent(cid); var downloadFinished = DateTime.UtcNow; expectedFile.AssertIsEqual(actualFile); AssertTimeConstraint(uploadStart, downloadStart, downloadFinished, size); } private void AssertTimeConstraint(DateTime uploadStart, DateTime downloadStart, DateTime downloadFinished, ByteSize size) { float sizeInMB = size.ToMB(); var uploadTimePerMB = (uploadStart - downloadStart) / sizeInMB; var downloadTimePerMB = (downloadStart - downloadFinished) / sizeInMB; Assert.That(uploadTimePerMB, Is.LessThan(CodexContainerRecipe.MaxUploadTimePerMegabyte), "MaxUploadTimePerMegabyte performance threshold breached."); Assert.That(downloadTimePerMB, Is.LessThan(CodexContainerRecipe.MaxDownloadTimePerMegabyte), "MaxDownloadTimePerMegabyte performance threshold breached."); } } }