package com.sequenceiq.cloudbreak.orchestrator.swarm; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap; import com.sequenceiq.cloudbreak.orchestrator.container.ContainerOrchestratorCluster; import com.sequenceiq.cloudbreak.orchestrator.executor.ParallelOrchestratorComponentRunner; import com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig; import com.sequenceiq.cloudbreak.orchestrator.model.LogVolumePath; import com.sequenceiq.cloudbreak.orchestrator.model.Node; import com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteria; import com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel; public class OrchestratorTestUtil { private static final int EXECUTOR_SIZE = 3; private OrchestratorTestUtil() { } public static GatewayConfig gatewayConfig() { return new GatewayConfig("11.0.0.0", "12.0.0.0", "11.0.0.0", 8443, "/tmp/certs", false); } public static ContainerOrchestratorCluster containerOrchestratorCluster(GatewayConfig gatewayConfig, Set<Node> nodes) { return new ContainerOrchestratorCluster(gatewayConfig, nodes); } public static Set<Node> generateNodes(int count) { Set<Node> nodes = new HashSet<>(); for (int i = 0; i < count; i++) { nodes.add(node((long) i)); } return nodes; } public static ExitCriteriaModel exitCriteriaModel() { class SimpleExitCriteriaModel extends ExitCriteriaModel { } return new SimpleExitCriteriaModel(); } public static LogVolumePath generateLogVolume() { return new LogVolumePath("/hadoopfs/logs", "/var/log"); } public static Callable<Boolean> createRunner(OrchestratorBootstrap orchestratorBootstrap, ExitCriteria exitCriteria, ExitCriteriaModel exitCriteriaModel, Map<String, String> mdcReplica) { class TestContainerBootstrapRunner implements Callable<Boolean> { private final OrchestratorBootstrap containerBootstrap; private final Map<String, String> mdcMap; private final ExitCriteria exitCriteria; private final ExitCriteriaModel exitCriteriaModel; private TestContainerBootstrapRunner(OrchestratorBootstrap containerBootstrap, ExitCriteria exitCriteria, ExitCriteriaModel exitCriteriaModel, Map<String, String> mdcReplica) { this.containerBootstrap = containerBootstrap; this.mdcMap = mdcReplica; this.exitCriteria = exitCriteria; this.exitCriteriaModel = exitCriteriaModel; } @Override public Boolean call() throws Exception { return containerBootstrap.call(); } } return new TestContainerBootstrapRunner(orchestratorBootstrap, exitCriteria, exitCriteriaModel, mdcReplica); } public static OrchestratorBootstrap containerBootstrap() { class TestOrchestratorBootstrap implements OrchestratorBootstrap { @Override public Boolean call() throws Exception { return containerBootstrap().call(); } } return new TestOrchestratorBootstrap(); } public static ParallelOrchestratorComponentRunner parallelContainerRunner() { class TestParallelOrchestratorComponentRunner implements ParallelOrchestratorComponentRunner { @Override public Future<Boolean> submit(Callable<Boolean> callable) { ExecutorService executorService = Executors.newFixedThreadPool(EXECUTOR_SIZE); return executorService.submit(callable); } } return new TestParallelOrchestratorComponentRunner(); } public static ExitCriteria exitCriteria() { class TestExitCriteria implements ExitCriteria { @Override public boolean isExitNeeded(ExitCriteriaModel exitCriteriaModel) { return false; } @Override public String exitMessage() { return "exit."; } } return new TestExitCriteria(); } public static Node node(Long id) { Set<String> strings = new HashSet<>(); strings.add("df" + id); return new Node("10.0.0." + id, "11.0.0." + id, id.toString(), strings); } }