Repository: incubator-griffin
Updated Branches:
  refs/heads/master 87e59a527 -> 71fcf93b9


http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgServiceImplTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgServiceImplTest.java
 
b/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgServiceImplTest.java
index 7eda50e..939c0da 100644
--- 
a/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgServiceImplTest.java
+++ 
b/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgServiceImplTest.java
@@ -1,98 +1,114 @@
-///*
-//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;
-//
-//
-//import org.apache.griffin.core.measure.entity.Measure;
-//import org.apache.griffin.core.measure.repo.MeasureRepo;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.mockito.InjectMocks;
-//import org.mockito.Mock;
-//import org.springframework.test.context.junit4.SpringRunner;
-//
-//import java.io.Serializable;
-//import java.util.*;
-//
-//import static 
org.apache.griffin.core.util.EntityHelper.createATestGriffinMeasure;
-//import static org.apache.griffin.core.util.EntityHelper.createJobDetailMap;
-//import static org.assertj.core.api.Assertions.assertThat;
-//import static org.mockito.BDDMockito.given;
-//import static org.mockito.Mockito.when;
-//
-//@RunWith(SpringRunner.class)
-//public class MeasureOrgServiceImplTest {
-//
-//    @InjectMocks
-//    private MeasureOrgServiceImpl service;
-//
-//    @Mock
-//    private MeasureRepo measureRepo;
-//
-//    @Test
-//    public void testGetOrgs() {
-//        String orgName = "orgName";
-//        
given(measureRepo.findOrganizations(false)).willReturn(Arrays.asList(orgName));
-//        List<String> orgs = service.getOrgs();
-//        assertThat(orgs.size()).isEqualTo(1);
-//        assertThat(orgs.get(0)).isEqualTo(orgName);
-//    }
-//
-//    @Test
-//    public void testGetMetricNameListByOrg() {
-//        String orgName = "orgName";
-//        String measureName = "measureName";
-//        given(measureRepo.findNameByOrganization(orgName, 
false)).willReturn(Arrays.asList(measureName));
-//        List<String> measureNames = service.getMetricNameListByOrg(orgName);
-//        assertThat(measureNames.size()).isEqualTo(1);
-//        assertThat(measureNames.get(0)).isEqualTo(measureName);
-//    }
-//
-//    @Test
-//    public void testGetMeasureNamesGroupByOrg() throws Exception {
-//        Measure measure = createATestGriffinMeasure("measure", "org");
-//        List<Measure> measures = new ArrayList<>();
-//        measures.add(measure);
-//
-//        when(measureRepo.findByDeleted(false)).thenReturn(measures);
-//
-//        Map<String, List<String>> map = service.getMeasureNamesGroupByOrg();
-//        assertThat(map.size()).isEqualTo(1);
-//
-//    }
-//
-//    @Test
-//    public void testMeasureWithJobDetailsGroupByOrg() throws Exception {
-//        Measure measure = createATestGriffinMeasure("measure", "org");
-//        measure.setId(1L);
-//        
given(measureRepo.findByDeleted(false)).willReturn(Arrays.asList(measure));
-//
-//        Map<String, Object> jobDetail = createJobDetailMap();
-//        List<Map<String, Object>> jobList = Arrays.asList(jobDetail);
-//        Map<String, List<Map<String, Object>>> measuresById = new 
HashMap<>();
-//        measuresById.put("1", jobList);
-//
-//        Map<String, Map<String, List<Map<String, Object>>>> map = 
service.getMeasureWithJobDetailsGroupByOrg(measuresById);
-//        assertThat(map.size()).isEqualTo(1);
-//        assertThat(map).containsKey("org");
-//        assertThat(map.get("org").get("measure")).isEqualTo(jobList);
-//    }
-//
-//}
\ No newline at end of file
+/*
+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;
+
+
+import org.apache.griffin.core.measure.entity.GriffinMeasure;
+import org.apache.griffin.core.measure.repo.GriffinMeasureRepo;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure;
+import static org.apache.griffin.core.util.EntityHelper.createJobDetailMap;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.when;
+
+@RunWith(SpringRunner.class)
+public class MeasureOrgServiceImplTest {
+
+    @InjectMocks
+    private MeasureOrgServiceImpl service;
+
+    @Mock
+    private GriffinMeasureRepo measureRepo;
+
+    @Test
+    public void testGetOrgs() {
+        String orgName = "orgName";
+        
given(measureRepo.findOrganizations(false)).willReturn(Arrays.asList(orgName));
+        List<String> orgs = service.getOrgs();
+        assertThat(orgs.size()).isEqualTo(1);
+        assertThat(orgs.get(0)).isEqualTo(orgName);
+    }
+
+    @Test
+    public void testGetMetricNameListByOrg() {
+        String orgName = "orgName";
+        String measureName = "measureName";
+        given(measureRepo.findNameByOrganization(orgName, 
false)).willReturn(Arrays.asList(measureName));
+        List<String> measureNames = service.getMetricNameListByOrg(orgName);
+        assertThat(measureNames.size()).isEqualTo(1);
+        assertThat(measureNames.get(0)).isEqualTo(measureName);
+    }
+
+    @Test
+    public void testGetMeasureNamesGroupByOrg() throws Exception {
+        GriffinMeasure measure = createGriffinMeasure("measure");
+        
when(measureRepo.findByDeleted(false)).thenReturn(Arrays.asList(measure));
+        Map<String, List<String>> map = service.getMeasureNamesGroupByOrg();
+        assertThat(map.size()).isEqualTo(1);
+    }
+
+    @Test
+    public void testGetMeasureNamesGroupByOrgWithNull() throws Exception {
+        when(measureRepo.findByDeleted(false)).thenReturn(null);
+        Map<String, List<String>> map = service.getMeasureNamesGroupByOrg();
+        assert map == null;
+    }
+
+    @Test
+    public void testGetMeasureWithJobDetailsGroupByOrgForSuccess() throws 
Exception {
+        String measureName = "measureName";
+        String measureId = "1";
+        GriffinMeasure measure = createGriffinMeasure(measureName);
+        measure.setOrganization("org");
+        measure.setId(Long.valueOf(measureId));
+        
given(measureRepo.findByDeleted(false)).willReturn(Arrays.asList(measure));
+
+        Map<String, Object> jobDetail = createJobDetailMap();
+
+        List<Map<String, Object>> jobList = Arrays.asList(jobDetail);
+        Map<String, List<Map<String, Object>>> measuresById = new HashMap<>();
+        measuresById.put(measureId, jobList);
+
+        Map<String, Map<String, List<Map<String, Object>>>> map = 
service.getMeasureWithJobDetailsGroupByOrg(measuresById);
+        assertThat(map.size()).isEqualTo(1);
+        assertThat(map).containsKey("org");
+        assertThat(map.get("org").get(measureName)).isEqualTo(jobList);
+    }
+
+    @Test
+    public void testGetMeasureWithJobDetailsGroupByOrgForFailure() throws 
Exception {
+        Map detail = new HashMap();
+        given(measureRepo.findByDeleted(false)).willReturn(null);
+        Map map = service.getMeasureWithJobDetailsGroupByOrg(detail);
+        assert map == null;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/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 c49ee82..857d35f 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
@@ -21,155 +21,309 @@ package org.apache.griffin.core.measure;
 
 
 import org.apache.griffin.core.job.JobServiceImpl;
+import org.apache.griffin.core.job.repo.VirtualJobRepo;
+import org.apache.griffin.core.measure.entity.DataConnector;
+import org.apache.griffin.core.measure.entity.ExternalMeasure;
+import org.apache.griffin.core.measure.entity.GriffinMeasure;
 import org.apache.griffin.core.measure.entity.Measure;
 import org.apache.griffin.core.measure.repo.DataConnectorRepo;
+import org.apache.griffin.core.measure.repo.ExternalMeasureRepo;
+import org.apache.griffin.core.measure.repo.GriffinMeasureRepo;
 import org.apache.griffin.core.measure.repo.MeasureRepo;
 import org.apache.griffin.core.util.GriffinOperationMessage;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
+import org.mockito.Matchers;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.context.annotation.Bean;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
-import static 
org.apache.griffin.core.util.EntityHelper.createATestGriffinMeasure;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.apache.griffin.core.util.EntityHelper.*;
+import static org.apache.griffin.core.util.GriffinOperationMessage.*;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.BDDMockito.given;
 
 @RunWith(SpringRunner.class)
 public class MeasureServiceImplTest {
 
+    @TestConfiguration
+    public static class MeasureServiceConf {
+        @Bean
+        public MeasureServiceImpl measureService() {
+            return new MeasureServiceImpl();
+        }
 
-    @InjectMocks
+        @Bean(name = "griffinOperation")
+        public MeasureOperation griffinOperation() {
+            return new GriffinMeasureOperationImpl();
+        }
+
+        @Bean(name = "externalOperation")
+        public MeasureOperation externalOperation() {
+            return new ExternalMeasureOperationImpl();
+        }
+    }
+
+    @Autowired
     private MeasureServiceImpl service;
-    @Mock
-    private MeasureRepo measureRepo;
-    @Mock
+
+    @MockBean
+    private ExternalMeasureRepo externalMeasureRepo;
+
+    @MockBean
+    private GriffinMeasureRepo griffinMeasureRepo;
+
+    @MockBean
+    private MeasureRepo<Measure> measureRepo;
+
+    @MockBean
     private JobServiceImpl jobService;
 
-    @Mock
+    @MockBean
     private DataConnectorRepo dataConnectorRepo;
 
+    @MockBean
+    private VirtualJobRepo jobRepo;
+
     @Before
     public void setup() {
     }
 
     @Test
     public void testGetAllMeasures() throws Exception {
-        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
+        Measure measure = createGriffinMeasure("view_item_hourly");
         
given(measureRepo.findByDeleted(false)).willReturn(Arrays.asList(measure));
-        List<Measure> measures = (List<Measure>) service.getAllAliveMeasures();
-        assertThat(measures.size()).isEqualTo(1);
-        assertThat(measures.get(0).getName()).isEqualTo("view_item_hourly");
+        List<Measure> measures = service.getAllAliveMeasures();
+        assertEquals(measures.size(), 1);
+        assertEquals(measures.get(0).getName(), "view_item_hourly");
     }
 
     @Test
     public void testGetMeasuresById() throws Exception {
-        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
+        Measure measure = createGriffinMeasure("view_item_hourly");
         given(measureRepo.findByIdAndDeleted(1L, false)).willReturn(measure);
         Measure m = service.getMeasureById(1);
         assertEquals(m.getName(), measure.getName());
     }
 
+    @Test
+    public void testGetAliveMeasuresByOwner() throws Exception {
+        String owner = "test";
+        Measure measure = createGriffinMeasure("view_item_hourly");
+        given(measureRepo.findByOwnerAndDeleted(owner, 
false)).willReturn(Arrays.asList(measure));
+        List<Measure> measures = service.getAliveMeasuresByOwner(owner);
+        assertEquals(measures.get(0).getName(), measure.getName());
+    }
+
+
+    @Test
+    public void testDeleteMeasuresByIdForGriffinSuccess() throws Exception {
+        GriffinMeasure measure = createGriffinMeasure("view_item_hourly");
+        measure.setId(1L);
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(jobService.deleteJobsRelateToMeasure(measure.getId())).willReturn(true);
+        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
+        assertEquals(message, DELETE_MEASURE_BY_ID_SUCCESS);
+    }
+
+    @Test
+    public void testDeleteMeasuresByIdForGriffinFailureWithPause() throws 
Exception {
+        GriffinMeasure measure = createGriffinMeasure("view_item_hourly");
+        measure.setId(1L);
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(jobService.deleteJobsRelateToMeasure(measure.getId())).willReturn(false);
+        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
+        assertEquals(message, DELETE_MEASURE_BY_ID_FAIL);
+    }
+
+    @Test
+    public void testDeleteMeasuresByIdForGriffinFailureWithException() throws 
Exception {
+        GriffinMeasure measure = createGriffinMeasure("view_item_hourly");
+        measure.setId(1L);
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(jobService.deleteJobsRelateToMeasure(measure.getId())).willReturn(true);
+        
given(measureRepo.save(Matchers.any(Measure.class))).willThrow(Exception.class);
+        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
+        assertEquals(message, DELETE_MEASURE_BY_ID_FAIL);
+    }
+
+    @Test
+    public void testDeleteMeasuresByIdForExternalSuccess() throws Exception {
+        ExternalMeasure measure = createExternalMeasure("externalMeasure");
+        measure.setId(1L);
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
+        assertEquals(message, DELETE_MEASURE_BY_ID_SUCCESS);
+    }
 
-//    @Test
-//    public void testDeleteMeasuresByIdForSuccess() throws Exception {
-//        GriffinMeasure measure = 
createATestGriffinMeasure("view_item_hourly", "test");
-//        
given(measureRepo.findByIdAndDeleted(measure.getId(),false)).willReturn(measure);
-//        
given(jobService.deleteJobsRelateToMeasure(measure.getId())).willReturn(true);
-//        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
-//        assertEquals(message, 
GriffinOperationMessage.DELETE_MEASURE_BY_ID_SUCCESS);
-//    }
+    @Test
+    public void testDeleteMeasuresByIdForExternalFailureWithException() throws 
Exception {
+        ExternalMeasure measure = createExternalMeasure("externalMeasure");
+        measure.setId(1L);
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(externalMeasureRepo.save(Matchers.any(ExternalMeasure.class))).willThrow(Exception.class);
+        GriffinOperationMessage message = 
service.deleteMeasureById(measure.getId());
+        assertEquals(message, DELETE_MEASURE_BY_ID_FAIL);
+    }
 
     @Test
-    public void testDeleteMeasuresByIdForNotFound() throws Exception {
-        given(measureRepo.exists(1L)).willReturn(false);
+    public void testDeleteMeasuresByIdForFailureWithNotFound() throws 
Exception {
+        given(measureRepo.findByIdAndDeleted(1L, false)).willReturn(null);
         GriffinOperationMessage message = service.deleteMeasureById(1L);
-        assertEquals(message, GriffinOperationMessage.RESOURCE_NOT_FOUND);
-    }
-
-//    @Test
-//    public void testCreateNewMeasureForSuccess() throws Exception {
-//        String measureName = "view_item_hourly";
-//        Measure measure = createATestGriffinMeasure(measureName, "test");
-//        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);
-//    }
-
-//    @Test
-//    public void testCreateNewMeasureForFailureWithConnectorNameRepeat() 
throws Exception {
-//        String measureName = "view_item_hourly";
-//        Measure measure = createATestGriffinMeasure(measureName, "test");
-//        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new LinkedList<>());
-//        DataConnector dc = new DataConnector("name", "", "", "");
-//        
given(dataConnectorRepo.findByConnectorNames(Matchers.any())).willReturn(Arrays.asList(dc));
-//        given(measureRepo.save(measure)).willReturn(measure);
-//        GriffinOperationMessage message = service.createMeasure(measure);
-//        assertEquals(message, GriffinOperationMessage.CREATE_MEASURE_FAIL);
-//    }
-
-    @Test
-    public void testCreateNewMeasureForFailWithMeasureDuplicate() throws 
Exception {
+        assertEquals(message, RESOURCE_NOT_FOUND);
+    }
+
+    @Test
+    public void testCreateMeasureForGriffinSuccess() throws Exception {
         String measureName = "view_item_hourly";
-        Measure measure = createATestGriffinMeasure(measureName, "test");
-        LinkedList<Measure> list = new LinkedList<>();
-        list.add(measure);
-        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(list);
+        GriffinMeasure measure = createGriffinMeasure(measureName);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new ArrayList<>());
         GriffinOperationMessage message = service.createMeasure(measure);
-        assertEquals(message, 
GriffinOperationMessage.CREATE_MEASURE_FAIL_DUPLICATE);
+        assertEquals(message, CREATE_MEASURE_SUCCESS);
     }
 
-//    @Test
-//    public void testCreateNewMeasureForFailWithSaveException() throws 
Exception {
-//        String measureName = "view_item_hourly";
-//        Measure measure = createATestGriffinMeasure(measureName, "test");
-//        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new LinkedList<>());
-//        given(measureRepo.save(measure)).willReturn(null);
-//        GriffinOperationMessage message = service.createMeasure(measure);
-//        assertEquals(message, GriffinOperationMessage.CREATE_MEASURE_FAIL);
-//    }
+    @Test
+    public void testCreateMeasureForGriffinFailureWithConnectorExist() throws 
Exception {
+        String measureName = "view_item_hourly";
+        GriffinMeasure measure = createGriffinMeasure(measureName);
+        DataConnector dc = new DataConnector("source_name", "1h", "1.2", null);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new LinkedList<>());
+        
given(dataConnectorRepo.findByConnectorNames(Arrays.asList("source_name", 
"target_name"))).willReturn(Arrays.asList(dc));
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL);
+    }
 
     @Test
-    public void testGetAllMeasureByOwner() throws Exception {
-        String owner = "test";
-        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
-        measure.setId(1L);
-        given(measureRepo.findByOwnerAndDeleted(owner, 
false)).willReturn(Arrays.asList(measure));
-        List<Measure> list = service.getAliveMeasuresByOwner(owner);
-        assertEquals(list.get(0).getName(), measure.getName());
+    public void testCreateMeasureForGriffinFailureWithConnectorNull() throws 
Exception {
+        String measureName = "view_item_hourly";
+        DataConnector dcSource = createDataConnector(null, "default", 
"test_data_src", "dt=#YYYYMMdd# AND hour=#HH#");
+        DataConnector dcTarget = createDataConnector(null, "default", 
"test_data_tgt", "dt=#YYYYMMdd# AND hour=#HH#");
+        GriffinMeasure measure = createGriffinMeasure(measureName, dcSource, 
dcTarget);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new LinkedList<>());
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testCreateMeasureForGriffinFailureWithException() throws 
Exception {
+        String measureName = "view_item_hourly";
+        GriffinMeasure measure = createGriffinMeasure(measureName);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new ArrayList<>());
+        
given(measureRepo.save(Matchers.any(Measure.class))).willThrow(Exception.class);
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testCreateMeasureForExternalSuccess() throws Exception {
+        String measureName = "view_item_hourly";
+        ExternalMeasure measure = createExternalMeasure(measureName);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new ArrayList<>());
+        given(externalMeasureRepo.save(measure)).willReturn(measure);
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_SUCCESS);
+    }
+
+    @Test
+    public void testCreateMeasureForExternalFailureWithBlank() throws 
Exception {
+        String measureName = "view_item_hourly";
+        ExternalMeasure measure = createExternalMeasure(measureName);
+        measure.setMetricName("  ");
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new ArrayList<>());
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testCreateMeasureForExternalFailureWithException() throws 
Exception {
+        String measureName = "view_item_hourly";
+        ExternalMeasure measure = createExternalMeasure(measureName);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(new ArrayList<>());
+        given(externalMeasureRepo.save(measure)).willReturn(measure);
+        
given(externalMeasureRepo.save(Matchers.any(ExternalMeasure.class))).willThrow(Exception.class);
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testCreateMeasureForFailureWithRepeat() throws Exception {
+        String measureName = "view_item_hourly";
+        GriffinMeasure measure = createGriffinMeasure(measureName);
+        given(measureRepo.findByNameAndDeleted(measureName, 
false)).willReturn(Arrays.asList(measure));
+        GriffinOperationMessage message = service.createMeasure(measure);
+        assertEquals(message, CREATE_MEASURE_FAIL_DUPLICATE);
     }
 
-//    @Test
-//    public void testUpdateMeasureForSuccess() throws Exception {
-//        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
-//        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(new GriffinMeasure());
-//        given(measureRepo.save(measure)).willReturn(measure);
-//        GriffinOperationMessage message = service.updateMeasure(measure);
-//        assertEquals(message, 
GriffinOperationMessage.UPDATE_MEASURE_SUCCESS);
-//    }
 
     @Test
-    public void testUpdateMeasureForNotFound() throws Exception {
-        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
+    public void testUpdateMeasureForGriffinSuccess() throws Exception {
+        Measure measure = createGriffinMeasure("view_item_hourly");
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, UPDATE_MEASURE_SUCCESS);
+    }
+
+    @Test
+    public void testUpdateMeasureForGriffinFailureWithDiffType() throws 
Exception {
+        Measure griffinMeasure = createGriffinMeasure("view_item_hourly");
+        Measure externalMeasure = createExternalMeasure("externalName");
+        given(measureRepo.findByIdAndDeleted(griffinMeasure.getId(), 
false)).willReturn(externalMeasure);
+        GriffinOperationMessage message = 
service.updateMeasure(griffinMeasure);
+        assertEquals(message, UPDATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testUpdateMeasureForGriffinFailureWithNotFound() throws 
Exception {
+        Measure measure = createGriffinMeasure("view_item_hourly");
         given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(null);
         GriffinOperationMessage message = service.updateMeasure(measure);
-        assertEquals(message, GriffinOperationMessage.RESOURCE_NOT_FOUND);
+        assertEquals(message, RESOURCE_NOT_FOUND);
+    }
+
+    @Test
+    public void testUpdateMeasureForGriffinFailureWithException() throws 
Exception {
+        Measure measure = createGriffinMeasure("view_item_hourly");
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(measureRepo.save(Matchers.any(Measure.class))).willThrow(Exception.class);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, UPDATE_MEASURE_FAIL);
     }
 
-//    @Test
-//    public void testUpdateMeasureForFailWithSaveException() throws Exception 
{
-//        Measure measure = createATestGriffinMeasure("view_item_hourly", 
"test");
-//        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(new GriffinMeasure());
-//        given(measureRepo.save(measure)).willThrow(Exception.class);
-//        GriffinOperationMessage message = service.updateMeasure(measure);
-//        assertEquals(message, GriffinOperationMessage.UPDATE_MEASURE_FAIL);
-//    }
+    @Test
+    public void testUpdateMeasureForExternalSuccess() throws Exception {
+        ExternalMeasure measure = 
createExternalMeasure("external_view_item_hourly");
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(externalMeasureRepo.findOne(measure.getId())).willReturn(measure);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, UPDATE_MEASURE_SUCCESS);
+    }
+
+    @Test
+    public void testUpdateMeasureForExternalFailureWithBlank() throws 
Exception {
+        String measureName = "view_item_hourly";
+        ExternalMeasure measure = createExternalMeasure(measureName);
+        measure.setMetricName("  ");
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        GriffinOperationMessage message = service.updateMeasure(measure);
+        assertEquals(message, UPDATE_MEASURE_FAIL);
+    }
+
+    @Test
+    public void testUpdateMeasureForExternalFailWithException() throws 
Exception {
+        ExternalMeasure measure = 
createExternalMeasure("external_view_item_hourly");
+        given(measureRepo.findByIdAndDeleted(measure.getId(), 
false)).willReturn(measure);
+        
given(externalMeasureRepo.findOne(measure.getId())).willReturn(measure);
+        
given(externalMeasureRepo.save(Matchers.any(ExternalMeasure.class))).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/71fcf93b/service/src/test/java/org/apache/griffin/core/measure/repo/DataConnectorRepoTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/measure/repo/DataConnectorRepoTest.java
 
b/service/src/test/java/org/apache/griffin/core/measure/repo/DataConnectorRepoTest.java
new file mode 100644
index 0000000..78ac6a2
--- /dev/null
+++ 
b/service/src/test/java/org/apache/griffin/core/measure/repo/DataConnectorRepoTest.java
@@ -0,0 +1,80 @@
+/*
+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.DataConnector;
+import org.apache.griffin.core.measure.entity.Measure;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.apache.griffin.core.util.EntityHelper.createDataConnector;
+import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure;
+import static org.junit.Assert.*;
+
+@RunWith(SpringRunner.class)
+@DataJpaTest
+public class DataConnectorRepoTest {
+
+    @Autowired
+    private TestEntityManager entityManager;
+
+    @Autowired
+    private DataConnectorRepo dcRepo;
+
+    @Before
+    public void setup() throws Exception {
+        entityManager.clear();
+        entityManager.flush();
+        setEntityManager();
+    }
+
+    @Test
+    public void testFindByConnectorNames() throws Exception {
+        List<DataConnector> connectors = 
dcRepo.findByConnectorNames(Arrays.asList("name1", "name2"));
+        assertEquals(connectors.size(),2);
+    }
+
+    @Test
+    public void testFindByConnectorNamesWithNull() throws Exception {
+        List<DataConnector> connectors = dcRepo.findByConnectorNames(null);
+        assertEquals(connectors.size(),0);
+    }
+
+    public void setEntityManager() throws Exception {
+        DataConnector dc1 = 
createDataConnector("name1","database1","table1","/dt=#YYYYMM#");
+
+        entityManager.persistAndFlush(dc1);
+
+        DataConnector dc2 = 
createDataConnector("name2","database2","table2","/dt=#YYYYMM#");
+        entityManager.persistAndFlush(dc2);
+
+        DataConnector dc3 = 
createDataConnector("name3","database3","table3","/dt=#YYYYMM#");
+        entityManager.persistAndFlush(dc3);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/measure/repo/MeasureRepoTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/measure/repo/MeasureRepoTest.java
 
b/service/src/test/java/org/apache/griffin/core/measure/repo/MeasureRepoTest.java
index c7132e6..3f66cdf 100644
--- 
a/service/src/test/java/org/apache/griffin/core/measure/repo/MeasureRepoTest.java
+++ 
b/service/src/test/java/org/apache/griffin/core/measure/repo/MeasureRepoTest.java
@@ -1,85 +1,104 @@
-///*
-//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.Measure;
-//import org.junit.Before;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//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.test.context.junit4.SpringRunner;
-//
-//import java.util.List;
-//
-//import static 
org.apache.griffin.core.util.EntityHelper.createATestGriffinMeasure;
-//import static org.assertj.core.api.Assertions.assertThat;
-//
-//@RunWith(SpringRunner.class)
-//@DataJpaTest
-//public class MeasureRepoTest {
-//
-//    @Autowired
-//    private TestEntityManager entityManager;
-//
-//    @Autowired
-//    private MeasureRepo measureRepo;
-//
-//    @Before
-//    public void setup() throws Exception {
-//        entityManager.clear();
-//        entityManager.flush();
-//        setEntityManager();
-//    }
-//
-//    @Test
-//    public void testFindAllOrganizations() {
-//        List<String> orgs = measureRepo.findOrganizations(false);
-//        assertThat(orgs.size()).isEqualTo(3);
-//    }
-//
-//
-//    @Test
-//    public void testFindNameByOrganization() {
-//        List<String> orgs = measureRepo.findNameByOrganization("org1",false);
-//        assertThat(orgs.size()).isEqualTo(1);
-//        assertThat(orgs.get(0)).isEqualToIgnoringCase("m1");
-//
-//    }
-//
-//    @Test
-//    public void testFindOrgByName() {
-//        String org = measureRepo.findOrgByName("m2");
-//        assertThat(org).isEqualTo("org2");
-//    }
-//
-//
-//    public void setEntityManager() throws Exception {
-//        Measure measure = createATestGriffinMeasure("m1", "org1");
-//        entityManager.persistAndFlush(measure);
-//
-//        Measure measure2 = createATestGriffinMeasure("m2", "org2");
-//        entityManager.persistAndFlush(measure2);
-//
-//        Measure measure3 = createATestGriffinMeasure("m3", "org3");
-//        entityManager.persistAndFlush(measure3);
-//    }
-//}
+/*
+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.Measure;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure;
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@DataJpaTest
+public class MeasureRepoTest {
+
+    @Autowired
+    private TestEntityManager entityManager;
+
+    @Autowired
+    private MeasureRepo measureRepo;
+
+    @Before
+    public void setup() throws Exception {
+        entityManager.clear();
+        entityManager.flush();
+        setEntityManager();
+    }
+
+    @Test
+    public void testFindByNameAndDeleted() {
+        String name = "m1";
+        List<Measure> measures = measureRepo.findByNameAndDeleted(name, false);
+        assertThat(measures.get(0).getName()).isEqualTo(name);
+    }
+
+    @Test
+    public void testFindByDeleted() {
+        List<Measure> measures = measureRepo.findByDeleted(false);
+        assertThat(measures.size()).isEqualTo(3);
+    }
+
+    @Test
+    public void testFindByOwnerAndDeleted() {
+        List<Measure> measures = measureRepo.findByOwnerAndDeleted("test", 
false);
+        assertThat(measures.size()).isEqualTo(2);
+    }
+
+    @Test
+    public void testFindByIdAndDeleted() {
+        Measure measure = measureRepo.findByIdAndDeleted(1L, true);
+        assertThat(measure).isNull();
+    }
+
+    @Test
+    public void testFindOrganizations() {
+        List<String> organizations = measureRepo.findOrganizations(false);
+        assertThat(organizations.size()).isEqualTo(3);
+    }
+
+    @Test
+    public void testFindNameByOrganization() {
+        List<String> names = measureRepo.findNameByOrganization("org1", false);
+        assertThat(names.size()).isEqualTo(1);
+    }
+
+    public void setEntityManager() throws Exception {
+        Measure measure1 = createGriffinMeasure("m1");
+        measure1.setOrganization("org1");
+        entityManager.persistAndFlush(measure1);
+
+        Measure measure2 = createGriffinMeasure("m2");
+        measure2.setOrganization("org2");
+        entityManager.persistAndFlush(measure2);
+
+        Measure measure3 = createGriffinMeasure("m3");
+        measure3.setOrganization("org3");
+        measure3.setOwner("owner");
+        entityManager.persistAndFlush(measure3);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/util/EntityHelper.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/util/EntityHelper.java 
b/service/src/test/java/org/apache/griffin/core/util/EntityHelper.java
index 627325c..1805608 100644
--- a/service/src/test/java/org/apache/griffin/core/util/EntityHelper.java
+++ b/service/src/test/java/org/apache/griffin/core/util/EntityHelper.java
@@ -20,29 +20,39 @@ under the License.
 package org.apache.griffin.core.util;
 
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.apache.griffin.core.job.entity.*;
 import org.apache.griffin.core.measure.entity.*;
-import org.codehaus.jackson.map.ObjectMapper;
 import org.quartz.JobDataMap;
-import org.quartz.Trigger;
+import org.quartz.JobKey;
+import org.quartz.SimpleTrigger;
 import org.quartz.impl.JobDetailImpl;
+import org.quartz.impl.triggers.SimpleTriggerImpl;
 
-import java.io.Serializable;
+import java.io.IOException;
 import java.util.*;
 
+import static org.apache.griffin.core.job.JobInstance.*;
+import static org.apache.griffin.core.job.JobServiceImpl.GRIFFIN_JOB_ID;
+import static org.apache.griffin.core.job.JobServiceImpl.JOB_SCHEDULE_ID;
+import static org.apache.hadoop.mapreduce.MRJobConfig.JOB_NAME;
+
 public class EntityHelper {
-    public static GriffinMeasure createATestGriffinMeasure(String name, String 
org) throws Exception {
-        HashMap<String, String> configMap1 = new HashMap<>();
-        configMap1.put("database", "default");
-        configMap1.put("table.name", "test_data_src");
-        HashMap<String, String> configMap2 = new HashMap<>();
-        configMap2.put("database", "default");
-        configMap2.put("table.name", "test_data_tgt");
-        String configJson1 = new ObjectMapper().writeValueAsString(configMap1);
-        String configJson2 = new ObjectMapper().writeValueAsString(configMap2);
-
-        DataSource dataSource = new DataSource("source", Arrays.asList(new 
DataConnector("source_name", "HIVE", "1.2", configJson1)));
-        DataSource targetSource = new DataSource("target", Arrays.asList(new 
DataConnector("target-name", "HIVE", "1.2", configJson2)));
+    public static GriffinMeasure createGriffinMeasure(String name) throws 
Exception {
+        DataConnector dcSource = createDataConnector("source_name", "default", 
"test_data_src", "dt=#YYYYMMdd# AND hour=#HH#");
+        DataConnector dcTarget = createDataConnector("target_name", "default", 
"test_data_tgt", "dt=#YYYYMMdd# AND hour=#HH#");
+        return createGriffinMeasure(name, dcSource, dcTarget);
+    }
+
+    public static GriffinMeasure createGriffinMeasure(String name, 
SegmentPredicate srcPredicate, SegmentPredicate tgtPredicate) throws Exception {
+        DataConnector dcSource = createDataConnector("source_name", "default", 
"test_data_src", "dt=#YYYYMMdd# AND hour=#HH#", srcPredicate);
+        DataConnector dcTarget = createDataConnector("target_name", "default", 
"test_data_tgt", "dt=#YYYYMMdd# AND hour=#HH#", tgtPredicate);
+        return createGriffinMeasure(name, dcSource, dcTarget);
+    }
 
+    public static GriffinMeasure createGriffinMeasure(String name, 
DataConnector dcSource, DataConnector dcTarget) throws Exception {
+        DataSource dataSource = new DataSource("source", 
Arrays.asList(dcSource));
+        DataSource targetSource = new DataSource("target", 
Arrays.asList(dcTarget));
         List<DataSource> dataSources = new ArrayList<>();
         dataSources.add(dataSource);
         dataSources.add(targetSource);
@@ -51,39 +61,112 @@ public class EntityHelper {
         map.put("detail", "detail info");
         Rule rule = new Rule("griffin-dsl", "accuracy", rules, map);
         EvaluateRule evaluateRule = new EvaluateRule(Arrays.asList(rule));
-        return new GriffinMeasure(1L,name, "description", org, "batch", 
"test", dataSources, evaluateRule);
+        return new GriffinMeasure(name, "test", dataSources, evaluateRule);
+    }
+
+    public static DataConnector createDataConnector(String name, String 
database, String table, String where) throws IOException {
+        HashMap<String, String> config = new HashMap<>();
+        config.put("database", database);
+        config.put("table.name", table);
+        config.put("where", where);
+        return new DataConnector(name, "1h", config, null);
+    }
+
+    public static DataConnector createDataConnector(String name, String 
database, String table, String where, SegmentPredicate predicate) throws 
IOException {
+        HashMap<String, String> config = new HashMap<>();
+        config.put("database", database);
+        config.put("table.name", table);
+        config.put("where", where);
+        return new DataConnector(name, "1h", config, Arrays.asList(predicate));
     }
 
-    public static JobDetailImpl createJobDetail() {
+    public static ExternalMeasure createExternalMeasure(String name) {
+        return new ExternalMeasure(name, "description", "org", "test", 
"metricName", new VirtualJob());
+    }
+
+    public static JobSchedule createJobSchedule() throws 
JsonProcessingException {
+        return createJobSchedule("jobName");
+    }
+
+    public static JobSchedule createJobSchedule(String jobName) throws 
JsonProcessingException {
+        JobDataSegment segment1 = createJobDataSegment("source_name", true);
+        JobDataSegment segment2 = createJobDataSegment("target_name", false);
+        List<JobDataSegment> segments = new ArrayList<>();
+        segments.add(segment1);
+        segments.add(segment2);
+        return new JobSchedule(1L, jobName, "0 0/4 * * * ?", "GMT+8:00", 
segments);
+    }
+
+    public static JobSchedule createJobSchedule(String jobName, SegmentRange 
range) throws JsonProcessingException {
+        JobDataSegment segment1 = createJobDataSegment("source_name", true, 
range);
+        JobDataSegment segment2 = createJobDataSegment("target_name", false, 
range);
+        List<JobDataSegment> segments = new ArrayList<>();
+        segments.add(segment1);
+        segments.add(segment2);
+        return new JobSchedule(1L, jobName, "0 0/4 * * * ?", "GMT+8:00", 
segments);
+    }
+
+    public static JobSchedule createJobSchedule(String jobName, JobDataSegment 
source, JobDataSegment target) throws JsonProcessingException {
+        List<JobDataSegment> segments = new ArrayList<>();
+        segments.add(source);
+        segments.add(target);
+        return new JobSchedule(1L, jobName, "0 0/4 * * * ?", "GMT+8:00", 
segments);
+    }
+
+    public static JobDataSegment createJobDataSegment(String 
dataConnectorName, Boolean baseline, SegmentRange range) {
+        return new JobDataSegment(dataConnectorName, baseline, range);
+    }
+
+    public static JobDataSegment createJobDataSegment(String 
dataConnectorName, Boolean baseline) {
+        return new JobDataSegment(dataConnectorName, baseline);
+    }
+
+    public static JobInstanceBean createJobInstance() {
+        JobInstanceBean jobBean = new JobInstanceBean();
+        jobBean.setSessionId(1L);
+        jobBean.setState(LivySessionStates.State.starting);
+        jobBean.setAppId("app_id");
+        jobBean.setTms(System.currentTimeMillis());
+        return jobBean;
+    }
+
+    public static JobDetailImpl createJobDetail(String measureJson, String 
predicatesJson) {
         JobDetailImpl jobDetail = new JobDetailImpl();
-        JobDataMap jobInfoMap = new JobDataMap();
-        jobInfoMap.put("triggerState", Trigger.TriggerState.NORMAL);
-        jobInfoMap.put("measureId", "1");
-        jobInfoMap.put("sourcePattern", "YYYYMMdd-HH");
-        jobInfoMap.put("targetPattern", "YYYYMMdd-HH");
-        jobInfoMap.put("jobStartTime", "1506356105876");
-        jobInfoMap.put("interval", "3000");
-        jobInfoMap.put("deleted", "false");
-        jobInfoMap.put("blockStartTimestamp", "1506634804254");
-        jobInfoMap.put("lastBlockStartTimestamp", "1506634804254");
-        jobInfoMap.put("groupName", "BA");
-        jobInfoMap.put("jobName", "jobName");
-        jobDetail.setJobDataMap(jobInfoMap);
+        JobKey jobKey = new JobKey("name", "group");
+        jobDetail.setKey(jobKey);
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put(MEASURE_KEY, measureJson);
+        jobDataMap.put(PREDICATES_KEY, predicatesJson);
+        jobDataMap.put(JOB_NAME, "jobName");
+        jobDataMap.put(PREDICATE_JOB_NAME, "predicateJobName");
+        jobDataMap.put(JOB_SCHEDULE_ID, 1L);
+        jobDataMap.put(GRIFFIN_JOB_ID, 1L);
+        jobDetail.setJobDataMap(jobDataMap);
         return jobDetail;
     }
 
+    public static SegmentPredicate createFileExistPredicate() throws 
JsonProcessingException {
+        Map<String, String> config = new HashMap<>();
+        config.put("root.path", "hdfs:///griffin/demo_src");
+        config.put("path", "/dt=#YYYYMMdd#/hour=#HH#/_DONE");
+        return new SegmentPredicate("file.exist", config);
+    }
+
     public static Map<String, Object> createJobDetailMap() {
-        Map<String, Object> jobDetailMap = new HashMap<>();
-        jobDetailMap.put("jobName", "jobName");
-        jobDetailMap.put("measureId", "1");
-        jobDetailMap.put("groupName", "BA");
-        jobDetailMap.put("targetPattern", "YYYYMMdd-HH");
-        jobDetailMap.put("triggerState", Trigger.TriggerState.NORMAL);
-        jobDetailMap.put("nextFireTime", "1509613440000");
-        jobDetailMap.put("previousFireTime", "1509613410000");
-        jobDetailMap.put("interval", "3000");
-        jobDetailMap.put("sourcePattern", "YYYYMMdd-HH");
-        jobDetailMap.put("jobStartTime", "1506356105876");
-        return jobDetailMap;
+        Map<String, Object> detail = new HashMap<>();
+        detail.put("jobId", 1L);
+        detail.put("jobName", "jobName");
+        detail.put("measureId", 1L);
+        detail.put("cronExpression", "0 0/4 * * * ?");
+        return detail;
     }
+
+    public static SimpleTrigger createSimpleTrigger(int repeatCount, int 
triggerCount) {
+        SimpleTriggerImpl trigger = new SimpleTriggerImpl();
+        trigger.setRepeatCount(repeatCount);
+        trigger.setTimesTriggered(triggerCount);
+        trigger.setPreviousFireTime(new Date());
+        return trigger;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/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
deleted file mode 100644
index f1563d1..0000000
--- a/service/src/test/java/org/apache/griffin/core/util/GriffinUtilTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-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.util;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import org.apache.griffin.core.job.entity.JobHealth;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.core.io.ClassPathResource;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import static org.junit.Assert.assertEquals;
-
-public class GriffinUtilTest {
-
-    @Before
-    public void setup() {
-    }
-
-    @Test
-    public void testToJson() throws JsonProcessingException {
-        JobHealth jobHealth = new JobHealth(5, 10);
-        String jobHealthStr = JsonUtil.toJson(jobHealth);
-        System.out.println(jobHealthStr);
-        assertEquals(jobHealthStr, "{\"healthyJobCount\":5,\"jobCount\":10}");
-    }
-
-    @Test
-    public void testToEntityWithParamClass() throws IOException {
-        String str = "{\"healthyJobCount\":5,\"jobCount\":10}";
-        JobHealth jobHealth = JsonUtil.toEntity(str, JobHealth.class);
-        assertEquals(jobHealth.getJobCount(), 10);
-        assertEquals(jobHealth.getHealthyJobCount(), 5);
-    }
-
-    @Test
-    public void testToEntityWithParamTypeReference() throws IOException {
-        String str = "{\"aaa\":12, \"bbb\":13}";
-        TypeReference<HashMap<String, Integer>> type = new 
TypeReference<HashMap<String, Integer>>() {
-        };
-        Map map = JsonUtil.toEntity(str, type);
-        assertEquals(map.get("aaa"), 12);
-    }
-
-    @Test
-    public void testGetPropertiesForSuccess() {
-        String path = "/quartz.properties";
-        Properties properties = PropertiesUtil.getProperties(path, new 
ClassPathResource(path));
-        assertEquals(properties.get("org.quartz.jobStore.isClustered"), 
"true");
-    }
-
-    @Test
-    public void testGetPropertiesForFailWithWrongPath() {
-        String path = ".././quartz.properties";
-        Properties properties = PropertiesUtil.getProperties(path, new 
ClassPathResource(path));
-        assertEquals(properties, null);
-    }
-
-    @Test
-    public void testToJsonWithFormat() throws JsonProcessingException {
-        JobHealth jobHealth = new JobHealth(5, 10);
-        String jobHealthStr = JsonUtil.toJsonWithFormat(jobHealth);
-        System.out.println(jobHealthStr);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/util/JsonUtilTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/util/JsonUtilTest.java 
b/service/src/test/java/org/apache/griffin/core/util/JsonUtilTest.java
new file mode 100644
index 0000000..baa20a9
--- /dev/null
+++ b/service/src/test/java/org/apache/griffin/core/util/JsonUtilTest.java
@@ -0,0 +1,84 @@
+/*
+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.util;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import org.apache.griffin.core.job.entity.JobHealth;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+public class JsonUtilTest {
+
+    @Test
+    public void testToJson() throws JsonProcessingException {
+        JobHealth jobHealth = new JobHealth(5, 10);
+        String jobHealthStr = JsonUtil.toJson(jobHealth);
+        System.out.println(jobHealthStr);
+        assertEquals(jobHealthStr, "{\"healthyJobCount\":5,\"jobCount\":10}");
+    }
+
+    @Test
+    public void testToJsonWithFormat() throws JsonProcessingException {
+        JobHealth jobHealth = new JobHealth(5, 10);
+        String jobHealthStr = JsonUtil.toJsonWithFormat(jobHealth);
+        System.out.println(jobHealthStr);
+    }
+
+    @Test
+    public void testToEntityWithParamClass() throws IOException {
+        String str = "{\"healthyJobCount\":5,\"jobCount\":10}";
+        JobHealth jobHealth = JsonUtil.toEntity(str, JobHealth.class);
+        assertEquals(jobHealth.getJobCount(), 10);
+        assertEquals(jobHealth.getHealthyJobCount(), 5);
+    }
+
+    @Test
+    public void testToEntityWithNullParamClass() throws IOException {
+        String str = null;
+        JobHealth jobHealth = JsonUtil.toEntity(str, JobHealth.class);
+        assert jobHealth == null;
+    }
+
+    @Test
+    public void testToEntityWithParamTypeReference() throws IOException {
+        String str = "{\"aaa\":12, \"bbb\":13}";
+        TypeReference<HashMap<String, Integer>> type = new 
TypeReference<HashMap<String, Integer>>() {
+        };
+        Map map = JsonUtil.toEntity(str, type);
+        assertEquals(map.get("aaa"), 12);
+    }
+
+    @Test
+    public void testToEntityWithNullParamTypeReference() throws IOException {
+        String str = null;
+        TypeReference<HashMap<String, Integer>> type = new 
TypeReference<HashMap<String, Integer>>() {
+        };
+        Map map = JsonUtil.toEntity(str, type);
+        assert map == null;
+    }
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/util/PropertiesUtilTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/util/PropertiesUtilTest.java 
b/service/src/test/java/org/apache/griffin/core/util/PropertiesUtilTest.java
new file mode 100644
index 0000000..ca57369
--- /dev/null
+++ b/service/src/test/java/org/apache/griffin/core/util/PropertiesUtilTest.java
@@ -0,0 +1,45 @@
+/*
+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.util;
+
+import org.junit.Test;
+import org.springframework.core.io.ClassPathResource;
+
+import java.util.Properties;
+
+import static org.junit.Assert.*;
+
+public class PropertiesUtilTest {
+
+    @Test
+    public void testGetPropertiesForSuccess() {
+        String path = "/quartz.properties";
+        Properties properties = PropertiesUtil.getProperties(path, new 
ClassPathResource(path));
+        assertEquals(properties.get("org.quartz.jobStore.isClustered"), 
"true");
+    }
+
+    @Test
+    public void testGetPropertiesForFailureWithWrongPath() {
+        String path = ".././quartz.properties";
+        Properties properties = PropertiesUtil.getProperties(path, new 
ClassPathResource(path));
+        assertEquals(properties, null);
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/java/org/apache/griffin/core/util/TimeUtilTest.java
----------------------------------------------------------------------
diff --git 
a/service/src/test/java/org/apache/griffin/core/util/TimeUtilTest.java 
b/service/src/test/java/org/apache/griffin/core/util/TimeUtilTest.java
index 02c7320..b215f93 100644
--- a/service/src/test/java/org/apache/griffin/core/util/TimeUtilTest.java
+++ b/service/src/test/java/org/apache/griffin/core/util/TimeUtilTest.java
@@ -20,8 +20,102 @@ under the License.
 package org.apache.griffin.core.util;
 
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.junit4.SpringRunner;
 
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringRunner.class)
 public class TimeUtilTest {
 
 
+    @Test
+    public void testStr2LongWithPositive() throws Exception {
+        String time = "2h3m4s";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "7384000");
+    }
+
+    @Test
+    public void testStr2LongWithNegative() throws Exception {
+        String time = "-2h3m4s";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "-7384000");
+    }
+
+    @Test
+    public void testStr2LongWithNull() throws Exception {
+        String time = null;
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "0");
+    }
+
+    @Test
+    public void testStr2LongWithDay() throws Exception {
+        String time = "1d";
+        System.out.println(TimeUtil.str2Long(time));
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "86400000");
+    }
+    @Test
+    public void testStr2LongWithHour() throws Exception {
+        String time = "1h";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "3600000");
+    }
+
+    @Test
+    public void testStr2LongWithMinute() throws Exception {
+        String time = "1m";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "60000");
+    }
+
+    @Test
+    public void testStr2LongWithSecond() throws Exception {
+        String time = "1s";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "1000");
+    }
+
+    @Test
+    public void testStr2LongWithMillisecond() throws Exception {
+        String time = "1ms";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "1");
+    }
+
+    @Test
+    public void testStr2LongWithIllegalFormat() throws Exception {
+        String time = "1y2m3s";
+        assertEquals(String.valueOf(TimeUtil.str2Long(time)), "123000");
+    }
+
+    @Test
+    public void testFormat() throws Exception {
+        String format = "dt=#YYYYMMdd#";
+        Long time = 1516186620155L;
+        String timeZone = "GMT+8:00";
+        assertEquals(TimeUtil.format(format,time,timeZone),"dt=20180117");
+    }
+
+    @Test
+    public void testFormatWithDiff() throws Exception {
+        String format = "dt=#YYYYMMdd#/hour=#HH#";
+        Long time = 1516186620155L;
+        String timeZone = "GMT+8:00";
+        
assertEquals(TimeUtil.format(format,time,timeZone),"dt=20180117/hour=18");
+    }
+
+    @Test
+    public void testFormatWithIllegalException() throws Exception {
+        String format = "\\#YYYYMMdd\\#";
+        Long time = 1516186620155L;
+        String timeZone = "GMT+8:00";
+        IllegalArgumentException exception = formatException(format, 
time,timeZone);
+        assert exception != null;
+    }
+
+    private IllegalArgumentException formatException(String format,Long 
time,String timeZone) {
+        IllegalArgumentException exception = null;
+        try {
+            TimeUtil.format(format,time,timeZone);
+        } catch (IllegalArgumentException e) {
+            exception = e;
+        }
+        return exception;
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/resources/application.properties
----------------------------------------------------------------------
diff --git a/service/src/test/resources/application.properties 
b/service/src/test/resources/application.properties
index f303911..ebd6a41 100644
--- a/service/src/test/resources/application.properties
+++ b/service/src/test/resources/application.properties
@@ -17,45 +17,54 @@
 # under the License.
 #
 
-# spring.datasource.x
-
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
-spring.datasource.username=sa
-spring.datasource.password=sa
-#spring.datasource.url= 
jdbc:mysql://localhost:3306/quartz?autoReconnect=true&useSSL=false
-#spring.datasource.username =griffin
-#spring.datasource.password =123456
-
-# hibernate.X
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
-
-hibernate.show_sql=true
-spring.jpa.hibernate.ddl-auto = create-drop
-
-#hibernate.hbm2ddl.auto=create-drop
-hibernate.cache.use_second_level_cache=true
-hibernate.cache.use_query_cache=true
-hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
-
-# hive metastore
-hive.metastore.uris = thrift://10.9.246.187:9083
+spring.datasource.url = 
jdbc:mysql://localhost:3306/quartz?autoReconnect=true&useSSL=false
+spring.datasource.username = test
+spring.datasource.password = test
+spring.datasource.driver-class-name = com.mysql.jdbc.Driver
+
+# Hibernate ddl auto (validate, create, create-drop, update)
+spring.jpa.hibernate.ddl-auto = update
+spring.jpa.show-sql = true
+spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
+# Naming strategy
+spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
+
+# Hive metastore
+hive.metastore.uris = thrift://localhost:9083
 hive.metastore.dbname = default
 hive.hmshandler.retry.attempts = 15
 hive.hmshandler.retry.interval = 2000ms
+# Hive cache time
+cache.evict.hive.fixedRate.in.milliseconds = 900000
+
+# Kafka schema registry
+kafka.schema.registry.url = http://localhost:8081
+
+# Update job instance state at regular intervals
+jobInstance.fixedDelay.in.milliseconds = 60000
+# Expired time of job instance which is 7 days that is 604800000 
milliseconds.Time unit only supports milliseconds
+jobInstance.expired.milliseconds = 604800000
+
+# schedule predicate job every 5 minutes and repeat 12 times at most
+#interval time unit m:minute h:hour d:day,only support these three units
+predicate.job.interval = 5m
+predicate.job.repeat.count = 12
+
+# external properties directory location
+external.config.location =
 
-# kafka schema registry
-kafka.schema.registry.url = http://10.65.159.119:8081
+# login strategy ("test" or "ldap")
+login.strategy = test
 
-#logging level
-logging.level.root=ERROR
-logging.level.org.hibernate=ERROR
-logging.level.org.springframework.test=ERROR
-logging.level.org.apache.griffin=ERROR
-logging.file=target/test.log
+# ldap
+ldap.url = ldap://hostname:port
+ldap.email = @example.com
+ldap.searchBase = DC=org,DC=example
+ldap.searchPattern = (sAMAccountName={0})
 
+# hdfs
+fs.defaultFS = hdfs://hdfs-default-name
 
-jobInstance.fixedDelay.in.milliseconds=60000
-# spring cache
-cache.evict.hive.fixedRate.in.milliseconds=900000
\ No newline at end of file
+# elasticsearch
+elasticsearch.host = localhost
+elasticsearch.port = 9200
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/resources/quartz.properties
----------------------------------------------------------------------
diff --git a/service/src/test/resources/quartz.properties 
b/service/src/test/resources/quartz.properties
index 640f067..3cb7158 100644
--- a/service/src/test/resources/quartz.properties
+++ b/service/src/test/resources/quartz.properties
@@ -17,7 +17,7 @@
 # under the License.
 #
 
-org.quartz.scheduler.instanceName=spring-boot-quartz
+org.quartz.scheduler.instanceName=spring-boot-quartz-test
 org.quartz.scheduler.instanceId=AUTO
 org.quartz.threadPool.threadCount=5
 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/71fcf93b/service/src/test/resources/sparkJob.properties
----------------------------------------------------------------------
diff --git a/service/src/test/resources/sparkJob.properties 
b/service/src/test/resources/sparkJob.properties
new file mode 100644
index 0000000..4b36826
--- /dev/null
+++ b/service/src/test/resources/sparkJob.properties
@@ -0,0 +1,50 @@
+#
+# 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.
+#
+
+# spark required
+sparkJob.file=hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/jar/griffin-measure.jar
+sparkJob.className=org.apache.griffin.measure.Application
+sparkJob.args_1=hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/conf/env.json
+sparkJob.args_3=hdfs,raw
+
+sparkJob.name=test
+sparkJob.queue=hdlq-gdi-sla
+
+# options
+sparkJob.numExecutors=10
+sparkJob.executorCores=1
+sparkJob.driverMemory=2g
+sparkJob.executorMemory=2g
+
+# shouldn't config in server, but in
+sparkJob.jars = 
hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/livy/spark-avro_2.11-2.0.1.jar;\
+  
hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/livy/datanucleus-api-jdo-3.2.6.jar;\
+  
hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/livy/datanucleus-core-3.2.10.jar;\
+  
hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/livy/datanucleus-rdbms-3.2.9.jar
+
+spark.yarn.dist.files = 
hdfs://apollo-phx-nn-ha/apps/hdmi-technology/b_des/griffin/livy/hive-site.xml
+
+# livy
+# livy.uri=http://10.9.246.187:8998/batches
+livy.uri=http://localhost:8998/batches
+
+# spark-admin
+# spark.uri=http://10.149.247.156:28088
+# spark.uri=http://10.9.246.187:8088
+spark.uri=http://localhost:8088
\ No newline at end of file

Reply via email to