From a0cc09d9efd879f75c7bc80fe48bc33ed67e9421 Mon Sep 17 00:00:00 2001 From: ThatBen Date: Fri, 6 Jun 2025 10:47:54 +0200 Subject: [PATCH] Adds test where each host must fill two slots. --- .../MarketTests/FinishTest.cs | 2 +- .../MarketTests/MaxCapacityTest.cs | 72 +++++++++++++++++++ .../MarketTests/SequentialContracts.cs | 2 +- 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 Tests/CodexReleaseTests/MarketTests/MaxCapacityTest.cs diff --git a/Tests/CodexReleaseTests/MarketTests/FinishTest.cs b/Tests/CodexReleaseTests/MarketTests/FinishTest.cs index 8ab3ea4b..6e591929 100644 --- a/Tests/CodexReleaseTests/MarketTests/FinishTest.cs +++ b/Tests/CodexReleaseTests/MarketTests/FinishTest.cs @@ -22,7 +22,7 @@ namespace CodexReleaseTests.MarketTests protected override int NumberOfHosts => hosts; protected override int NumberOfClients => 1; protected override ByteSize HostAvailabilitySize => purchaseParams.SlotSize.Multiply(5.1); - protected override TimeSpan HostAvailabilityMaxDuration => Get8TimesConfiguredPeriodDuration() * 12; + protected override TimeSpan HostAvailabilityMaxDuration => GetContractDuration() * 2; [Test] [Combinatorial] diff --git a/Tests/CodexReleaseTests/MarketTests/MaxCapacityTest.cs b/Tests/CodexReleaseTests/MarketTests/MaxCapacityTest.cs new file mode 100644 index 00000000..cd7306d6 --- /dev/null +++ b/Tests/CodexReleaseTests/MarketTests/MaxCapacityTest.cs @@ -0,0 +1,72 @@ +using CodexClient; +using CodexReleaseTests.Utils; +using NUnit.Framework; +using Utils; + +namespace CodexReleaseTests.MarketTests +{ + public class MaxCapacityTest : MarketplaceAutoBootstrapDistTest + { + private readonly TestToken pricePerBytePerSecond = 10.TstWei(); + private readonly PurchaseParams purchaseParams = new PurchaseParams( + nodes: 10, + tolerance: 5, + uploadFilesize: 10.MB() + ); + + protected override int NumberOfHosts => purchaseParams.Nodes / 2; + protected override int NumberOfClients => 1; + protected override ByteSize HostAvailabilitySize => purchaseParams.SlotSize.Multiply(2.1); + protected override TimeSpan HostAvailabilityMaxDuration => GetContractDuration() * 2; + + [Test] + [Combinatorial] + public void TwoSlotsEach( + [Rerun] int rerun + ) + { + var hosts = StartHosts(); + var client = StartClients().Single(); + AssertHostAvailabilitiesAreEmpty(hosts); + + var request = CreateStorageRequest(client); + + request.WaitForStorageContractSubmitted(); + AssertContractIsOnChain(request); + + WaitForContractStarted(request); + AssertContractSlotsAreFilledByHosts(request, hosts); + } + + private IStoragePurchaseContract CreateStorageRequest(ICodexNode client) + { + var cid = client.UploadFile(GenerateTestFile(purchaseParams.UploadFilesize)); + var config = GetContracts().Deployment.Config; + return client.Marketplace.RequestStorage(new StoragePurchaseRequest(cid) + { + Duration = GetContractDuration(), + Expiry = GetContractExpiry(), + MinRequiredNumberOfNodes = (uint)purchaseParams.Nodes, + NodeFailureTolerance = (uint)purchaseParams.Tolerance, + PricePerBytePerSecond = pricePerBytePerSecond, + ProofProbability = 20, + CollateralPerByte = 100.TstWei() + }); + } + + private TimeSpan GetContractExpiry() + { + return GetContractDuration() / 2; + } + + private TimeSpan GetContractDuration() + { + return Get8TimesConfiguredPeriodDuration(); + } + + private TimeSpan Get8TimesConfiguredPeriodDuration() + { + return GetPeriodDuration() * 8.0; + } + } +} diff --git a/Tests/CodexReleaseTests/MarketTests/SequentialContracts.cs b/Tests/CodexReleaseTests/MarketTests/SequentialContracts.cs index 383093cf..199ff470 100644 --- a/Tests/CodexReleaseTests/MarketTests/SequentialContracts.cs +++ b/Tests/CodexReleaseTests/MarketTests/SequentialContracts.cs @@ -21,7 +21,7 @@ namespace CodexReleaseTests.MarketTests protected override int NumberOfHosts => hosts; protected override int NumberOfClients => 6; protected override ByteSize HostAvailabilitySize => purchaseParams.SlotSize.Multiply(100.0); - protected override TimeSpan HostAvailabilityMaxDuration => Get8TimesConfiguredPeriodDuration() * 12; + protected override TimeSpan HostAvailabilityMaxDuration => GetContractDuration() * 2; private readonly TestToken pricePerBytePerSecond = 10.TstWei(); [Test]