use of com.spotify.helios.common.descriptors.TaskStatus in project helios by spotify.
the class SupervisorTest method mockTaskStatus.
private void mockTaskStatus(final JobId jobId) throws Exception {
final ConcurrentMap<JobId, TaskStatus> statusMap = Maps.newConcurrentMap();
doAnswer(invocationOnMock -> {
final TaskStatus status = (TaskStatus) invocationOnMock.getArguments()[1];
statusMap.put(jobId, status);
return null;
}).when(model).setTaskStatus(eq(jobId), taskStatusCaptor.capture());
when(model.getTaskStatus(eq(jobId))).thenReturn(statusMap.get(jobId));
}
use of com.spotify.helios.common.descriptors.TaskStatus in project helios by spotify.
the class AddExtraHostTest method test.
@Test
public void test() throws Exception {
try (final DockerClient docker = getNewDockerClient()) {
// Start Helios agent, configured to bind host /etc/hostname into container /mnt/hostname
startDefaultMaster();
startDefaultAgent(testHost(), "--add-host", "secrethost:169.254.169.254");
awaitHostStatus(testHost(), UP, LONG_WAIT_SECONDS, SECONDS);
// a job that cat's /etc/hosts
final List<String> command = ImmutableList.of("cat", "/etc/hosts");
final JobId jobId = createJob(testJobName, testJobVersion, BUSYBOX, command);
deployJob(jobId, testHost());
final TaskStatus taskStatus = awaitTaskState(jobId, testHost(), EXITED);
final String log;
try (LogStream logs = docker.logs(taskStatus.getContainerId(), stdout(), stderr())) {
log = logs.readFully();
assertThat(log, containsString("169.254.169.254\tsecrethost"));
}
}
}
use of com.spotify.helios.common.descriptors.TaskStatus in project helios by spotify.
the class AgentZooKeeperDownTolerationTest method test.
@Test
public void test() throws Exception {
startDefaultMaster();
final DockerClient dockerClient = getNewDockerClient();
final HeliosClient client = defaultClient();
final AgentMain agent1 = startDefaultAgent(testHost());
// Create a job
final Job job = Job.newBuilder().setName(testJobName).setVersion(testJobVersion).setImage(BUSYBOX).setCommand(IDLE_COMMAND).setCreatingUser(TEST_USER).build();
final JobId jobId = job.getId();
final CreateJobResponse created = client.createJob(job).get();
assertEquals(CreateJobResponse.Status.OK, created.getStatus());
// Wait for agent to come up
awaitHostRegistered(client, testHost(), LONG_WAIT_SECONDS, SECONDS);
awaitHostStatus(client, testHost(), UP, LONG_WAIT_SECONDS, SECONDS);
// Deploy the job on the agent
final Deployment deployment = Deployment.of(jobId, START);
final JobDeployResponse deployed = client.deploy(deployment, testHost()).get();
assertEquals(JobDeployResponse.Status.OK, deployed.getStatus());
// Wait for the job to run
final TaskStatus firstTaskStatus = awaitJobState(client, testHost(), jobId, RUNNING, LONG_WAIT_SECONDS, SECONDS);
assertJobEquals(job, firstTaskStatus.getJob());
assertNotNull(dockerClient.inspectContainer(firstTaskStatus.getContainerId()));
// Stop zookeeper
zk().stop();
// Wait for a while and make sure that the container is still running
Thread.sleep(5000);
assertTrue(dockerClient.inspectContainer(firstTaskStatus.getContainerId()).state().running());
// Stop the agent
agent1.stopAsync().awaitTerminated();
// Start the agent again
final AgentMain agent2 = startDefaultAgent(testHost());
// Wait for a while and make sure that the same container is still running
Thread.sleep(5000);
assertTrue(dockerClient.inspectContainer(firstTaskStatus.getContainerId()).state().running());
// Kill the container
dockerClient.killContainer(firstTaskStatus.getContainerId());
assertFalse(dockerClient.inspectContainer(firstTaskStatus.getContainerId()).state().running());
// Wait for a while and make sure that a new container was spawned
final String firstRestartedContainerId = Polling.await(LONG_WAIT_SECONDS, SECONDS, new Callable<String>() {
@Override
public String call() throws Exception {
final List<Container> containers = listContainers(dockerClient, testTag);
return containers.size() == 1 ? containers.get(0).id() : null;
}
});
// Stop the agent
agent2.stopAsync().awaitTerminated();
// Kill the container
dockerClient.killContainer(firstRestartedContainerId);
assertFalse(dockerClient.inspectContainer(firstRestartedContainerId).state().running());
// Start the agent again
startDefaultAgent(testHost());
// Wait for a while and make sure that a new container was spawned
final String secondRestartedContainerId = Polling.await(LONG_WAIT_SECONDS, SECONDS, new Callable<String>() {
@Override
public String call() throws Exception {
final List<Container> containers = listContainers(dockerClient, testTag);
return containers.size() == 1 ? containers.get(0).id() : null;
}
});
assertTrue(dockerClient.inspectContainer(secondRestartedContainerId).state().running());
// Start zookeeper
zk().start();
// Verify that the agent is listed as up
awaitHostStatus(client, testHost(), UP, LONG_WAIT_SECONDS, SECONDS);
// Wait for the new container id to be reflected in the task status
Polling.await(LONG_WAIT_SECONDS, SECONDS, new Callable<TaskStatus>() {
@Override
public TaskStatus call() throws Exception {
final JobStatus jobStatus = client.jobStatus(jobId).get();
final TaskStatus taskStatus = jobStatus.getTaskStatuses().get(testHost());
return taskStatus != null && Objects.equals(taskStatus.getContainerId(), secondRestartedContainerId) ? taskStatus : null;
}
});
}
Aggregations