2023-04-14 07:54:07 +00:00
using KubernetesWorkflow ;
namespace DistTestCore.Marketplace
{
public class GethCompanionNodeStarter
{
private readonly TestLifecycle lifecycle ;
private readonly WorkflowCreator workflowCreator ;
public GethCompanionNodeStarter ( TestLifecycle lifecycle , WorkflowCreator workflowCreator )
{
this . lifecycle = lifecycle ;
this . workflowCreator = workflowCreator ;
}
public GethCompanionNodeInfo [ ] StartCompanionNodesFor ( CodexSetup codexSetup , GethBootstrapNodeInfo bootstrapNode )
{
Log ( $"Initializing companions for {codexSetup.NumberOfNodes} Codex nodes." ) ;
var startupConfig = CreateCompanionNodeStartupConfig ( bootstrapNode ) ;
var workflow = workflowCreator . CreateWorkflow ( ) ;
var containers = workflow . Start ( codexSetup . NumberOfNodes , Location . Unspecified , new GethContainerRecipe ( ) , startupConfig ) ;
if ( containers . Containers . Length ! = codexSetup . NumberOfNodes ) throw new InvalidOperationException ( "Expected a Geth companion node to be created for each Codex node. Test infra failure." ) ;
Log ( "Initialized companion nodes." ) ;
return containers . Containers . Select ( c = > CreateCompanionInfo ( workflow , c ) ) . ToArray ( ) ;
}
private GethCompanionNodeInfo CreateCompanionInfo ( StartupWorkflow workflow , RunningContainer container )
{
var extractor = new GethInfoExtractor ( workflow , container ) ;
var account = extractor . ExtractAccount ( ) ;
return new GethCompanionNodeInfo ( container , account ) ;
}
private StartupConfig CreateCompanionNodeStartupConfig ( GethBootstrapNodeInfo bootstrapNode )
{
var config = new StartupConfig ( ) ;
2023-04-17 08:31:14 +00:00
config . Add ( new GethStartupConfig ( false , bootstrapNode . GenesisJsonBase64 , bootstrapNode ) ) ;
2023-04-14 07:54:07 +00:00
return config ;
}
private void Log ( string msg )
{
lifecycle . Log . Log ( msg ) ;
}
}
}