cs-codex-dist-tests/DistTestCore/CodexSetup.cs

108 lines
3.3 KiB
C#
Raw Normal View History

2023-04-12 14:06:04 +00:00
using DistTestCore.Codex;
2023-04-14 08:51:35 +00:00
using DistTestCore.Marketplace;
2023-04-12 14:12:04 +00:00
using KubernetesWorkflow;
2023-04-12 14:06:04 +00:00
namespace DistTestCore
{
2023-04-13 07:33:10 +00:00
public interface ICodexSetup
2023-04-12 14:06:04 +00:00
{
2023-04-13 07:33:10 +00:00
ICodexSetup At(Location location);
ICodexSetup WithLogLevel(CodexLogLevel level);
2023-04-19 12:57:00 +00:00
ICodexSetup WithBootstrapNode(IOnlineCodexNode node);
2023-04-13 07:33:10 +00:00
ICodexSetup WithStorageQuota(ByteSize storageQuota);
ICodexSetup EnableMetrics();
ICodexSetup EnableMarketplace(TestToken initialBalance);
ICodexSetup EnableMarketplace(TestToken initialBalance, Ether initialEther);
2023-04-12 14:06:04 +00:00
ICodexNodeGroup BringOnline();
}
2023-04-12 14:12:04 +00:00
2023-04-13 07:33:10 +00:00
public class CodexSetup : CodexStartupConfig, ICodexSetup
2023-04-12 14:06:04 +00:00
{
private readonly CodexStarter starter;
public int NumberOfNodes { get; }
2023-04-13 07:33:10 +00:00
public CodexSetup(CodexStarter starter, int numberOfNodes)
2023-04-12 14:06:04 +00:00
{
this.starter = starter;
NumberOfNodes = numberOfNodes;
}
public ICodexNodeGroup BringOnline()
{
2023-04-19 12:57:00 +00:00
var group = starter.BringOnline(this);
ConnectToBootstrapNode(group);
return group;
}
private void ConnectToBootstrapNode(ICodexNodeGroup group)
{
if (BootstrapNode == null) return;
// TODO:
// node.ConnectToPeer uses the '/api/codex/vi/connect/' endpoint to make the connection.
// This should be replaced by injecting the bootstrap node's SPR into the env-vars of the new node containers. (Easy!)
// However, NAT isn't figure out yet. So connecting with SPR doesn't (always?) work.
// So for now, ConnectToPeer
foreach (var node in group)
{
node.ConnectToPeer(BootstrapNode);
}
2023-04-12 14:06:04 +00:00
}
2023-04-13 07:33:10 +00:00
public ICodexSetup At(Location location)
2023-04-12 14:06:04 +00:00
{
Location = location;
return this;
}
2023-04-19 12:57:00 +00:00
public ICodexSetup WithBootstrapNode(IOnlineCodexNode node)
{
BootstrapNode = node;
return this;
}
2023-04-12 14:06:04 +00:00
2023-04-13 07:33:10 +00:00
public ICodexSetup WithLogLevel(CodexLogLevel level)
2023-04-12 14:06:04 +00:00
{
LogLevel = level;
return this;
}
2023-04-13 07:33:10 +00:00
public ICodexSetup WithStorageQuota(ByteSize storageQuota)
2023-04-12 14:06:04 +00:00
{
StorageQuota = storageQuota;
return this;
}
2023-04-13 07:33:10 +00:00
public ICodexSetup EnableMetrics()
2023-04-12 14:06:04 +00:00
{
MetricsEnabled = true;
return this;
}
public ICodexSetup EnableMarketplace(TestToken initialBalance)
2023-04-14 08:51:35 +00:00
{
return EnableMarketplace(initialBalance, 1000.Eth());
}
public ICodexSetup EnableMarketplace(TestToken initialBalance, Ether initialEther)
{
MarketplaceConfig = new MarketplaceInitialConfig(initialEther, initialBalance);
2023-04-14 08:51:35 +00:00
return this;
}
2023-04-12 14:06:04 +00:00
public string Describe()
{
var args = string.Join(',', DescribeArgs());
2023-04-19 12:57:00 +00:00
return $"({NumberOfNodes} CodexNodes with args:[{args}])";
2023-04-12 14:06:04 +00:00
}
private IEnumerable<string> DescribeArgs()
{
if (LogLevel != null) yield return $"LogLevel={LogLevel}";
2023-04-19 12:57:00 +00:00
if (BootstrapNode != null) yield return $"BootstrapNode={BootstrapNode.GetName()}";
2023-04-19 07:57:37 +00:00
if (StorageQuota != null) yield return $"StorageQuote={StorageQuota}";
2023-04-12 14:06:04 +00:00
}
}
}