From c204ab09d1b6402a4c58150d7ca5b0d8a6de126b Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 14 Mar 2024 14:30:00 +0100 Subject: [PATCH] combinatorial tests for finding issue --- Tests/CodexTests/BasicTests/TwoClientTests.cs | 188 ++++++++++++++++-- 1 file changed, 171 insertions(+), 17 deletions(-) diff --git a/Tests/CodexTests/BasicTests/TwoClientTests.cs b/Tests/CodexTests/BasicTests/TwoClientTests.cs index 458f1e1e..9f6cb9ed 100644 --- a/Tests/CodexTests/BasicTests/TwoClientTests.cs +++ b/Tests/CodexTests/BasicTests/TwoClientTests.cs @@ -1,4 +1,6 @@ -using CodexPlugin; +using CodexContractsPlugin; +using CodexPlugin; +using GethPlugin; using NUnit.Framework; using Utils; @@ -7,15 +9,169 @@ namespace CodexTests.BasicTests [TestFixture] public class TwoClientTests : CodexDistTest { + [Test] + [Combinatorial] + public void TwoClient( + [Values(0, 1, 2, 3)] int upmode, + [Values(0, 1, 2, 3)] int downmode) + { + var geth = Ci.StartGethNode(g => g.IsMiner()); + var contracts = Ci.StartCodexContracts(geth); + + var uploader = AddCodex(s => + { + s.WithName("Uploader"); + s.WithStorageQuota(10.GB()); + + if (upmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (upmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + var downloader = AddCodex(s => + { + s.WithName("Downloader"); + s.WithStorageQuota(10.GB()); + s.WithBootstrapNode(uploader); + + if (downmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (downmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + if (upmode == 3) + { + uploader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + if (downmode == 3) + { + downloader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + + PerformTwoClientTest(uploader, downloader); + } + + + [Test] + [Combinatorial] + public void ConnectivityOverGit( + [Values(0)] int upmode, + [Values(0, 1)] int downmode, + [Values(0, 1, 2, 3, 4, 5, 6)] int gitIndex) + { + var gits = new[] + { + "" + }; + + CodexContainerRecipe.DockerImageOverride = gits[gitIndex]; + + var geth = Ci.StartGethNode(g => g.IsMiner()); + var contracts = Ci.StartCodexContracts(geth); + + var uploader = AddCodex(s => + { + s.WithName("Uploader"); + s.WithStorageQuota(10.GB()); + + if (upmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (upmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + var downloader = AddCodex(s => + { + s.WithName("Downloader"); + s.WithStorageQuota(10.GB()); + s.WithBootstrapNode(uploader); + + if (downmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (downmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + if (upmode == 3) + { + uploader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + if (downmode == 3) + { + downloader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + + CreatePeerConnectionTestHelpers().AssertFullyConnected(new[] { uploader, downloader }); + } + + + + [Test] + [Combinatorial] + public void Connectivity( + [Values(0, 1, 2, 3)] int upmode, + [Values(0, 1, 2, 3)] int downmode) + { + var geth = Ci.StartGethNode(g => g.IsMiner()); + var contracts = Ci.StartCodexContracts(geth); + + var uploader = AddCodex(s => + { + s.WithName("Uploader"); + s.WithStorageQuota(10.GB()); + + if (upmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (upmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + var downloader = AddCodex(s => + { + s.WithName("Downloader"); + s.WithStorageQuota(10.GB()); + s.WithBootstrapNode(uploader); + + if (downmode == 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens()); + if (downmode > 1) s.EnableMarketplace(geth, contracts, 10.Eth(), 10.TestTokens(), s => s.AsStorageNode()); + }); + + if (upmode == 3) + { + uploader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + if (downmode == 3) + { + downloader.Marketplace.MakeStorageAvailable( + size: 2.GB(), + minPriceForTotalSpace: 1.TestTokens(), + maxCollateral: 20.TestTokens(), + maxDuration: TimeSpan.FromMinutes(3)); + } + + CreatePeerConnectionTestHelpers().AssertFullyConnected(new[] { uploader, downloader }); + } + + [Test] public void TwoClientTest() { - var group = Ci.StartCodexNodes(2); + var uploader = AddCodex(s => s.WithName("Uploader")); + var downloader = AddCodex(s => s.WithName("Downloader").WithBootstrapNode(uploader)); - var primary = group[0]; - var secondary = group[1]; - - PerformTwoClientTest(primary, secondary); + PerformTwoClientTest(uploader, downloader); } [Test] @@ -28,29 +184,27 @@ namespace CodexTests.BasicTests return; } - var primary = Ci.StartCodexNode(s => s.At(locations.Get(0))); - var secondary = Ci.StartCodexNode(s => s.At(locations.Get(1))); + var uploader = Ci.StartCodexNode(s => s.At(locations.Get(0))); + var downloader = Ci.StartCodexNode(s => s.WithBootstrapNode(uploader).At(locations.Get(1))); - PerformTwoClientTest(primary, secondary); + PerformTwoClientTest(uploader, downloader); } - private void PerformTwoClientTest(ICodexNode primary, ICodexNode secondary) + private void PerformTwoClientTest(ICodexNode uploader, ICodexNode downloader) { - PerformTwoClientTest(primary, secondary, 1.MB()); + PerformTwoClientTest(uploader, downloader, 10.MB()); } - private void PerformTwoClientTest(ICodexNode primary, ICodexNode secondary, ByteSize size) + private void PerformTwoClientTest(ICodexNode uploader, ICodexNode downloader, ByteSize size) { - primary.ConnectToPeer(secondary); - var testFile = GenerateTestFile(size); - var contentId = primary.UploadFile(testFile); + var contentId = uploader.UploadFile(testFile); - var downloadedFile = secondary.DownloadContent(contentId); + var downloadedFile = downloader.DownloadContent(contentId); testFile.AssertIsEqual(downloadedFile); - CheckLogForErrors(primary, secondary); + CheckLogForErrors(uploader, downloader); } } }