mirror of
https://github.com/logos-storage/logos-storage-nim-cs-dist-tests.git
synced 2026-05-10 03:19:39 +00:00
* ci(docker): build dist-tests images * Update to .net 10, kubernetes client 18.0.13 Kubernetes client 18.0.13 is compatible with Kubernetes 1.34.x. The Kubernetes version is selected automatically by kubeadm in docker desktop (v1.34.1). See https://github.com/kubernetes-client/csharp#version-compatibility for a compatibility table. * Updates to support Kubernetes upgrade * bump openapi.yaml to match openapi.yaml in the logos-storage-nim docker image * bump doc to .net 10 * bump docker to .net 10 * Build image with latest tag always Always build an image with a latest tag (as well as a sha commit hash) when there's a push to master * docker image tag as "latest" only when pushing to master * Update docker image to install doctl * Remove doctl install kubeconfig is now created and uses a plain bearer token instead of using doctl as a credential mgr * Rename and remove all instances of Codex * Further remove CodexNetDeployer as it is no longer needed --------- Co-authored-by: Adam Uhlíř <adam@uhlir.dev>
85 lines
2.4 KiB
C#
85 lines
2.4 KiB
C#
using LogosStorageClient;
|
|
using LogosStorageTests;
|
|
using NUnit.Framework;
|
|
using Utils;
|
|
|
|
namespace ExperimentalTests.BasicTests
|
|
{
|
|
[TestFixture]
|
|
public class PyramidTests : LogosStorageDistTest
|
|
{
|
|
[Test]
|
|
[CreateTranscript(nameof(PyramidTest))]
|
|
public void PyramidTest()
|
|
{
|
|
var size = 5.MB();
|
|
var numberOfLayers = 3;
|
|
|
|
var bottomLayer = StartLayers(numberOfLayers);
|
|
|
|
var cids = UploadFiles(bottomLayer, size);
|
|
|
|
DownloadAllFilesFromEachNodeInLayer(bottomLayer, cids);
|
|
}
|
|
|
|
private List<IStorageNode> StartLayers(int numberOfLayers)
|
|
{
|
|
var layer = new List<IStorageNode>();
|
|
layer.Add(StartLogosStorage(s => s.WithName("Top")));
|
|
|
|
for (var i = 0; i < numberOfLayers; i++)
|
|
{
|
|
var newLayer = new List<IStorageNode>();
|
|
foreach (var node in layer)
|
|
{
|
|
newLayer.AddRange(StartLogosStorage(2, s => s.WithBootstrapNode(node).WithName("Layer[" + i + "]")));
|
|
}
|
|
|
|
layer.Clear();
|
|
layer.AddRange(newLayer);
|
|
}
|
|
|
|
return layer;
|
|
}
|
|
|
|
private ContentId[] UploadFiles(List<IStorageNode> layer, ByteSize size)
|
|
{
|
|
var uploadTasks = new List<Task<ContentId>>();
|
|
foreach (var node in layer)
|
|
{
|
|
uploadTasks.Add(Task.Run(() =>
|
|
{
|
|
var file = GenerateTestFile(size);
|
|
return node.UploadFile(file);
|
|
}));
|
|
}
|
|
|
|
var cids = uploadTasks.Select(t =>
|
|
{
|
|
t.Wait();
|
|
return t.Result;
|
|
}).ToArray();
|
|
|
|
return cids;
|
|
}
|
|
|
|
private void DownloadAllFilesFromEachNodeInLayer(List<IStorageNode> layer, ContentId[] cids)
|
|
{
|
|
var downloadTasks = new List<Task>();
|
|
foreach (var node in layer)
|
|
{
|
|
downloadTasks.Add(Task.Run(() =>
|
|
{
|
|
var dlCids = RandomUtils.Shuffled(cids);
|
|
foreach (var cid in dlCids)
|
|
{
|
|
node.DownloadContent(cid);
|
|
}
|
|
}));
|
|
}
|
|
|
|
Task.WaitAll(downloadTasks.ToArray());
|
|
}
|
|
}
|
|
}
|