Splits up download tests from connectivity tests and improves testfile logging
This commit is contained in:
parent
bc4035e723
commit
10a0ac3311
|
@ -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 = "thatbenbierens/nim-codex:dhting";
|
||||||
//public const string DockerImage = "codexstorage/nim-codex:sha-7b88ea0";
|
//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";
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -56,7 +56,6 @@ namespace Tests.PeerDiscoveryTests
|
||||||
private void AssertAllNodesConnected()
|
private void AssertAllNodesConnected()
|
||||||
{
|
{
|
||||||
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
|
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
|
||||||
//PeerDownloadTestHelpers.AssertFullDownloadInterconnectivity(GetAllOnlineCodexNodes());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,6 @@ namespace Tests.PeerDiscoveryTests
|
||||||
private void AssertAllNodesConnected()
|
private void AssertAllNodesConnected()
|
||||||
{
|
{
|
||||||
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
|
PeerConnectionTestHelpers.AssertFullyConnected(GetAllOnlineCodexNodes());
|
||||||
//PeerDownloadTestHelpers.AssertFullDownloadInterconnectivity(GetAllOnlineCodexNodes());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue