2025-05-30 08:59:43 +02:00

97 lines
3.5 KiB
C#

using System.Security.Cryptography;
using CodexReleaseTests.Utils;
using Nethereum.JsonRpc.Client;
using NUnit.Framework;
using Utils;
namespace CodexReleaseTests.DataTests
{
public class DecodeTest : MarketplaceAutoBootstrapDistTest
{
protected override int NumberOfHosts => 0;
protected override int NumberOfClients => 2;
protected override ByteSize HostAvailabilitySize => 0.Bytes();
protected override TimeSpan HostAvailabilityMaxDuration => TimeSpan.FromSeconds(0.0);
[Test]
public void DecodeDataset()
{
var clients = StartClients();
var file = GenerateTestFile(10.MB());
var bCid = clients[0].UploadFile(file);
var request = clients[0].Marketplace.RequestStorage(new CodexClient.StoragePurchaseRequest(bCid)
{
Expiry = TimeSpan.FromMinutes(5.0),
Duration = TimeSpan.FromMinutes(100.0),
CollateralPerByte = 100.Tst(),
MinRequiredNumberOfNodes = 6,
NodeFailureTolerance = 3,
PricePerBytePerSecond = 100.Tst(),
ProofProbability = 20
});
var eCid = request.ContentId;
Assert.That(bCid.Id, Is.Not.EqualTo(eCid.Id));
var basic = clients[0].DownloadManifestOnly(bCid);
var encoded = clients[0].DownloadManifestOnly(eCid);
Assert.That(basic.Manifest.Protected, Is.False);
Assert.That(encoded.Manifest.Protected, Is.True);
var decoded = clients[1].DownloadContent(eCid);
file.AssertIsEqual(decoded);
}
[Test]
[Ignore("Crashes node attempting encoding. Issue: https://github.com/codex-storage/nim-codex/issues/1185")]
public void PartiallyDeletedDatasets()
{
var clients = StartClients(s => s
.WithBlockMaintenanceNumber(1)
.WithBlockMaintenanceInterval(TimeSpan.FromSeconds(10.0))
.WithBlockTTL(TimeSpan.FromSeconds(30.0)));
var file = GenerateTestFile(2.MB());
var bCid = clients[0].UploadFile(file);
var space = clients[0].Space();
var update = space;
while (space.QuotaUsedBytes == update.QuotaUsedBytes)
{
Thread.Sleep(TimeSpan.FromSeconds(3.0));
update = clients[0].Space();
}
Assert.That(update.QuotaUsedBytes, Is.LessThan(space.QuotaUsedBytes));
// The dataset is partially deleted.
// What happens when we request storage for it?
var request = clients[0].Marketplace.RequestStorage(new CodexClient.StoragePurchaseRequest(bCid)
{
Expiry = TimeSpan.FromMinutes(5.0),
Duration = TimeSpan.FromMinutes(100.0),
CollateralPerByte = 100.Tst(),
MinRequiredNumberOfNodes = 6,
NodeFailureTolerance = 3,
PricePerBytePerSecond = 100.Tst(),
ProofProbability = 20
});
var eCid = request.ContentId;
Assert.That(bCid.Id, Is.Not.EqualTo(eCid.Id));
var basic = clients[0].DownloadManifestOnly(bCid);
var encoded = clients[0].DownloadManifestOnly(eCid);
Assert.That(basic.Manifest.Protected, Is.False);
Assert.That(encoded.Manifest.Protected, Is.True);
var decoded = clients[1].DownloadContent(eCid);
file.AssertIsEqual(decoded);
}
}
}