use of org.eclipse.che.api.environment.server.model.CheServiceImpl in project che by eclipse.
the class CheEnvironmentEngineTest method shouldBeAbleToStartEnvironmentWhenRecoverFailed.
@Test
public void shouldBeAbleToStartEnvironmentWhenRecoverFailed() throws Exception {
// given
String machineImage = "che/ubuntu_jdk";
when(snapshotDao.getSnapshot(anyString(), anyString(), anyString())).thenThrow(new NotFoundException("Snapshot not found"));
EnvironmentImpl env = createEnv();
String envName = "env-1";
String workspaceId = "wsId";
List<Instance> expectedMachines = new ArrayList<>();
when(machineProvider.startService(anyString(), eq(workspaceId), eq(envName), anyString(), anyBoolean(), anyString(), any(CheServiceImpl.class), any(LineConsumer.class))).thenAnswer(invocationOnMock -> {
Object[] arguments = invocationOnMock.getArguments();
String machineName = (String) arguments[3];
boolean isDev = (boolean) arguments[4];
CheServiceImpl service = (CheServiceImpl) arguments[6];
Machine machine = createMachine(workspaceId, envName, service, machineName, isDev);
NoOpMachineInstance instance = spy(new NoOpMachineInstance(machine));
expectedMachines.add(instance);
return instance;
});
CheServicesEnvironmentImpl servicesEnvironment = createCheServicesEnv();
for (CheServiceImpl service : servicesEnvironment.getServices().values()) {
service.setImage(machineImage);
}
when(environmentParser.parse(env)).thenReturn(servicesEnvironment);
// when
List<Instance> machines = engine.start(workspaceId, envName, env, true, messageConsumer);
// then
assertEquals(machines, expectedMachines);
ArgumentCaptor<CheServiceImpl> captor = ArgumentCaptor.forClass(CheServiceImpl.class);
verify(machineProvider).startService(anyString(), anyString(), anyString(), anyString(), eq(false), anyString(), captor.capture(), any(LineConsumer.class));
CheServiceImpl actualService = captor.getValue();
assertEquals(actualService.getImage(), machineImage);
}
use of org.eclipse.che.api.environment.server.model.CheServiceImpl in project che by eclipse.
the class CheEnvironmentEngineTest method stopsTheEnvironmentWhileStartOfMachineIsInterrupted.
@Test
public void stopsTheEnvironmentWhileStartOfMachineIsInterrupted() throws Exception {
// given
EnvironmentImpl env = createEnv();
String envName = "env-1";
String workspaceId = "wsId";
int[] counter = new int[] { env.getMachines().size() };
ArrayList<Instance> created = new ArrayList<>();
when(machineProvider.startService(anyString(), eq(workspaceId), eq(envName), anyString(), anyBoolean(), anyString(), any(CheServiceImpl.class), any(LineConsumer.class))).thenAnswer(invocationOnMock -> {
if (--counter[0] == 0) {
Thread.currentThread().interrupt();
throw new ServerException("interrupted!");
}
Object[] arguments = invocationOnMock.getArguments();
NoOpMachineInstance instance = spy(new NoOpMachineInstance(createMachine(workspaceId, envName, (CheServiceImpl) arguments[6], (String) arguments[3], (boolean) arguments[4])));
created.add(instance);
return instance;
});
when(environmentParser.parse(env)).thenReturn(createCheServicesEnv());
// when, then
try {
engine.start(workspaceId, envName, env, false, messageConsumer, startedHandler);
fail("environment must not be running");
} catch (EnvironmentStartInterruptedException x) {
assertEquals(x.getMessage(), format("Start of environment '%s' in workspace '%s' is interrupted", envName, workspaceId));
}
// environment must not be running
try {
engine.getMachines(workspaceId);
fail("environment must not be running");
} catch (EnvironmentNotRunningException x) {
assertEquals(x.getMessage(), format("Environment with ID '%s' is not found", workspaceId));
}
// all the machines expect of the last one must be destroyed
for (Instance instance : created) {
verify(instance).destroy();
}
}
use of org.eclipse.che.api.environment.server.model.CheServiceImpl in project che by eclipse.
the class CheEnvironmentValidatorTest method createCheService.
private static CheServiceImpl createCheService(String suffix, long memLimitBytes, List<String> links, List<String> dependsOn, List<String> volumesFrom) {
CheServiceImpl service = new CheServiceImpl();
service.setMemLimit(memLimitBytes);
service.setImage("image_repo/image" + suffix);
service.setEnvironment(new HashMap<>(singletonMap("env" + suffix, "val" + suffix)));
service.setCommand(new ArrayList<>(asList("this", "is", "command" + suffix)));
service.setContainerName("containerName" + suffix);
service.setEntrypoint(new ArrayList<>(asList("this", "is", "entrypoint" + suffix)));
service.setExpose(new ArrayList<>(asList("8080", "9090/tcp", "7070/udp")));
service.setLabels(new HashMap<>(singletonMap("label" + suffix, "value" + suffix)));
if (links != null) {
service.setLinks(new ArrayList<>(links));
}
if (dependsOn != null) {
service.setDependsOn(new ArrayList<>(dependsOn));
}
if (volumesFrom != null) {
service.setVolumesFrom(new ArrayList<>(volumesFrom));
}
return service;
}
use of org.eclipse.che.api.environment.server.model.CheServiceImpl in project che by eclipse.
the class EnvironmentParserTest method getEntryForDockerimageEnv.
private static List<Object> getEntryForDockerimageEnv(Map<String, ServerConf2Impl> servers, List<String> expectedExpose, Map<String, String> expectedLabels) {
EnvironmentImpl environmentConfig = createDockerimageEnvConfig();
ExtendedMachineImpl extendedMachine = getMachine(environmentConfig);
extendedMachine.setServers(servers);
CheServicesEnvironmentImpl parsedCheEnv = new CheServicesEnvironmentImpl();
parsedCheEnv.getServices().put(DEFAULT_MACHINE_NAME, new CheServiceImpl().withImage(DEFAULT_DOCKER_IMAGE));
return asList(environmentConfig, createExpectedEnvFromImage(expectedExpose, expectedLabels), parsedCheEnv);
}
use of org.eclipse.che.api.environment.server.model.CheServiceImpl in project che by eclipse.
the class EnvironmentParserTest method getEntryForDockerfileEnv.
private static List<Object> getEntryForDockerfileEnv(Map<String, ServerConf2Impl> servers, List<String> expectedExpose, Map<String, String> expectedLabels) {
EnvironmentImpl environmentConfig = createDockerfileEnvConfig();
ExtendedMachineImpl extendedMachine = getMachine(environmentConfig);
extendedMachine.setServers(servers);
CheServicesEnvironmentImpl parsedCheEnv = new CheServicesEnvironmentImpl();
CheServiceBuildContextImpl buildContext = new CheServiceBuildContextImpl().withDockerfileContent(DEFAULT_DOCKERFILE);
parsedCheEnv.getServices().put(DEFAULT_MACHINE_NAME, new CheServiceImpl().withBuild(buildContext));
return asList(environmentConfig, createExpectedEnvFromDockerfile(expectedExpose, expectedLabels), parsedCheEnv);
}
Aggregations