2
0
mirror of synced 2025-02-11 07:56:58 +00:00
cs-codex-dist-tests/Tests/CodexReleaseTests/MarketTests/MarketplaceAutoBootstrapDistTest.cs

149 lines
4.9 KiB
C#
Raw Normal View History

2024-11-21 15:30:56 +01:00
using CodexContractsPlugin;
2024-11-22 08:57:50 +01:00
using CodexContractsPlugin.Marketplace;
2024-11-21 15:30:56 +01:00
using CodexPlugin;
using CodexTests;
using DistTestCore;
using GethPlugin;
2024-11-22 08:57:50 +01:00
using Nethereum.Hex.HexConvertors.Extensions;
2024-11-25 15:45:09 +01:00
using NUnit.Framework;
2024-11-22 16:09:18 +01:00
using Utils;
2024-11-21 15:30:56 +01:00
namespace CodexReleaseTests.MarketTests
{
public abstract class MarketplaceAutoBootstrapDistTest : AutoBootstrapDistTest
{
private readonly Dictionary<TestLifecycle, MarketplaceHandle> handles = new Dictionary<TestLifecycle, MarketplaceHandle>();
protected const int StartingBalanceTST = 1000;
2024-11-25 15:45:09 +01:00
protected const int StartingBalanceEth = 10;
2024-11-21 15:30:56 +01:00
protected override void LifecycleStart(TestLifecycle lifecycle)
{
base.LifecycleStart(lifecycle);
var geth = Ci.StartGethNode(s => s.IsMiner());
var contracts = Ci.StartCodexContracts(geth);
handles.Add(lifecycle, new MarketplaceHandle(geth, contracts));
}
protected override void LifecycleStop(TestLifecycle lifecycle, DistTestResult result)
{
base.LifecycleStop(lifecycle, result);
handles.Remove(lifecycle);
}
protected IGethNode GetGeth()
{
return handles[Get()].Geth;
}
protected ICodexContracts GetContracts()
{
return handles[Get()].Contracts;
}
2024-11-22 16:09:18 +01:00
protected abstract int NumberOfHosts { get; }
protected abstract int NumberOfClients { get; }
protected abstract ByteSize HostAvailabilitySize { get; }
protected abstract TimeSpan HostAvailabilityMaxDuration { get; }
public ICodexNodeGroup StartHosts()
{
var hosts = StartCodex(NumberOfHosts, s => s
.WithName("host")
.EnableMarketplace(GetGeth(), GetContracts(), m => m
2024-11-25 15:45:09 +01:00
.WithInitial(StartingBalanceEth.Eth(), StartingBalanceTST.Tst())
2024-11-22 16:09:18 +01:00
.AsStorageNode()
)
);
var config = GetContracts().Deployment.Config;
foreach (var host in hosts)
{
2024-11-25 15:45:09 +01:00
Assert.That(GetTstBalance(host).TstWei, Is.EqualTo(StartingBalanceTST.Tst().TstWei));
Assert.That(GetEthBalance(host).Wei, Is.EqualTo(StartingBalanceEth.Eth().Wei));
2024-11-22 16:09:18 +01:00
host.Marketplace.MakeStorageAvailable(new CodexPlugin.StorageAvailability(
totalSpace: HostAvailabilitySize,
maxDuration: HostAvailabilityMaxDuration,
minPriceForTotalSpace: 1.TstWei(),
maxCollateral: 999999.Tst())
);
}
return hosts;
}
2024-11-25 15:45:09 +01:00
public TestToken GetTstBalance(ICodexNode node)
{
return GetContracts().GetTestTokenBalance(node);
}
public TestToken GetTstBalance(EthAddress address)
{
return GetContracts().GetTestTokenBalance(address);
}
public Ether GetEthBalance(ICodexNode node)
{
return GetGeth().GetEthBalance(node);
}
public Ether GetEthBalance(EthAddress address)
{
return GetGeth().GetEthBalance(address);
}
2024-11-22 16:09:18 +01:00
public ICodexNodeGroup StartClients()
{
return StartCodex(NumberOfClients, s => s
.WithName("client")
.EnableMarketplace(GetGeth(), GetContracts(), m => m
2024-11-25 15:45:09 +01:00
.WithInitial(StartingBalanceEth.Eth(), StartingBalanceTST.Tst())
2024-11-22 16:09:18 +01:00
)
);
}
2024-11-22 08:57:50 +01:00
public SlotFill[] GetOnChainSlotFills(ICodexNodeGroup possibleHosts, string purchaseId)
{
2024-11-22 16:09:18 +01:00
var fills = GetOnChainSlotFills(possibleHosts);
return fills.Where(f => f
.SlotFilledEvent.RequestId.ToHex(false).ToLowerInvariant() == purchaseId.ToLowerInvariant())
2024-11-22 08:57:50 +01:00
.ToArray();
}
public SlotFill[] GetOnChainSlotFills(ICodexNodeGroup possibleHosts)
{
var events = GetContracts().GetEvents(GetTestRunTimeRange());
var fills = events.GetSlotFilledEvents();
return fills.Select(f =>
{
2024-11-22 16:09:18 +01:00
var host = possibleHosts.Single(h => h.EthAddress.Address == f.Host.Address);
2024-11-22 08:57:50 +01:00
return new SlotFill(f, host);
}).ToArray();
}
public class SlotFill
{
public SlotFill(SlotFilledEventDTO slotFilledEvent, ICodexNode host)
{
SlotFilledEvent = slotFilledEvent;
Host = host;
}
public SlotFilledEventDTO SlotFilledEvent { get; }
public ICodexNode Host { get; }
}
2024-11-21 15:30:56 +01:00
private class MarketplaceHandle
{
public MarketplaceHandle(IGethNode geth, ICodexContracts contracts)
{
Geth = geth;
Contracts = contracts;
}
public IGethNode Geth { get; }
public ICodexContracts Contracts { get; }
}
}
}