package org.deploymentobjects.core.application;
import static org.junit.Assert.assertEquals;
import org.deploymentobjects.core.domain.model.configuration.ConfigurationManagement;
import org.deploymentobjects.core.domain.model.configuration.NfsMount;
import org.deploymentobjects.core.domain.model.environment.EnvironmentRepository;
import org.deploymentobjects.core.domain.model.environment.Host;
import org.deploymentobjects.core.domain.model.environment.Hypervisor;
import org.deploymentobjects.core.domain.model.environment.Role;
import org.deploymentobjects.core.domain.model.environment.Host.Type;
import org.deploymentobjects.core.domain.model.execution.Dispatchable;
import org.deploymentobjects.core.domain.model.execution.ExitCode;
import org.deploymentobjects.core.domain.model.execution.Job;
import org.deploymentobjects.core.domain.shared.EventPublisher;
import org.deploymentobjects.core.domain.shared.EventStore;
import org.deploymentobjects.core.infrastructure.configuration.Puppet;
import org.deploymentobjects.core.infrastructure.execution.JschDispatch;
import org.deploymentobjects.core.infrastructure.persistence.InMemoryEventStore;
import org.deploymentobjects.core.infrastructure.persistence.zookeeper.ZookeeperEnvironmentRepository;
import org.deploymentobjects.core.infrastructure.persistence.zookeeper.ZookeeperPersistence;
import org.junit.Test;
public class CreateEnvironmentIntegrationTest {
@Test
public void createTestcluster() throws Exception {
EventStore eventStore = new InMemoryEventStore();
EventPublisher publisher = new EventPublisher(eventStore);
EnvironmentRepository repo = ZookeeperEnvironmentRepository.factory(
new ZookeeperPersistence("ino:2181"), publisher);
Dispatchable dispatch = new JschDispatch(publisher, "root");
ConfigurationManagement configMgt = new Puppet(publisher, new Host("puppetmaster1", "peoplemerge.com",
"192.168.0.7"), dispatch);
CreateEnvironmentCommand command = new CreateEnvironmentCommand.Builder(
"puppet2env", "peoplemerge.com", repo, publisher).withEventStore(eventStore).withNodes(1,
Type.SMALL, new Hypervisor.Builder(publisher, "kowalski", new NfsMount("192.168.0.4", "/media"), dispatch).withUserName("root").build()).withConfigurationManagement(
configMgt).withDispatch(
dispatch).build();
Job saga = command.create();
System.out.println("saga: " + saga);
ExitCode exit = saga.execute();
assertEquals(ExitCode.SUCCESS, exit);
System.out.println("event store: " + eventStore);
System.out.println("repo: " + repo);
}
}