Splits up download tests from connectivity tests and improves testfile logging

This commit is contained in:
benbierens 2023-06-04 08:59:51 +02:00
parent bc4035e723
commit 10a0ac3311
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
8 changed files with 68 additions and 26 deletions

View File

@ -5,12 +5,12 @@ namespace DistTestCore.Codex
{ {
public class CodexContainerRecipe : ContainerRecipeFactory public class CodexContainerRecipe : ContainerRecipeFactory
{ {
#if Arm64 #if Arm64
public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0"; public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0";
#else #else
//public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0"; public const string DockerImage = "thatbenbierens/nim-codex:dhting";
public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0"; //public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0";
#endif #endif
public const string MetricsPortTag = "metrics_port"; public const string MetricsPortTag = "metrics_port";
public const string DiscoveryPortTag = "discovery-port"; public const string DiscoveryPortTag = "discovery-port";

View File

@ -87,9 +87,9 @@ namespace DistTestCore
} }
} }
public TestFile GenerateTestFile(ByteSize size) public TestFile GenerateTestFile(ByteSize size, string label = "")
{ {
return Get().FileManager.GenerateTestFile(size); return Get().FileManager.GenerateTestFile(size, label);
} }
/// <summary> /// <summary>

View File

@ -6,8 +6,8 @@ namespace DistTestCore
{ {
public interface IFileManager public interface IFileManager
{ {
TestFile CreateEmptyTestFile(); TestFile CreateEmptyTestFile(string label = "");
TestFile GenerateTestFile(ByteSize size); TestFile GenerateTestFile(ByteSize size, string label = "");
void DeleteAllTestFiles(); void DeleteAllTestFiles();
void PushFileSet(); void PushFileSet();
void PopFileSet(); void PopFileSet();
@ -30,19 +30,20 @@ namespace DistTestCore
this.log = log; this.log = log;
} }
public TestFile CreateEmptyTestFile() public TestFile CreateEmptyTestFile(string label = "")
{ {
var result = new TestFile(Path.Combine(folder, Guid.NewGuid().ToString() + "_test.bin")); var path = Path.Combine(folder, Guid.NewGuid().ToString() + "_test.bin");
var result = new TestFile(log, path, label);
File.Create(result.Filename).Close(); File.Create(result.Filename).Close();
if (fileSetStack.Any()) fileSetStack.Last().Add(result); if (fileSetStack.Any()) fileSetStack.Last().Add(result);
return result; return result;
} }
public TestFile GenerateTestFile(ByteSize size) public TestFile GenerateTestFile(ByteSize size, string label)
{ {
var result = CreateEmptyTestFile(); var result = CreateEmptyTestFile(label);
GenerateFileBytes(result, size); GenerateFileBytes(result, size);
log.Log($"Generated {size.SizeInBytes} bytes of content for file '{result.Filename}'."); log.Log($"Generated {size.SizeInBytes} bytes of content for file '{result.Describe()}'.");
return result; return result;
} }
@ -104,12 +105,17 @@ namespace DistTestCore
public class TestFile public class TestFile
{ {
public TestFile(string filename) private readonly TestLog log;
public TestFile(TestLog log, string filename, string label)
{ {
this.log = log;
Filename = filename; Filename = filename;
Label = label;
} }
public string Filename { get; } public string Filename { get; }
public string Label { get; }
public long GetFileSize() public long GetFileSize()
{ {
@ -138,10 +144,20 @@ namespace DistTestCore
readExpected = streamExpected.Read(bytesExpected, 0, FileManager.ChunkSize); readExpected = streamExpected.Read(bytesExpected, 0, FileManager.ChunkSize);
readActual = streamActual.Read(bytesActual, 0, FileManager.ChunkSize); readActual = streamActual.Read(bytesActual, 0, FileManager.ChunkSize);
if (readExpected == 0 && readActual == 0) return; if (readExpected == 0 && readActual == 0)
{
log.Log($"OK: '{Describe()}' is equal to '{actual.Describe()}'.");
return;
}
Assert.That(readActual, Is.EqualTo(readExpected), "Unable to read buffers of equal length."); Assert.That(readActual, Is.EqualTo(readExpected), "Unable to read buffers of equal length.");
CollectionAssert.AreEqual(bytesExpected, bytesActual, "Files are not binary-equal."); CollectionAssert.AreEqual(bytesExpected, bytesActual, "Files are not binary-equal.");
} }
} }
public string Describe()
{
if (!string.IsNullOrEmpty(Label)) return Label;
return Filename;
}
} }
} }

View File

@ -33,8 +33,8 @@
private void PerformTest(IOnlineCodexNode uploader, IOnlineCodexNode[] downloaders, ByteSize testFileSize) private void PerformTest(IOnlineCodexNode uploader, IOnlineCodexNode[] downloaders, ByteSize testFileSize)
{ {
// 1 test file per downloader. // Generate 1 test file per downloader.
var files = downloaders.Select(d => test.GenerateTestFile(testFileSize)).ToArray(); var files = downloaders.Select(d => GenerateTestFile(uploader, d, testFileSize)).ToArray();
// Upload all the test files to the uploader. // Upload all the test files to the uploader.
var contentIds = files.Select(uploader.UploadFile).ToArray(); var contentIds = files.Select(uploader.UploadFile).ToArray();
@ -43,10 +43,18 @@
for (var i = 0; i < downloaders.Length; i++) for (var i = 0; i < downloaders.Length; i++)
{ {
var expectedFile = files[i]; var expectedFile = files[i];
var downloadedFile = downloaders[i].DownloadContent(contentIds[i]); var downloadedFile = downloaders[i].DownloadContent(contentIds[i], $"{expectedFile.Label}DOWNLOADED");
expectedFile.AssertIsEqual(downloadedFile); expectedFile.AssertIsEqual(downloadedFile);
} }
} }
private TestFile GenerateTestFile(IOnlineCodexNode uploader, IOnlineCodexNode downloader, ByteSize testFileSize)
{
var up = uploader.GetName().Replace("<", "").Replace(">", "");
var down = downloader.GetName().Replace("<", "").Replace(">", "");
var label = $"FROM{up}TO{down}";
return test.GenerateTestFile(testFileSize, label);
}
} }
} }

View File

@ -13,7 +13,7 @@ namespace DistTestCore
CodexDebugPeerResponse GetDebugPeer(string peerId); CodexDebugPeerResponse GetDebugPeer(string peerId);
CodexDebugPeerResponse GetDebugPeer(string peerId, TimeSpan timeout); CodexDebugPeerResponse GetDebugPeer(string peerId, TimeSpan timeout);
ContentId UploadFile(TestFile file); ContentId UploadFile(TestFile file);
TestFile? DownloadContent(ContentId contentId); TestFile? DownloadContent(ContentId contentId, string fileLabel = "");
void ConnectToPeer(IOnlineCodexNode node); void ConnectToPeer(IOnlineCodexNode node);
ICodexNodeLog DownloadLog(); ICodexNodeLog DownloadLog();
IMetricsAccess Metrics { get; } IMetricsAccess Metrics { get; }
@ -66,23 +66,24 @@ namespace DistTestCore
public ContentId UploadFile(TestFile file) public ContentId UploadFile(TestFile file)
{ {
Log($"Uploading file of size {file.GetFileSize()}..."); Log($"Uploading file '{file.Describe()}' of size {file.GetFileSize()}...");
using var fileStream = File.OpenRead(file.Filename); using var fileStream = File.OpenRead(file.Filename);
var response = CodexAccess.UploadFile(fileStream); var response = CodexAccess.UploadFile(fileStream);
if (response.StartsWith(UploadFailedMessage)) if (response.StartsWith(UploadFailedMessage))
{ {
Assert.Fail("Node failed to store block."); Assert.Fail("Node failed to store block.");
} }
lifecycle.Log.AddStringReplace(response, $"(CID:{file.Describe()})");
Log($"Uploaded file. Received contentId: '{response}'."); Log($"Uploaded file. Received contentId: '{response}'.");
return new ContentId(response); return new ContentId(response);
} }
public TestFile? DownloadContent(ContentId contentId) public TestFile? DownloadContent(ContentId contentId, string fileLabel = "")
{ {
Log($"Downloading for contentId: '{contentId.Id}'..."); Log($"Downloading for contentId: '{contentId.Id}'...");
var file = lifecycle.FileManager.CreateEmptyTestFile(); var file = lifecycle.FileManager.CreateEmptyTestFile(fileLabel);
DownloadToFile(contentId.Id, file); DownloadToFile(contentId.Id, file);
Log($"Downloaded file of size {file.GetFileSize()} to '{file.Filename}'."); Log($"Downloaded file '{file.Describe()}' of size {file.GetFileSize()} to '{file.Filename}'.");
return file; return file;
} }

View File

@ -0,0 +1,19 @@
using DistTestCore;
using NUnit.Framework;
namespace Tests.DownloadConnectivityTests
{
[TestFixture]
public class FullyConnectedDownloadTests : AutoBootstrapDistTest
{
[TestCase(3)]
[TestCase(10)]
[TestCase(20)]
public void FullyConnectedDownloadTest(int numberOfNodes)
{
for (var i = 0; i < numberOfNodes; i++) SetupCodexNode();
PeerDownloadTestHelpers.AssertFullDownloadInterconnectivity(GetAllOnlineCodexNodes());
}
}
}

View File

@ -56,7 +56,6 @@ namespace Tests.PeerDiscoveryTests
private void AssertAllNodesConnected() private void AssertAllNodesConnected()
{ {
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes()); PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
//PeerDownloadTestHelpers.AssertFullDownloadInterconnectivity(GetAllOnlineCodexNodes());
} }
} }
} }

View File

@ -67,7 +67,6 @@ namespace Tests.PeerDiscoveryTests
private void AssertAllNodesConnected() private void AssertAllNodesConnected()
{ {
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes()); PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
//PeerDownloadTestHelpers.AssertFullDownloadInterconnectivity(GetAllOnlineCodexNodes());
} }
} }
} }