Eric 13d453d5ed
chore: Docker updates to support release tests in logos-storage-nim, and remove Codex references (#124)
* 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>
2026-04-17 15:03:22 +10:00

77 lines
2.4 KiB
C#

using StoragePlugin;
using LogosStorageTests;
using DistTestCore;
using NUnit.Framework;
using NUnit.Framework.Interfaces;
using Utils;
namespace LogosStorageLongTests.BasicTests
{
[TestFixture]
public class LargeFileTests : LogosStorageDistTest
{
#region Abort test run after first failure
private bool stop;
[SetUp]
public void SetUp()
{
if (stop)
{
Assert.Inconclusive("Previous test failed");
}
}
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed)
{
stop = true;
}
}
#endregion
[TestCase( 1 * 1)] // 1 MB
[TestCase( 1 * 10)]
[TestCase( 1 * 100)]
[TestCase( 1 * 1024)] // 1 GB
[TestCase( 1024 * 10)]
[TestCase( 1024 * 100)]
[TestCase( 1024 * 1024)] // 1 TB :O
[UseLongTimeouts]
public void DownloadCorrectnessTest(long size)
{
var sizeMB = size.MB();
var expectedFile = GenerateTestFile(sizeMB);
var node = StartLogosStorage(s => s.WithStorageQuota((size + 10).MB()));
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, long size)
{
float sizeInMB = size;
var uploadTimePerMB = (uploadStart - downloadStart) / sizeInMB;
var downloadTimePerMB = (downloadStart - downloadFinished) / sizeInMB;
Assert.That(uploadTimePerMB, Is.LessThan(LogosStorageContainerRecipe.MaxUploadTimePerMegabyte),
"MaxUploadTimePerMegabyte performance threshold breached.");
Assert.That(downloadTimePerMB, Is.LessThan(LogosStorageContainerRecipe.MaxDownloadTimePerMegabyte),
"MaxDownloadTimePerMegabyte performance threshold breached.");
}
}
}