You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@griffin.apache.org by gu...@apache.org on 2017/10/11 03:21:18 UTC

incubator-griffin git commit: refactor unit test

Repository: incubator-griffin
Updated Branches:
  refs/heads/master 417c931f2 -> 460e2fd72


refactor unit test

Author: Lionel Liu <bh...@163.com>
Author: ahutsunshine <ah...@gmail.com>
Author: Yao <de...@ebay.com>

Closes #129 from ahutsunshine/master.


Project: http://git-wip-us.apache.org/repos/asf/incubator-griffin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-griffin/commit/460e2fd7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-griffin/tree/460e2fd7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-griffin/diff/460e2fd7

Branch: refs/heads/master
Commit: 460e2fd7283f7e3e3953b63d536359be5c9deb51
Parents: 417c931
Author: Lionel Liu <bh...@163.com>
Authored: Wed Oct 11 11:21:08 2017 +0800
Committer: Lionel Liu <bh...@163.com>
Committed: Wed Oct 11 11:21:08 2017 +0800

----------------------------------------------------------------------
 .../apache/griffin/core/job/JobServiceImpl.java |  26 ++-
 .../core/measure/MeasureServiceImpl.java        |  15 +-
 .../core/measure/repo/DataSourceRepo.java       |  26 +++
 .../griffin/core/measure/repo/RuleRepo.java     |  26 +++
 .../griffin/core/job/JobControllerTest.java     |  38 +++-
 .../griffin/core/job/JobServiceImplTest.java    | 175 +++++++++++++------
 .../core/measure/MeasureControllerTest.java     |  99 +++++++----
 .../griffin/core/measure/MeasureRepoTest.java   | 106 -----------
 .../core/measure/MeasureServiceImplTest.java    |  68 ++++---
 .../hive/HiveMetaStoreServiceImplTest.java      |  45 +++--
 .../griffin/core/util/GriffinUtilTest.java      |  47 ++---
 11 files changed, 396 insertions(+), 275 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/main/java/org/apache/griffin/core/job/JobServiceImpl.java
----------------------------------------------------------------------
diff --git a/service/src/main/java/org/apache/griffin/core/job/JobServiceImpl.java b/service/src/main/java/org/apache/griffin/core/job/JobServiceImpl.java
index 5be3f8d..a31ed03 100644
--- a/service/src/main/java/org/apache/griffin/core/job/JobServiceImpl.java
+++ b/service/src/main/java/org/apache/griffin/core/job/JobServiceImpl.java
@@ -208,7 +208,7 @@ public class JobServiceImpl implements JobService {
             Scheduler scheduler = factory.getObject();
             scheduler.pauseJob(new JobKey(name, group));
             return GriffinOperationMessage.PAUSE_JOB_SUCCESS;
-        } catch (SchedulerException e) {
+        } catch (SchedulerException | NullPointerException e) {
             LOGGER.error("{} {}", GriffinOperationMessage.PAUSE_JOB_FAIL, e.getMessage());
             return GriffinOperationMessage.PAUSE_JOB_FAIL;
         }
@@ -221,7 +221,7 @@ public class JobServiceImpl implements JobService {
             jobDetail.getJobDataMap().putAsString("deleted", true);
             scheduler.addJob(jobDetail, true);
             return GriffinOperationMessage.SET_JOB_DELETED_STATUS_SUCCESS;
-        } catch (SchedulerException e) {
+        } catch (SchedulerException | NullPointerException e) {
             LOGGER.error("{} {}", GriffinOperationMessage.PAUSE_JOB_FAIL, e.getMessage());
             return GriffinOperationMessage.SET_JOB_DELETED_STATUS_FAIL;
         }
@@ -253,21 +253,17 @@ public class JobServiceImpl implements JobService {
      *
      * @param measure
      */
-    public void deleteJobsRelateToMeasure(Measure measure) {
+    //TODO
+    public void deleteJobsRelateToMeasure(Measure measure) throws SchedulerException {
         Scheduler scheduler = factory.getObject();
-        try {
-            for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.anyGroup())) {//get all jobs
-                JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-                JobDataMap jobDataMap = jobDetail.getJobDataMap();
-                if (jobDataMap.getString("measureId").equals(measure.getId().toString())) {
-                    //select jobs related to measureId,
-                    deleteJob(jobKey.getGroup(), jobKey.getName());
-                    LOGGER.info("{} {} is paused and logically deleted.", jobKey.getGroup(), jobKey.getName());
-                }
+        for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.anyGroup())) {//get all jobs
+            JobDetail jobDetail = scheduler.getJobDetail(jobKey);
+            JobDataMap jobDataMap = jobDetail.getJobDataMap();
+            if (jobDataMap.getString("measureId").equals(measure.getId().toString())) {
+                //select jobs related to measureId,
+                deleteJob(jobKey.getGroup(), jobKey.getName());
+                LOGGER.info("{} {} is paused and logically deleted.", jobKey.getGroup(), jobKey.getName());
             }
-        } catch (SchedulerException e) {
-            LOGGER.error("Fail to stop jobs related to measure id: {} name: {}", measure.getId(), measure.getName());
-            LOGGER.error("Fail to stop jobs related to measure id: {} name: {}", measure.getId(), measure.getName());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java
----------------------------------------------------------------------
diff --git a/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java b/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java
index 021af17..dd97336 100644
--- a/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java
+++ b/service/src/main/java/org/apache/griffin/core/measure/MeasureServiceImpl.java
@@ -24,6 +24,7 @@ import org.apache.griffin.core.job.JobServiceImpl;
 import org.apache.griffin.core.measure.entity.Measure;
 import org.apache.griffin.core.measure.repo.MeasureRepo;
 import org.apache.griffin.core.util.GriffinOperationMessage;
+import org.quartz.SchedulerException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,11 +61,17 @@ public class MeasureServiceImpl implements MeasureService {
         if (!measureRepo.exists(measureId)) {
             return GriffinOperationMessage.RESOURCE_NOT_FOUND;
         } else {
-            //pause all jobs related to the measure
             Measure measure = measureRepo.findOne(measureId);
-            jobService.deleteJobsRelateToMeasure(measure);
-            measure.setDeleted(true);
-            measureRepo.save(measure);
+            try{
+                //pause all jobs related to the measure
+                jobService.deleteJobsRelateToMeasure(measure);
+                measure.setDeleted(true);
+                measureRepo.save(measure);
+            }catch (SchedulerException e){
+                LOGGER.error("Delete measure id: {} name: {} failure. {}", measure.getId(), measure.getName(),e.getMessage());
+                return GriffinOperationMessage.DELETE_MEASURE_BY_ID_FAIL;
+            }
+
             return GriffinOperationMessage.DELETE_MEASURE_BY_ID_SUCCESS;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/main/java/org/apache/griffin/core/measure/repo/DataSourceRepo.java
----------------------------------------------------------------------
diff --git a/service/src/main/java/org/apache/griffin/core/measure/repo/DataSourceRepo.java b/service/src/main/java/org/apache/griffin/core/measure/repo/DataSourceRepo.java
new file mode 100644
index 0000000..5cc897c
--- /dev/null
+++ b/service/src/main/java/org/apache/griffin/core/measure/repo/DataSourceRepo.java
@@ -0,0 +1,26 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+package org.apache.griffin.core.measure.repo;
+
+import org.apache.griffin.core.measure.entity.DataSource;
+import org.springframework.data.repository.CrudRepository;
+
+public interface DataSourceRepo extends CrudRepository<DataSource,Long> {
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/main/java/org/apache/griffin/core/measure/repo/RuleRepo.java
----------------------------------------------------------------------
diff --git a/service/src/main/java/org/apache/griffin/core/measure/repo/RuleRepo.java b/service/src/main/java/org/apache/griffin/core/measure/repo/RuleRepo.java
new file mode 100644
index 0000000..75adce5
--- /dev/null
+++ b/service/src/main/java/org/apache/griffin/core/measure/repo/RuleRepo.java
@@ -0,0 +1,26 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+package org.apache.griffin.core.measure.repo;
+
+import org.apache.griffin.core.measure.entity.Rule;
+import org.springframework.data.repository.CrudRepository;
+
+public interface RuleRepo extends CrudRepository<Rule,Long> {
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java b/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java
index d939d82..a78bafc 100644
--- a/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java
+++ b/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java
@@ -73,13 +73,12 @@ public class JobControllerTest {
     }
 
     @Test
-    public void testAddJob() throws Exception {
+    public void testAddJobForSuccess() throws Exception {
         String groupName = "BA";
         String jobName = "job1";
         long measureId = 0;
         JobRequestBody jobRequestBody = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH", "111", "20170607", "100");
-        ObjectMapper mapper = new ObjectMapper();
-        String schedulerRequestBodyJson = mapper.writeValueAsString(jobRequestBody);
+        String schedulerRequestBodyJson = new ObjectMapper().writeValueAsString(jobRequestBody);
         given(service.addJob(groupName, jobName, measureId, jobRequestBody)).willReturn(GriffinOperationMessage.CREATE_JOB_SUCCESS);
 
         mvc.perform(post("/jobs").param("group", groupName).param("jobName", jobName)
@@ -93,7 +92,26 @@ public class JobControllerTest {
     }
 
     @Test
-    public void testDeleteJob() throws Exception {
+    public void testAddJobForFail() throws Exception {
+        String groupName = "BA";
+        String jobName = "job1";
+        long measureId = 0;
+        JobRequestBody jobRequestBody = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH", "111", "20170607", "100");
+        String schedulerRequestBodyJson = new ObjectMapper().writeValueAsString(jobRequestBody);
+        given(service.addJob(groupName, jobName, measureId, jobRequestBody)).willReturn(GriffinOperationMessage.CREATE_JOB_FAIL);
+
+        mvc.perform(post("/jobs").param("group", groupName).param("jobName", jobName)
+                .param("measureId", String.valueOf(measureId))
+                .contentType(MediaType.APPLICATION_JSON)
+                .content(schedulerRequestBodyJson))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.code", is(405)))
+                .andExpect(jsonPath("$.description", is("Create Job Failed")))
+                .andDo(print());
+    }
+
+    @Test
+    public void testDeleteJobForSuccess() throws Exception {
         String groupName = "BA";
         String jobName = "job1";
         given(service.deleteJob(groupName, jobName)).willReturn(GriffinOperationMessage.DELETE_JOB_SUCCESS);
@@ -105,6 +123,18 @@ public class JobControllerTest {
     }
 
     @Test
+    public void testDeleteJobForFail() throws Exception {
+        String groupName = "BA";
+        String jobName = "job1";
+        given(service.deleteJob(groupName, jobName)).willReturn(GriffinOperationMessage.DELETE_JOB_FAIL);
+
+        mvc.perform(delete("/jobs").param("group", groupName).param("jobName", jobName))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.code", is(406)))
+                .andExpect(jsonPath("$.description", is("Delete Job Failed")));
+    }
+
+    @Test
     public void testFindInstancesOfJob() throws Exception {
         String groupName = "BA";
         String jobName = "job1";

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java
index 6efa102..56567ff 100644
--- a/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java
+++ b/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java
@@ -20,7 +20,6 @@ under the License.
 package org.apache.griffin.core.job;
 
 import org.apache.griffin.core.error.exception.GriffinException;
-import org.apache.griffin.core.job.entity.JobHealth;
 import org.apache.griffin.core.job.entity.JobInstance;
 import org.apache.griffin.core.job.entity.JobRequestBody;
 import org.apache.griffin.core.job.entity.LivySessionStates;
@@ -49,6 +48,7 @@ import static org.apache.griffin.core.measure.MeasureTestHelper.createJobDetail;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.doThrow;
 import static org.quartz.TriggerBuilder.newTrigger;
 
 @RunWith(SpringRunner.class)
@@ -82,74 +82,117 @@ public class JobServiceImplTest {
     }
 
     @Test
-    public void testGetAliveJobs() throws SchedulerException {
+    public void testGetAliveJobsForNormalRun() throws SchedulerException {
         Scheduler scheduler = Mockito.mock(Scheduler.class);
         JobDetailImpl jobDetail = createJobDetail();
         given(factory.getObject()).willReturn(scheduler);
         given(scheduler.getJobGroupNames()).willReturn(Arrays.asList("group"));
-        HashSet<JobKey> set = new HashSet<JobKey>() {{
-            add(new JobKey("name", "group"));
-        }};
+        HashSet<JobKey> set = new HashSet<>();
+        set.add(new JobKey("name", "group"));
         given(scheduler.getJobKeys(GroupMatcher.jobGroupEquals("group"))).willReturn(set);
-        Trigger trigger = newTrigger().withIdentity(TriggerKey.triggerKey("name", "group")).
-                withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3000).repeatForever())
-                .startAt(new Date()).build();
-        List<Trigger> triggers = Arrays.asList(trigger);
+        List<Trigger> triggers = Arrays.asList(newTriggerInstance("name", "group", 3000));
         JobKey jobKey = set.iterator().next();
         given((List<Trigger>) scheduler.getTriggersOfJob(jobKey)).willReturn(triggers);
         given(scheduler.getJobDetail(jobKey)).willReturn(jobDetail);
         assertEquals(service.getAliveJobs().size(), 1);
+    }
 
-        // trigger is empty
+    @Test
+    public void testGetAliveJobsForNoJobsWithTriggerEmpty() throws SchedulerException {
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        given(scheduler.getJobGroupNames()).willReturn(Arrays.asList("group"));
+        HashSet<JobKey> set = new HashSet<>();
+        set.add(new JobKey("name", "group"));
+        given(scheduler.getJobKeys(GroupMatcher.jobGroupEquals("group"))).willReturn(set);
+        JobKey jobKey = set.iterator().next();
         given((List<Trigger>) scheduler.getTriggersOfJob(jobKey)).willReturn(Arrays.asList());
         assertEquals(service.getAliveJobs().size(), 0);
+    }
 
-        // schedule exception
-        GriffinException.GetJobsFailureException exception = null;
-        try {
-            given(scheduler.getTriggersOfJob(jobKey)).willThrow(new GriffinException.GetJobsFailureException());
-            service.getAliveJobs();
-        } catch (GriffinException.GetJobsFailureException e) {
-            exception = e;
-        }
+    @Test
+    public void testGetAliveJobsForSchedulerException() throws SchedulerException {
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        given(scheduler.getJobGroupNames()).willReturn(Arrays.asList("group"));
+        HashSet<JobKey> set = new HashSet<>();
+        set.add(new JobKey("name", "group"));
+        given(scheduler.getJobKeys(GroupMatcher.jobGroupEquals("group"))).willReturn(set);
+        JobKey jobKey = set.iterator().next();
+        GriffinException.GetJobsFailureException exception = getTriggersOfJobExpectException(scheduler, jobKey);
         assertTrue(exception != null);
+    }
 
+    @Test
+    public void testAddJobForSuccess() {
+        JobRequestBody jobRequestBody = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH",
+                String.valueOf(System.currentTimeMillis()), String.valueOf(System.currentTimeMillis()), "1000");
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        assertEquals(service.addJob("BA", "jobName", 0L, jobRequestBody), GriffinOperationMessage.CREATE_JOB_SUCCESS);
+    }
 
+    @Test
+    public void testAddJobForFailWithFormatError() {
+        JobRequestBody jobRequestBody = new JobRequestBody();
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        assertEquals(service.addJob("BA", "jobName", 0L, jobRequestBody), GriffinOperationMessage.CREATE_JOB_FAIL);
     }
 
     @Test
-    public void testAddJob() {
+    public void testAddJobForFailWithTriggerKeyExist() throws SchedulerException {
         String groupName = "BA";
-        String jobName = "job1";
-        long measureId = 0;
-        JobRequestBody jobRequestBody = new JobRequestBody();
+        String jobName = "jobName";
+        JobRequestBody jobRequestBody = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH",
+                String.valueOf(System.currentTimeMillis()), String.valueOf(System.currentTimeMillis()), "1000");
         Scheduler scheduler = Mockito.mock(Scheduler.class);
         given(factory.getObject()).willReturn(scheduler);
-        assertEquals(service.addJob(groupName, jobName, measureId, jobRequestBody), GriffinOperationMessage.CREATE_JOB_FAIL);
+        given(scheduler.checkExists(TriggerKey.triggerKey(jobName, groupName))).willReturn(true);
+        assertEquals(service.addJob(groupName, jobName, 0L, jobRequestBody), GriffinOperationMessage.CREATE_JOB_FAIL);
+    }
 
-        JobRequestBody jobRequestBody1 = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH",
-                System.currentTimeMillis() + "", System.currentTimeMillis() + "", "1000");
-        Scheduler scheduler1 = Mockito.mock(Scheduler.class);
-        given(factory.getObject()).willReturn(scheduler1);
-        assertEquals(service.addJob(groupName, jobName, measureId, jobRequestBody1), GriffinOperationMessage.CREATE_JOB_SUCCESS);
+    @Test
+    public void testAddJobForFailWithScheduleException() throws SchedulerException {
+        String groupName = "BA";
+        String jobName = "jobName";
+        JobRequestBody jobRequestBody = new JobRequestBody("YYYYMMdd-HH", "YYYYMMdd-HH",
+                String.valueOf(System.currentTimeMillis()), String.valueOf(System.currentTimeMillis()), "1000");
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        Trigger trigger = newTrigger().withIdentity(TriggerKey.triggerKey(jobName, groupName)).build();
+        given(scheduler.scheduleJob(trigger)).willThrow(SchedulerException.class);
+        assertEquals(service.addJob(groupName, jobName, 0L, jobRequestBody), GriffinOperationMessage.CREATE_JOB_FAIL);
     }
 
     @Test
-    public void testDeleteJob() throws SchedulerException {
+    public void testDeleteJobForSuccess() throws SchedulerException {
         String groupName = "BA";
-        String jobName = "job1";
+        String jobName = "jobName";
         Scheduler scheduler = Mockito.mock(Scheduler.class);
-        // DELETE_JOB_SUCCESS
         given(factory.getObject()).willReturn(scheduler);
-        given(scheduler.getJobDetail(new JobKey(jobName,groupName))).willReturn(createJobDetail());
+        given(scheduler.getJobDetail(new JobKey(jobName, groupName))).willReturn(createJobDetail());
         assertEquals(service.deleteJob(groupName, jobName), GriffinOperationMessage.DELETE_JOB_SUCCESS);
+    }
 
-        // DELETE_JOB_FAIL
-        given(factory.getObject()).willThrow(SchedulerException.class);
+    @Test
+    public void testDeleteJobForFailWithPauseFailure() throws SchedulerException {
+        String groupName = "BA";
+        String jobName = "jobName";
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        doThrow(SchedulerException.class).when(scheduler).pauseJob(new JobKey(jobName, groupName));
         assertEquals(service.deleteJob(groupName, jobName), GriffinOperationMessage.DELETE_JOB_FAIL);
     }
 
     @Test
+    public void testDeleteJobForFailWithNull() throws SchedulerException {
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        assertEquals(service.deleteJob("BA", "jobName"), GriffinOperationMessage.DELETE_JOB_FAIL);
+    }
+
+    @Test
     public void testFindInstancesOfJob() {
         String groupName = "BA";
         String jobName = "job1";
@@ -158,11 +201,11 @@ public class JobServiceImplTest {
         JobInstance jobInstance = new JobInstance(groupName, jobName, 1, LivySessionStates.State.dead, "app_id", "app_uri", System.currentTimeMillis());
         Pageable pageRequest = new PageRequest(page, size, Sort.Direction.DESC, "timestamp");
         given(jobInstanceRepo.findByGroupNameAndJobName(groupName, jobName, pageRequest)).willReturn(Arrays.asList(jobInstance));
-        assertEquals(service.findInstancesOfJob(groupName, jobName, page, size).size(),1);
+        assertEquals(service.findInstancesOfJob(groupName, jobName, page, size).size(), 1);
     }
 
     @Test
-    public void testGetHealthInfo() throws SchedulerException {
+    public void testGetHealthInfoWithHealthy() throws SchedulerException {
         Scheduler scheduler = Mockito.mock(Scheduler.class);
         given(factory.getObject()).willReturn(scheduler);
         given(scheduler.getJobGroupNames()).willReturn(Arrays.asList("BA"));
@@ -173,25 +216,59 @@ public class JobServiceImplTest {
 
         Pageable pageRequest = new PageRequest(0, 1, Sort.Direction.DESC, "timestamp");
         List<JobInstance> scheduleStateList = new ArrayList<>();
-        JobInstance jobInstance = new JobInstance();
-        jobInstance.setGroupName("BA");
-        jobInstance.setJobName("job1");
-        jobInstance.setSessionId(1);
-        jobInstance.setState(LivySessionStates.State.starting);
-        jobInstance.setAppId("app_id");
-        jobInstance.setTimestamp(System.currentTimeMillis());
-        scheduleStateList.add(jobInstance);
+        scheduleStateList.add(newJobInstance());
         given(jobInstanceRepo.findByGroupNameAndJobName(jobKey.getGroup(), jobKey.getName(), pageRequest)).willReturn(scheduleStateList);
-        JobHealth health1 = service.getHealthInfo();
-        assertEquals(health1.getHealthyJobCount(),1);
+        assertEquals(service.getHealthInfo().getHealthyJobCount(), 1);
+
+    }
 
-        scheduleStateList.remove(0);
+    @Test
+    public void testGetHealthInfoWithUnhealthy() throws SchedulerException {
+        Scheduler scheduler = Mockito.mock(Scheduler.class);
+        given(factory.getObject()).willReturn(scheduler);
+        given(scheduler.getJobGroupNames()).willReturn(Arrays.asList("BA"));
+        JobKey jobKey = new JobKey("test");
+        Set<JobKey> jobKeySet = new HashSet<>();
+        jobKeySet.add(jobKey);
+        given(scheduler.getJobKeys(GroupMatcher.jobGroupEquals("BA"))).willReturn((jobKeySet));
+
+        Pageable pageRequest = new PageRequest(0, 1, Sort.Direction.DESC, "timestamp");
+        List<JobInstance> scheduleStateList = new ArrayList<>();
+        JobInstance jobInstance = newJobInstance();
         jobInstance.setState(LivySessionStates.State.error);
         scheduleStateList.add(jobInstance);
         given(jobInstanceRepo.findByGroupNameAndJobName(jobKey.getGroup(), jobKey.getName(), pageRequest)).willReturn(scheduleStateList);
-        JobHealth health2 = service.getHealthInfo();
-        assertEquals(health2.getHealthyJobCount(),0);
+        assertEquals(service.getHealthInfo().getHealthyJobCount(), 0);
     }
 
+    private Trigger newTriggerInstance(String name, String group, int internalInSeconds) {
+        return newTrigger().withIdentity(TriggerKey.triggerKey(name, group)).
+                withSchedule(SimpleScheduleBuilder.simpleSchedule()
+                        .withIntervalInSeconds(internalInSeconds)
+                        .repeatForever()).startAt(new Date()).build();
+    }
 
+    private GriffinException.GetJobsFailureException getTriggersOfJobExpectException(Scheduler scheduler, JobKey jobKey) {
+        GriffinException.GetJobsFailureException exception = null;
+        try {
+            given(scheduler.getTriggersOfJob(jobKey)).willThrow(new GriffinException.GetJobsFailureException());
+            service.getAliveJobs();
+        } catch (GriffinException.GetJobsFailureException e) {
+            exception = e;
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+        return exception;
+    }
+
+    private JobInstance newJobInstance() {
+        JobInstance jobInstance = new JobInstance();
+        jobInstance.setGroupName("BA");
+        jobInstance.setJobName("job1");
+        jobInstance.setSessionId(1);
+        jobInstance.setState(LivySessionStates.State.starting);
+        jobInstance.setAppId("app_id");
+        jobInstance.setTimestamp(System.currentTimeMillis());
+        return jobInstance;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java
index 66ebb59..8bc24bd 100644
--- a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java
+++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java
@@ -60,6 +60,7 @@ public class MeasureControllerTest {
     public void testGetAllMeasures() throws Exception {
         Measure measure = createATestMeasure("view_item_hourly", "ebay");
         given(service.getAllAliveMeasures()).willReturn(Arrays.asList(measure));
+
         mvc.perform(get("/measures").contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.[0].name", is("view_item_hourly")));
@@ -70,6 +71,7 @@ public class MeasureControllerTest {
     public void testGetMeasuresById() throws Exception {
         Measure measure = createATestMeasure("view_item_hourly", "ebay");
         given(service.getMeasureById(1L)).willReturn(measure);
+
         mvc.perform(get("/measure/1").contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.name", is("view_item_hourly")))
@@ -77,50 +79,70 @@ public class MeasureControllerTest {
     }
 
     @Test
-    public void testDeleteMeasuresById() throws Exception {
-        Measure measure = createATestMeasure("view_item_hourly", "ebay");
-        // RESOURCE_NOT_FOUND
+    public void testDeleteMeasuresByIdForSuccess() throws Exception {
+        given(service.deleteMeasureById(1L)).willReturn(GriffinOperationMessage.DELETE_MEASURE_BY_ID_SUCCESS);
+
+        mvc.perform(delete("/measure/1").contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.description", is("Delete Measures By Name Succeed")))
+                .andExpect(jsonPath("$.code", is(202)));
+    }
+
+    @Test
+    public void testDeleteMeasuresByIdForNotFound() throws Exception {
         given(service.deleteMeasureById(1L)).willReturn(GriffinOperationMessage.RESOURCE_NOT_FOUND);
+
         mvc.perform(delete("/measure/1").contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.description", is("Resource Not Found")))
                 .andExpect(jsonPath("$.code", is(400)));
+    }
+
+    @Test
+    public void testDeleteMeasuresByIdForFail() throws Exception {
+        given(service.deleteMeasureById(1L)).willReturn(GriffinOperationMessage.DELETE_MEASURE_BY_ID_FAIL);
 
-        // DELETE_MEASURE_BY_ID_SUCCESS
-        given(service.deleteMeasureById(1L)).willReturn(GriffinOperationMessage.DELETE_MEASURE_BY_ID_SUCCESS);
         mvc.perform(delete("/measure/1").contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.description", is("Delete Measures By Name Succeed")))
-                .andExpect(jsonPath("$.code", is(202)));
+                .andExpect(jsonPath("$.description", is("Delete Measures By Name Failed")))
+                .andExpect(jsonPath("$.code", is(402)));
     }
 
-
     @Test
-    public void testUpdateMeasure() throws Exception {
+    public void testUpdateMeasureForSuccess() throws Exception {
         Measure measure = createATestMeasure("view_item_hourly", "ebay");
-        ObjectMapper mapper = new ObjectMapper();
-        String measureJson = mapper.writeValueAsString(measure);
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
+        given(service.updateMeasure(measure)).willReturn(GriffinOperationMessage.UPDATE_MEASURE_SUCCESS);
+
+        mvc.perform(put("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
+                .andExpect(status().isOk())
+                .andExpect(jsonPath("$.description", is("Update Measure Succeed")))
+                .andExpect(jsonPath("$.code", is(204)));
+    }
 
-        // RESOURCE_NOT_FOUND
+    @Test
+    public void testUpdateMeasureForNotFound() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
         given(service.updateMeasure(measure)).willReturn(GriffinOperationMessage.RESOURCE_NOT_FOUND);
+
         mvc.perform(put("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.description", is("Resource Not Found")))
                 .andExpect(jsonPath("$.code", is(400)));
 
-        // UPDATE_MEASURE_FAIL
+    }
+
+    @Test
+    public void testUpdateMeasureForFail() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
         given(service.updateMeasure(measure)).willReturn(GriffinOperationMessage.UPDATE_MEASURE_FAIL);
+
         mvc.perform(put("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.description", is("Update Measure Failed")))
                 .andExpect(jsonPath("$.code", is(404)));
-
-        // UPDATE_MEASURE_SUCCESS
-        given(service.updateMeasure(measure)).willReturn(GriffinOperationMessage.UPDATE_MEASURE_SUCCESS);
-        mvc.perform(put("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
-                .andExpect(status().isOk())
-                .andExpect(jsonPath("$.description", is("Update Measure Succeed")))
-                .andExpect(jsonPath("$.code", is(204)));
     }
 
     @Test
@@ -140,32 +162,39 @@ public class MeasureControllerTest {
     }
 
     @Test
-    public void testCreateNewMeasure() throws Exception {
-        String measureName = "view_item_hourly";
-        String org = "ebay";
-        Measure measure = createATestMeasure(measureName, org);
-        ObjectMapper mapper = new ObjectMapper();
-        String measureJson = mapper.writeValueAsString(measure);
-        // CREATE_MEASURE_FAIL
-        given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_FAIL);
+    public void testCreateNewMeasureForSuccess() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
+        given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_SUCCESS);
+
         mvc.perform(post("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.description", is("Create Measure Failed")))
-                .andExpect(jsonPath("$.code", is(401)));
+                .andExpect(jsonPath("$.description", is("Create Measure Succeed")))
+                .andExpect(jsonPath("$.code", is(201)));
+    }
 
-        // CREATE_MEASURE_FAIL_DUPLICATE
+    @Test
+    public void testCreateNewMeasureForFailWithDuplicate() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
         given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_FAIL_DUPLICATE);
+
         mvc.perform(post("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.description", is("Create Measure Failed, duplicate records")))
                 .andExpect(jsonPath("$.code", is(410)));
+    }
+
+    @Test
+    public void testCreateNewMeasureForFailWithSaveException() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        String measureJson = new ObjectMapper().writeValueAsString(measure);
+        given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_FAIL);
 
-        // CREATE_MEASURE_SUCCESS
-        given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_SUCCESS);
         mvc.perform(post("/measure").contentType(MediaType.APPLICATION_JSON).content(measureJson))
                 .andExpect(status().isOk())
-                .andExpect(jsonPath("$.description", is("Create Measure Succeed")))
-                .andExpect(jsonPath("$.code", is(201)));
+                .andExpect(jsonPath("$.description", is("Create Measure Failed")))
+                .andExpect(jsonPath("$.code", is(401)));
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/measure/MeasureRepoTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureRepoTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureRepoTest.java
deleted file mode 100644
index 5f929f3..0000000
--- a/service/src/test/java/org/apache/griffin/core/measure/MeasureRepoTest.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.apache.griffin.core.measure;//package org.apache.griffin.core.measure;
-//
-//import org.apache.griffin.core.measure.entity.DataConnector;
-//import org.apache.griffin.core.measure.entity.EvaluateRule;
-//import org.apache.griffin.core.measure.entity.Measure;
-//import org.apache.griffin.core.measure.repo.DataConnectorRepo;
-//import org.apache.griffin.core.measure.repo.EvaluateRuleRepo;
-//import org.apache.griffin.core.measure.repo.MeasureRepo;
-//import org.codehaus.jackson.map.ObjectMapper;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
-//import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
-//import org.springframework.context.annotation.PropertySource;
-//import org.springframework.test.context.jdbc.Sql;
-//import org.springframework.test.context.junit4.SpringRunner;
-//import org.springframework.transaction.annotation.Propagation;
-//import org.springframework.transaction.annotation.Transactional;
-//
-//import java.io.IOException;
-//import java.util.HashMap;
-//import java.util.List;
-//
-//import static org.assertj.core.api.Assertions.assertThat;
-//
-//@RunWith(SpringRunner.class)
-//@PropertySource("classpath:application.properties")
-//@DataJpaTest
-////@Sql(value = {"classpath:Init_quartz.sql", "classpath:quartz-test.sql"})
-//@Sql("classpath:test.sql")
-//public class MeasureRepoTest {
-//
-//    private static final Logger LOGGER = LoggerFactory.getLogger(MeasureRepoTest.class);
-//
-//
-//    @Autowired
-//    private TestEntityManager testEntityManager;
-//
-//    @Autowired
-//    private MeasureRepo measureRepo;
-//    @Autowired
-//    private DataConnectorRepo dataConnectorRepo;
-//    @Autowired
-//    private EvaluateRuleRepo evaluateRuleRepo;
-//
-//    @Test
-//    public void testFindOrganizations() {
-//        Iterable<String> orgs = measureRepo.findOrganizations();
-//        System.out.println(orgs);
-//        for (String org : orgs) {
-//            assertThat(org).isEqualTo("eBay");
-//        }
-//
-//    }
-//
-//    @Test
-//    public void testFindNameByOrganization() {
-//        List<String> names = measureRepo.findNameByOrganization("eBay");
-//        assertThat(names.get(0)).isEqualTo("buy_rates_hourly");
-//        assertThat(names.get(1)).isEqualTo("griffin_aver");
-//    }
-//
-//    @Test
-//    public void testFindOrgByName() {
-//        assertThat(measureRepo.findOrgByName("buy_rates_hourly")).isEqualTo("eBay");
-//        assertThat(measureRepo.findOrgByName("griffin_aver")).isEqualTo("eBay");
-//    }
-//
-//   /* @Test
-//    @Transactional(propagation = Propagation.NOT_SUPPORTED)
-//    public void testUpdateMeasure() {
-//        HashMap<String, String> sourceMap = new HashMap<>();
-//        sourceMap.put("database", "griffin");
-//        sourceMap.put("table.name", "count");
-//        DataConnector source = new DataConnector(DataConnector.ConnectorType.HIVE, "1.3", sourceMap);
-//        HashMap<String, String> targetMap = new HashMap<>();
-//        targetMap.put("database", "default");
-//        targetMap.put("table.name", "avr_in");
-//        DataConnector target = null;
-//        try {
-//            target = new DataConnector(DataConnector.ConnectorType.HIVE, "1.4", new ObjectMapper().writeValueAsString(targetMap));
-//        } catch (IOException e) {
-//            LOGGER.error("Fail to convert map to string using ObjectMapper.");
-//        }
-//
-//        EvaluateRule rule = new EvaluateRule(0, "$source['uid'] == $target['url'] AND $source['uage'] == $target['createdts']");
-//        //save before flushing
-//        dataConnectorRepo.save(source);
-//        dataConnectorRepo.save(target);
-//        evaluateRuleRepo.save(rule);
-//        measureRepo.updateMeasure((long) 1, "new desc2", "Paypal", source, target, rule);
-//        for (Measure measure : measureRepo.findAll()) {
-//            if (measure.getId().equals((long) 1)) {
-//                assertThat(measure.getDescription()).isEqualTo("new desc2");
-//                assertThat(measure.getOrganization()).isEqualTo("Paypal");
-//                assertThat(measure.getSource()).isEqualTo(source);
-//                assertThat(measure.getTarget()).isEqualTo(target);
-//                assertThat(measure.getEvaluateRule()).isEqualTo(rule);
-//            }
-//        }
-//
-//    }*/
-//}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java
index bc6b2ae..8345a5a 100644
--- a/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java
+++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureServiceImplTest.java
@@ -76,14 +76,8 @@ public class MeasureServiceImplTest {
 
 
     @Test
-    public void testDeleteMeasuresById() throws Exception {
+    public void testDeleteMeasuresByIdForSuccess() throws Exception {
         Measure measure = createATestMeasure("view_item_hourly", "ebay");
-        // RESOURCE_NOT_FOUND
-        given(measureRepo.exists(1L)).willReturn(false);
-        GriffinOperationMessage message1 = service.deleteMeasureById(1L);
-        assertEquals(message1, GriffinOperationMessage.RESOURCE_NOT_FOUND);
-
-        //DELETE_MEASURE_BY_ID_SUCCESS
         given(measureRepo.exists(1L)).willReturn(true);
         given(measureRepo.findOne(1L)).willReturn(measure);
         doNothing().when(jobService).deleteJobsRelateToMeasure(measure);
@@ -93,27 +87,41 @@ public class MeasureServiceImplTest {
     }
 
     @Test
-    public void testCreateNewMeasure() throws Exception {
-        Measure measure = createATestMeasure("view_item_hourly", "ebay");
-        // CREATE_MEASURE_SUCCESS
+    public void testDeleteMeasuresByIdForNotFound() throws Exception {
+        given(measureRepo.exists(1L)).willReturn(false);
+        GriffinOperationMessage message = service.deleteMeasureById(1L);
+        assertEquals(message, GriffinOperationMessage.RESOURCE_NOT_FOUND);
+    }
+
+    @Test
+    public void testCreateNewMeasureForSuccess() throws Exception {
         String measureName = "view_item_hourly";
+        Measure measure = createATestMeasure(measureName, "ebay");
         given(measureRepo.findByNameAndDeleted(measureName, false)).willReturn(new LinkedList<>());
         given(measureRepo.save(measure)).willReturn(measure);
         GriffinOperationMessage message = service.createMeasure(measure);
         assertEquals(message, GriffinOperationMessage.CREATE_MEASURE_SUCCESS);
+    }
 
-        // CREATE_MEASURE_FAIL_DUPLICATE
+    @Test
+    public void testCreateNewMeasureForFailWithDuplicate() throws Exception {
+        String measureName = "view_item_hourly";
+        Measure measure = createATestMeasure(measureName, "ebay");
         LinkedList<Measure> list = new LinkedList<>();
         list.add(measure);
         given(measureRepo.findByNameAndDeleted(measureName, false)).willReturn(list);
-        GriffinOperationMessage message1 = service.createMeasure(measure);
-        assertEquals(message1, GriffinOperationMessage.CREATE_MEASURE_FAIL_DUPLICATE);
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, GriffinOperationMessage.CREATE_MEASURE_FAIL_DUPLICATE);
+    }
 
-        // CREATE_MEASURE_FAIL
+    @Test
+    public void testCreateNewMeasureForFailWithSaveException() throws Exception {
+        String measureName = "view_item_hourly";
+        Measure measure = createATestMeasure(measureName, "ebay");
         given(measureRepo.findByNameAndDeleted(measureName, false)).willReturn(new LinkedList<>());
         given(measureRepo.save(measure)).willReturn(null);
-        GriffinOperationMessage message2 = service.createMeasure(measure);
-        assertEquals(message2, GriffinOperationMessage.CREATE_MEASURE_FAIL);
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, GriffinOperationMessage.CREATE_MEASURE_FAIL);
     }
 
     @Test
@@ -127,19 +135,29 @@ public class MeasureServiceImplTest {
     }
 
     @Test
-    public void testUpdateMeasure() throws Exception {
+    public void testUpdateMeasureForSuccess() throws Exception {
         Measure measure = createATestMeasure("view_item_hourly", "ebay");
-        // RESOURCE_NOT_FOUND
-        given(measureRepo.exists(measure.getId())).willReturn(false);
-        GriffinOperationMessage message1 = service.updateMeasure(measure);
-        assertEquals(message1, GriffinOperationMessage.RESOURCE_NOT_FOUND);
-
-        //UPDATE_MEASURE_SUCCESS
         given(measureRepo.exists(measure.getId())).willReturn(true);
         given(measureRepo.save(measure)).willReturn(measure);
-        GriffinOperationMessage message2 = service.updateMeasure(measure);
-        assertEquals(message2, GriffinOperationMessage.UPDATE_MEASURE_SUCCESS);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, GriffinOperationMessage.UPDATE_MEASURE_SUCCESS);
     }
 
+    @Test
+    public void testUpdateMeasureForNotFound() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        given(measureRepo.exists(measure.getId())).willReturn(false);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, GriffinOperationMessage.RESOURCE_NOT_FOUND);
+    }
+
+    @Test
+    public void testUpdateMeasureForFailWithSaveException() throws Exception {
+        Measure measure = createATestMeasure("view_item_hourly", "ebay");
+        given(measureRepo.exists(measure.getId())).willReturn(true);
+        given(measureRepo.save(measure)).willThrow(Exception.class);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, GriffinOperationMessage.UPDATE_MEASURE_FAIL);
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/metastore/hive/HiveMetaStoreServiceImplTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/metastore/hive/HiveMetaStoreServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/metastore/hive/HiveMetaStoreServiceImplTest.java
index d732e34..07d4fc2 100644
--- a/service/src/test/java/org/apache/griffin/core/metastore/hive/HiveMetaStoreServiceImplTest.java
+++ b/service/src/test/java/org/apache/griffin/core/metastore/hive/HiveMetaStoreServiceImplTest.java
@@ -64,26 +64,30 @@ public class HiveMetaStoreServiceImplTest {
     }
 
     @Test
-    public void testGetAllDatabases() throws MetaException {
+    public void testGetAllDatabasesForNormalRun() throws MetaException {
         given(client.getAllDatabases()).willReturn(Arrays.asList("default"));
         assertEquals(service.getAllDatabases().iterator().hasNext(), true);
+    }
 
-        // MetaException
+    @Test
+    public void testGetAllDatabasesForMetaException() throws MetaException {
         given(client.getAllDatabases()).willThrow(MetaException.class);
         doNothing().when(client).reconnect();
         service.getAllDatabases();
         assertTrue(service.getAllDatabases() == null);
-
     }
 
 
     @Test
-    public void testGetAllTableNames() throws MetaException {
+    public void testGetAllTableNamesForNormalRun() throws MetaException {
         String dbName = "default";
         given(client.getAllTables(dbName)).willReturn(Arrays.asList(dbName));
         assertEquals(service.getAllTableNames(dbName).iterator().hasNext(), true);
+    }
 
-        // MetaException
+    @Test
+    public void testGetAllTableNamesForMetaException() throws MetaException {
+        String dbName = "default";
         given(client.getAllTables(dbName)).willThrow(MetaException.class);
         doNothing().when(client).reconnect();
         assertTrue(service.getAllTableNames(dbName) == null);
@@ -91,21 +95,24 @@ public class HiveMetaStoreServiceImplTest {
     }
 
     @Test
-    public void testGetAllTableByDBName() throws TException {
+    public void testGetAllTableByDBNameForNormalRun() throws TException {
         String useDbName = "default";
         String tableName = "table";
         given(client.getAllTables(useDbName)).willReturn(Arrays.asList(tableName));
         given(client.getTable(useDbName, tableName)).willReturn(new Table());
         assertEquals(service.getAllTable(useDbName).size(), 1);
+    }
 
-        // MetaException
+    @Test
+    public void testGetAllTableByDBNameForMetaException() throws TException {
+        String useDbName = "default";
         given(client.getAllTables(useDbName)).willThrow(MetaException.class);
         doNothing().when(client).reconnect();
         assertEquals(service.getAllTable(useDbName).size(), 0);
     }
 
     @Test
-    public void testGetAllTable() throws TException {
+    public void testGetAllTableForNormalRun() throws TException {
         String useDbName = "default";
         String tableName = "table";
         List<String> databases = Arrays.asList(useDbName);
@@ -113,31 +120,37 @@ public class HiveMetaStoreServiceImplTest {
         given(client.getAllTables(databases.iterator().next())).willReturn(Arrays.asList(tableName));
         given(client.getTable(useDbName, tableName)).willReturn(new Table());
         assertEquals(service.getAllTable().size(), 1);
+    }
 
-        //pls attention:do not change the position of the following two MetaException test
-        //because we use throw exception,so they are in order.
-        // MetaException1
+    @Test
+    public void testGetAllTableForMetaException1() throws TException {
+        String useDbName = "default";
+        List<String> databases = Arrays.asList(useDbName);
         given(client.getAllDatabases()).willReturn(databases);
         given(client.getAllTables(useDbName)).willThrow(MetaException.class);
         doNothing().when(client).reconnect();
         assertEquals(service.getAllTable().get(useDbName).size(), 0);
+    }
 
-        // MetaException2
+    @Test
+    public void testGetAllTableForMetaException2() throws TException {
         given(client.getAllDatabases()).willThrow(MetaException.class);
         doNothing().when(client).reconnect();
         assertEquals(service.getAllTable().size(), 0);
-
-
     }
 
     @Test
-    public void testGetTable() throws Exception {
+    public void testGetTableForNormalRun() throws Exception {
         String dbName = "default";
         String tableName = "tableName";
         given(client.getTable(dbName, tableName)).willReturn(new Table());
         assertTrue(service.getTable(dbName, tableName) != null);
+    }
 
-        //getTable throws Exception
+    @Test
+    public void testGetTableForException() throws Exception {
+        String dbName = "default";
+        String tableName = "tableName";
         given(client.getTable(dbName, tableName)).willThrow(Exception.class);
         doNothing().when(client).reconnect();
         assertTrue(service.getTable(dbName, tableName) == null);

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/460e2fd7/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java
----------------------------------------------------------------------
diff --git a/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java b/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java
index 111331a..c89670a 100644
--- a/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java
+++ b/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java
@@ -27,45 +27,50 @@ import org.junit.Test;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;
 
-/**
- * Created by xiangrchen on 7/27/17.
- */
 public class GriffinUtilTest {
 
     @Before
-    public void setup(){
+    public void setup() {
     }
 
     @Test
-    public void test_toJson(){
-        JobHealth jobHealth=new JobHealth(5,10);
-        String jobHealthStr= GriffinUtil.toJson(jobHealth);
-        assertEquals(jobHealthStr,"{\"healthyJobCount\":5,\"jobCount\":10}");
+    public void testToJson() {
+        JobHealth jobHealth = new JobHealth(5, 10);
+        String jobHealthStr = GriffinUtil.toJson(jobHealth);
+        assertEquals(jobHealthStr, "{\"healthyJobCount\":5,\"jobCount\":10}");
     }
 
     @Test
-    public void test_toEntity() throws IOException {
-        String str="{\"healthyJobCount\":5,\"jobCount\":10}";
-        JobHealth jobHealth= GriffinUtil.toEntity(str,JobHealth.class);
-        assertEquals(jobHealth.getJobCount(),10);
-        assertEquals(jobHealth.getHealthyJobCount(),5);
+    public void testToEntityWithParamClass() throws IOException {
+        String str = "{\"healthyJobCount\":5,\"jobCount\":10}";
+        JobHealth jobHealth = GriffinUtil.toEntity(str, JobHealth.class);
+        assertEquals(jobHealth.getJobCount(), 10);
+        assertEquals(jobHealth.getHealthyJobCount(), 5);
     }
 
     @Test
-    public void test_toEntity1() throws IOException {
-        String str="{\"aaa\":12, \"bbb\":13}";
-        TypeReference<HashMap<String,Integer>> type=new TypeReference<HashMap<String,Integer>>(){};
-        Map map= GriffinUtil.toEntity(str,type);
-        assertEquals(map.get("aaa"),12);
+    public void testToEntityWithParamTypeReference() throws IOException {
+        String str = "{\"aaa\":12, \"bbb\":13}";
+        TypeReference<HashMap<String, Integer>> type = new TypeReference<HashMap<String, Integer>>() {
+        };
+        Map map = GriffinUtil.toEntity(str, type);
+        assertEquals(map.get("aaa"), 12);
     }
 
     @Test
-    public void test_toJson2() throws IOException {
-//        LivySessionStateMap.State state=
-        System.out.println(GriffinOperationMessage.CREATE_JOB_FAIL);
+    public void testGetPropertiesForSuccess() {
+        Properties properties = GriffinUtil.getProperties("/quartz.properties");
+        assertEquals(properties.get("org.quartz.jobStore.isClustered"), "true");
+    }
+
+    @Test
+    public void testGetPropertiesForFailWithWrongPath() {
+        Properties properties = GriffinUtil.getProperties(".././quartz.properties");
+        assertEquals(properties, null);
     }
 
 }