cs-codex-dist-tests/CodexDistTestCore/OfflineCodexNodes.cs

107 lines
3.0 KiB
C#
Raw Normal View History

using CodexDistTestCore.Marketplace;
namespace CodexDistTestCore
{
2023-03-21 14:17:48 +00:00
public interface IOfflineCodexNodes
{
2023-03-24 13:16:59 +00:00
IOfflineCodexNodes At(Location location);
2023-03-21 14:17:48 +00:00
IOfflineCodexNodes WithLogLevel(CodexLogLevel level);
IOfflineCodexNodes WithBootstrapNode(IOnlineCodexNode node);
IOfflineCodexNodes WithStorageQuota(ByteSize storageQuota);
IOfflineCodexNodes EnableMetrics();
IOfflineCodexNodes EnableMarketplace(int initialBalance);
2023-03-22 08:22:18 +00:00
ICodexNodeGroup BringOnline();
}
public enum CodexLogLevel
{
Trace,
Debug,
Info,
Warn,
Error
}
2023-03-24 13:16:59 +00:00
public enum Location
{
Unspecified,
BensLaptop,
BensOldGamingMachine,
}
2023-03-21 14:17:48 +00:00
public class OfflineCodexNodes : IOfflineCodexNodes
{
private readonly IK8sManager k8SManager;
2023-03-21 14:17:48 +00:00
public int NumberOfNodes { get; }
2023-03-24 13:16:59 +00:00
public Location Location { get; private set; }
public CodexLogLevel? LogLevel { get; private set; }
public IOnlineCodexNode? BootstrapNode { get; private set; }
public ByteSize? StorageQuota { get; private set; }
public bool MetricsEnabled { get; private set; }
public MarketplaceInitialConfig? MarketplaceConfig { get; private set; }
2023-03-21 14:17:48 +00:00
public OfflineCodexNodes(IK8sManager k8SManager, int numberOfNodes)
{
this.k8SManager = k8SManager;
2023-03-21 14:17:48 +00:00
NumberOfNodes = numberOfNodes;
2023-03-24 13:16:59 +00:00
Location = Location.Unspecified;
MetricsEnabled = false;
}
2023-03-22 08:22:18 +00:00
public ICodexNodeGroup BringOnline()
{
return k8SManager.BringOnline(this);
}
2023-03-24 13:16:59 +00:00
public IOfflineCodexNodes At(Location location)
{
Location = location;
return this;
}
2023-03-21 14:17:48 +00:00
public IOfflineCodexNodes WithBootstrapNode(IOnlineCodexNode node)
{
BootstrapNode = node;
return this;
}
2023-03-21 14:17:48 +00:00
public IOfflineCodexNodes WithLogLevel(CodexLogLevel level)
{
LogLevel = level;
return this;
}
2023-03-21 14:17:48 +00:00
public IOfflineCodexNodes WithStorageQuota(ByteSize storageQuota)
{
StorageQuota = storageQuota;
return this;
}
2023-03-20 10:37:02 +00:00
public IOfflineCodexNodes EnableMetrics()
{
MetricsEnabled = true;
return this;
}
public IOfflineCodexNodes EnableMarketplace(int initialBalance)
{
MarketplaceConfig = new MarketplaceInitialConfig(initialBalance);
return this;
}
2023-03-20 10:37:02 +00:00
public string Describe()
{
2023-03-22 08:22:18 +00:00
var args = string.Join(',', DescribeArgs());
return $"{NumberOfNodes} CodexNodes with [{args}]";
}
private IEnumerable<string> DescribeArgs()
{
if (LogLevel != null) yield return ($"LogLevel={LogLevel}");
if (BootstrapNode != null) yield return ("BootstrapNode=set-not-shown-here");
2023-03-22 08:22:18 +00:00
if (StorageQuota != null) yield return ($"StorageQuote={StorageQuota.SizeInBytes}");
2023-03-20 10:37:02 +00:00
}
}
}