cs-codex-dist-tests/ProjectPlugins/CodexPlugin/CodexSetup.cs

129 lines
4.1 KiB
C#
Raw Normal View History

2023-09-19 08:24:43 +00:00
using CodexContractsPlugin;
using GethPlugin;
using KubernetesWorkflow;
2023-09-08 08:21:40 +00:00
using Utils;
2023-04-12 14:06:04 +00:00
namespace CodexPlugin
2023-04-12 14:06:04 +00:00
{
2023-04-13 07:33:10 +00:00
public interface ICodexSetup
2023-04-12 14:06:04 +00:00
{
ICodexSetup WithName(string name);
2023-04-13 07:33:10 +00:00
ICodexSetup At(Location location);
2023-09-19 09:51:59 +00:00
ICodexSetup WithBootstrapNode(ICodexNode node);
ICodexSetup WithLogLevel(CodexLogLevel level);
/// <summary>
/// Sets the log level for codex. The default level is INFO and the
/// log level is applied only to the supplied topics.
/// </summary>
ICodexSetup WithLogLevel(CodexLogLevel level, params string[] topics);
2023-04-13 07:33:10 +00:00
ICodexSetup WithStorageQuota(ByteSize storageQuota);
ICodexSetup WithBlockTTL(TimeSpan duration);
ICodexSetup WithBlockMaintenanceInterval(TimeSpan duration);
ICodexSetup WithBlockMaintenanceNumber(int numberOfBlocks);
2023-09-13 09:59:21 +00:00
ICodexSetup EnableMetrics();
2023-09-20 06:45:55 +00:00
ICodexSetup EnableMarketplace(IGethNode gethNode, ICodexContracts codexContracts, Ether initialEth, TestToken initialTokens, bool isValidator = false);
2023-09-14 05:17:30 +00:00
/// <summary>
/// Provides an invalid proof every N proofs
/// </summary>
ICodexSetup WithSimulateProofFailures(uint failEveryNProofs);
2023-04-12 14:06:04 +00:00
}
2023-04-13 07:33:10 +00:00
public class CodexSetup : CodexStartupConfig, ICodexSetup
2023-04-12 14:06:04 +00:00
{
public int NumberOfNodes { get; }
public CodexSetup(int numberOfNodes)
2023-04-12 14:06:04 +00:00
{
NumberOfNodes = numberOfNodes;
}
public ICodexSetup WithName(string name)
{
NameOverride = name;
return this;
}
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-09-19 09:51:59 +00:00
public ICodexSetup WithBootstrapNode(ICodexNode node)
2023-04-19 12:57:00 +00:00
{
BootstrapSpr = node.GetDebugInfo().spr;
2023-04-19 12:57:00 +00:00
return this;
}
2023-04-12 14:06:04 +00:00
public ICodexSetup WithLogLevel(CodexLogLevel level)
{
LogLevel = level;
return this;
}
public ICodexSetup WithLogLevel(CodexLogLevel level, params string[] topics)
{
LogLevel = level;
LogTopics = topics;
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;
}
public ICodexSetup WithBlockTTL(TimeSpan duration)
{
BlockTTL = Convert.ToInt32(duration.TotalSeconds);
return this;
}
public ICodexSetup WithBlockMaintenanceInterval(TimeSpan duration)
{
BlockMaintenanceInterval = duration;
return this;
}
public ICodexSetup WithBlockMaintenanceNumber(int numberOfBlocks)
{
BlockMaintenanceNumber = numberOfBlocks;
return this;
}
2023-09-13 09:59:21 +00:00
public ICodexSetup EnableMetrics()
{
MetricsEnabled = true;
return this;
}
2023-04-12 14:06:04 +00:00
2023-09-20 06:45:55 +00:00
public ICodexSetup EnableMarketplace(IGethNode gethNode, ICodexContracts codexContracts, Ether initialEth, TestToken initialTokens, bool isValidator = false)
2023-09-19 08:24:43 +00:00
{
2023-09-20 06:45:55 +00:00
MarketplaceConfig = new MarketplaceInitialConfig(gethNode, codexContracts, initialEth, initialTokens, isValidator);
2023-09-19 08:24:43 +00:00
return this;
}
public ICodexSetup WithSimulateProofFailures(uint failEveryNProofs)
{
SimulateProofFailures = failEveryNProofs;
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()
{
yield return $"LogLevel={LogLevelWithTopics()}";
if (BootstrapSpr != null) yield return $"BootstrapNode={BootstrapSpr}";
if (StorageQuota != null) yield return $"StorageQuota={StorageQuota}";
if (SimulateProofFailures != null) yield return $"SimulateProofFailures={SimulateProofFailures}";
if (MarketplaceConfig != null) yield return $"IsValidator={MarketplaceConfig.IsValidator}";
2023-04-12 14:06:04 +00:00
}
}
}