use of com.hazelcast.jet.core.TestProcessors.MockP in project hazelcast by hazelcast.
the class ExecutionLifecycleTest method when_processorProcessThrows_then_failJob.
@Test
public void when_processorProcessThrows_then_failJob() {
// Given
DAG dag = new DAG();
Vertex source = dag.newVertex("source", ListSource.supplier(singletonList(1)));
Vertex process = dag.newVertex("faulty", new MockPMS(() -> new MockPS(() -> new MockP().setProcessError(MOCK_ERROR), MEMBER_COUNT)));
dag.edge(between(source, process));
// When
Job job = runJobExpectFailure(dag, false);
// Then
assertPClosedWithError();
assertPsClosedWithError();
assertPmsClosedWithError();
assertJobFailed(job, MOCK_ERROR);
}
use of com.hazelcast.jet.core.TestProcessors.MockP in project hazelcast by hazelcast.
the class ExecutionLifecycleTest method when_processorOnSnapshotCompleteThrows_then_failJob.
@Test
public void when_processorOnSnapshotCompleteThrows_then_failJob() {
// Given
DAG dag = new DAG();
dag.newVertex("faulty", new MockPMS(() -> new MockPS(() -> new MockP().nonCooperative().streaming().setOnSnapshotCompleteError(MOCK_ERROR), MEMBER_COUNT)));
// When
Job job = runJobExpectFailure(dag, true);
assertTrue("onSnapshotCompleted not called", MockP.onSnapshotCompletedCalled);
// Then
assertPClosedWithError();
assertPsClosedWithError();
assertPmsClosedWithError();
assertJobFailed(job, MOCK_ERROR);
}
use of com.hazelcast.jet.core.TestProcessors.MockP in project hazelcast by hazelcast.
the class ExecutionLifecycleTest method when_processorCompletesSuccessfully_then_closeCalledImmediately.
@Test
public void when_processorCompletesSuccessfully_then_closeCalledImmediately() {
DAG dag = new DAG();
Vertex v1 = dag.newVertex("v1", MockP::new);
Vertex v2 = dag.newVertex("v2", () -> new NoOutputSourceP());
dag.edge(between(v1, v2));
Job job = newJob(dag);
assertTrueEventually(this::assertPClosedWithoutError);
NoOutputSourceP.proceedLatch.countDown();
job.join();
assertJobSucceeded(job);
}
use of com.hazelcast.jet.core.TestProcessors.MockP in project hazelcast by hazelcast.
the class JobTest method when_jobWithSameNameManyTimes_then_queryResultSortedBySubmission.
@Test
public void when_jobWithSameNameManyTimes_then_queryResultSortedBySubmission() {
DAG streamingDag = new DAG();
streamingDag.newVertex("v", () -> new MockP().streaming());
List<Long> jobIds = new ArrayList<>();
// When
for (int i = 0; i < 10; i++) {
Job job = instance().getJet().newJob(streamingDag, new JobConfig().setName("foo"));
jobIds.add(0, job.getId());
job.cancel();
joinAndExpectCancellation(job);
}
Job activeJob = instance().getJet().newJob(streamingDag, new JobConfig().setName("foo"));
jobIds.add(0, activeJob.getId());
// Then
List<Job> actualJobs = instance().getJet().getJobs("foo");
assertThat(toList(actualJobs, Job::getId)).containsExactlyElementsOf(jobIds);
}
use of com.hazelcast.jet.core.TestProcessors.MockP in project hazelcast by hazelcast.
the class JobTest method test_manyJobs.
private void test_manyJobs(HazelcastInstance inst) {
JetService jet = inst.getJet();
DAG streamingDag = new DAG();
streamingDag.newVertex("v", () -> new MockP().streaming());
DAG batchDag = new DAG();
batchDag.newVertex("v", MockP::new);
// normal streaming job
Job streamingJob = jet.newJob(streamingDag);
assertJobStatusEventually(streamingJob, RUNNING);
// two normal batch job
Job batchJob1 = jet.newJob(batchDag);
batchJob1.join();
Job batchJob2 = jet.newJob(batchDag);
batchJob2.join();
// named streaming job name1
Job namedStreamingJob1 = jet.newJob(streamingDag, new JobConfig().setName("name1"));
assertJobStatusEventually(namedStreamingJob1, RUNNING);
// named streaming job name2, cancelled
Job namedStreamingJob2 = jet.newJob(streamingDag, new JobConfig().setName("name2"));
namedStreamingJob2.cancel();
joinAndExpectCancellation(namedStreamingJob2);
// named streaming job name2, again, not cancelled
Job namedStreamingJob2_1 = jet.newJob(streamingDag, new JobConfig().setName("name2"));
assertJobStatusEventually(namedStreamingJob2_1, RUNNING);
// light streaming job
Job lightStreamingJob = inst.getJet().newLightJob(streamingDag);
// light streaming job, cancelled
Job lightStreamingJobCancelled = jet.newLightJob(streamingDag);
lightStreamingJobCancelled.cancel();
joinAndExpectCancellation(lightStreamingJobCancelled);
// two light batch jobs
Job lightBatchJob1 = jet.newLightJob(batchDag);
Job lightBatchJob2 = jet.newLightJob(batchDag);
lightBatchJob1.join();
lightBatchJob2.join();
List<Job> allJobsExceptCompletedLightJobs = asList(streamingJob, batchJob1, batchJob2, namedStreamingJob1, namedStreamingJob2, namedStreamingJob2_1, lightStreamingJob);
List<Job> allJobs = new ArrayList<>();
allJobs.addAll(allJobsExceptCompletedLightJobs);
allJobs.add(lightStreamingJobCancelled);
allJobs.add(lightBatchJob1);
allJobs.add(lightBatchJob2);
// Then
// getJobs must include all submitted all jobs, except for the light batch jobs that are done
assertThat(toList(jet.getJobs(), this::jobEqualityString)).containsExactlyInAnyOrderElementsOf(toList(allJobsExceptCompletedLightJobs, this::jobEqualityString));
for (Job job : allJobs) {
Job trackedJobById = jet.getJob(job.getId());
Job trackedJobByName = job.getName() != null ? jet.getJob(job.getName()) : null;
if (allJobsExceptCompletedLightJobs.contains(job)) {
assertEquals(jobEqualityString(job), jobEqualityString(trackedJobById));
if (job.getName() != null && job != namedStreamingJob2) {
assertEquals(jobEqualityString(job), jobEqualityString(trackedJobByName));
}
} else {
assertNull(trackedJobById);
assertNull(trackedJobByName);
}
}
assertThat(toList(jet.getJobs("name1"), this::jobEqualityString)).containsExactlyElementsOf(toList(singletonList(namedStreamingJob1), this::jobEqualityString));
assertThat(toList(jet.getJobs("name2"), this::jobEqualityString)).containsExactlyElementsOf(toList(asList(namedStreamingJob2_1, namedStreamingJob2), this::jobEqualityString));
}
Aggregations