瀏覽代碼

AMBARI-714. Job FSM Impl and tests. (Contributed by hitesh)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1383627 13f79535-47bb-0310-9956-ffa450edef68
Hitesh Shah 12 年之前
父節點
當前提交
6dd57d2bd5
共有 1 個文件被更改,包括 125 次插入0 次删除
  1. 125 0
      ambari-server/src/test/java/org/apache/ambari/server/state/live/job/TestJobImpl.java

+ 125 - 0
ambari-server/src/test/java/org/apache/ambari/server/state/live/job/TestJobImpl.java

@@ -0,0 +1,125 @@
+package org.apache.ambari.server.state.live.job;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestJobImpl {
+
+  private Job createNewJob(long id, String jobName, long startTime) {
+    JobId jId = new JobId(id, new JobType(jobName));
+    Job job = new JobImpl(jId, startTime);
+    return job;
+  }
+
+  private Job getRunningJob(long id, String jobName, long startTime)
+      throws Exception {
+    Job job = createNewJob(id, jobName, startTime);
+    verifyProgressUpdate(job, ++startTime);
+    return job;
+  }
+
+  private Job getCompletedJob(long id, String jobName, long startTime,
+      boolean failedJob) throws Exception {
+    Job job = getRunningJob(1, "JobNameFoo", startTime);
+    completeJob(job, failedJob, ++startTime);
+    return job;
+  }
+
+  private void verifyNewJob(Job job, long startTime) {
+    Assert.assertEquals(JobState.INIT, job.getState());
+    Assert.assertEquals(startTime, job.getStartTime());
+  }
+
+
+  @Test
+  public void testNewJob() {
+    long currentTime = System.currentTimeMillis();
+    Job job = createNewJob(1, "JobNameFoo", currentTime);
+    verifyNewJob(job, currentTime);
+  }
+
+  private void verifyProgressUpdate(Job job, long updateTime)
+      throws Exception {
+    JobProgressUpdateEvent e = new JobProgressUpdateEvent(job.getId(),
+        updateTime);
+    job.handleEvent(e);
+    Assert.assertEquals(JobState.IN_PROGRESS, job.getState());
+    Assert.assertEquals(updateTime, job.getLastUpdateTime());
+  }
+
+
+  @Test
+  public void testJobProgressUpdates() throws Exception {
+    long currentTime = 1;
+    Job job = createNewJob(1, "JobNameFoo", currentTime);
+    verifyNewJob(job, currentTime);
+
+    verifyProgressUpdate(job, ++currentTime);
+    verifyProgressUpdate(job, ++currentTime);
+    verifyProgressUpdate(job, ++currentTime);
+
+  }
+
+  private void completeJob(Job job, boolean failJob, long endTime)
+      throws Exception {
+    JobEvent e = null;
+    JobState endState = null;
+    if (failJob) {
+      e = new JobFailedEvent(job.getId(), endTime);
+      endState = JobState.FAILED;
+    } else {
+      e = new JobCompletedEvent(job.getId(), endTime);
+      endState = JobState.COMPLETED;
+    }
+    job.handleEvent(e);
+    Assert.assertEquals(endState, job.getState());
+    Assert.assertEquals(endTime, job.getLastUpdateTime());
+    Assert.assertEquals(endTime, job.getCompletionTime());
+  }
+
+
+  @Test
+  public void testJobSuccessfulCompletion() throws Exception {
+    long currentTime = 1;
+    Job job = getRunningJob(1, "JobNameFoo", currentTime);
+    completeJob(job, false, ++currentTime);
+  }
+
+  @Test
+  public void testJobFailedCompletion() throws Exception {
+    long currentTime = 1;
+    Job job = getRunningJob(1, "JobNameFoo", currentTime);
+    completeJob(job, true, ++currentTime);
+  }
+
+  @Test
+  public void completeNewJob() throws Exception {
+    long currentTime = 1;
+    Job job = createNewJob(1, "JobNameFoo", currentTime);
+    verifyNewJob(job, currentTime);
+    completeJob(job, false, ++currentTime);
+  }
+
+  @Test
+  public void failNewJob() throws Exception {
+    long currentTime = 1;
+    Job job = createNewJob(1, "JobNameFoo", currentTime);
+    verifyNewJob(job, currentTime);
+    completeJob(job, true, ++currentTime);
+  }
+
+  @Test
+  public void reInitCompletedJob() throws Exception {
+    Job job = getCompletedJob(1, "JobNameFoo", 1, false);
+    JobId jId = new JobId(2, new JobType("JobNameFoo"));
+    NewJobEvent e = new NewJobEvent(jId, 100);
+    job.handleEvent(e);
+    Assert.assertEquals(JobState.INIT, job.getState());
+    Assert.assertEquals(100, job.getStartTime());
+    Assert.assertEquals(-1, job.getLastUpdateTime());
+    Assert.assertEquals(-1, job.getCompletionTime());
+    Assert.assertEquals(2, job.getId().jobId);
+  }
+
+
+}