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
