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

76 lines
2.7 KiB
C#
Raw Normal View History

2023-03-21 14:17:48 +00:00
namespace CodexDistTestCore
{
public class CodexNodeContainer
{
2023-03-22 09:38:10 +00:00
public CodexNodeContainer(string name, int servicePort, string servicePortName, int apiPort, string containerPortName, int discoveryPort, int listenPort, string dataDir)
2023-03-21 14:17:48 +00:00
{
Name = name;
ServicePort = servicePort;
2023-03-22 09:38:10 +00:00
ServicePortName = servicePortName;
2023-03-21 14:17:48 +00:00
ApiPort = apiPort;
ContainerPortName = containerPortName;
DiscoveryPort = discoveryPort;
ListenPort = listenPort;
DataDir = dataDir;
}
public string Name { get; }
public int ServicePort { get; }
2023-03-22 09:38:10 +00:00
public string ServicePortName { get; }
2023-03-21 14:17:48 +00:00
public int ApiPort { get; }
public string ContainerPortName { get; }
public int DiscoveryPort { get; }
public int ListenPort { get; }
public string DataDir { get; }
}
2023-03-22 13:49:01 +00:00
public class CodexGroupNumberSource
{
private readonly NumberSource codexNodeGroupNumberSource = new NumberSource(0);
private readonly NumberSource groupContainerNameSource = new NumberSource(1);
private readonly NumberSource servicePortSource = new NumberSource(30001);
public int GetNextCodexNodeGroupNumber()
{
return codexNodeGroupNumberSource.GetNextNumber();
}
public string GetNextServicePortName()
{
return $"node{groupContainerNameSource.GetNextNumber()}";
}
public int GetNextServicePort()
{
return servicePortSource.GetNextNumber();
}
}
2023-03-21 14:17:48 +00:00
public class CodexNodeContainerFactory
{
private readonly NumberSource containerNameSource = new NumberSource(1);
private readonly NumberSource codexPortSource = new NumberSource(8080);
2023-03-22 13:49:01 +00:00
private readonly CodexGroupNumberSource groupContainerFactory;
public CodexNodeContainerFactory(CodexGroupNumberSource groupContainerFactory)
{
this.groupContainerFactory = groupContainerFactory;
}
2023-03-21 14:17:48 +00:00
public CodexNodeContainer CreateNext()
{
var n = containerNameSource.GetNextNumber();
return new CodexNodeContainer(
name: $"codex-node{n}",
2023-03-22 13:49:01 +00:00
servicePort: groupContainerFactory.GetNextServicePort(),
servicePortName: groupContainerFactory.GetNextServicePortName(),
2023-03-21 14:17:48 +00:00
apiPort: codexPortSource.GetNextNumber(),
containerPortName: $"api-{n}",
discoveryPort: codexPortSource.GetNextNumber(),
listenPort: codexPortSource.GetNextNumber(),
dataDir: $"datadir{n}"
);
}
}
}