http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java b/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java index 51edad8..0290306 100644 --- a/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java +++ b/service/src/test/java/org/apache/griffin/core/job/JobControllerTest.java @@ -19,44 +19,54 @@ under the License. package org.apache.griffin.core.job; +import org.apache.griffin.core.exception.GriffinException; +import org.apache.griffin.core.exception.GriffinExceptionHandler; +import org.apache.griffin.core.exception.GriffinExceptionMessage; import org.apache.griffin.core.job.entity.*; -import org.apache.griffin.core.util.GriffinOperationMessage; import org.apache.griffin.core.util.JsonUtil; import org.apache.griffin.core.util.URLHelper; 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.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import java.io.Serializable; import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.Collections; -import static org.apache.griffin.core.util.GriffinOperationMessage.*; +import static org.apache.griffin.core.exception.GriffinExceptionMessage.JOB_ID_DOES_NOT_EXIST; +import static org.apache.griffin.core.exception.GriffinExceptionMessage.JOB_NAME_DOES_NOT_EXIST; +import static org.apache.griffin.core.util.EntityHelper.createGriffinJob; +import static org.apache.griffin.core.util.EntityHelper.createJobSchedule; import static org.hamcrest.CoreMatchers.is; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doThrow; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@WebMvcTest(value = JobController.class, secure = false) public class JobControllerTest { - @Autowired + private MockMvc mvc; - @MockBean - private JobService service; + @Mock + private JobServiceImpl service; + + @InjectMocks + private JobController controller; @Before public void setup() { + mvc = MockMvcBuilders + .standaloneSetup(controller) + .setControllerAdvice(new GriffinExceptionHandler()) + .build(); } @@ -64,7 +74,7 @@ public class JobControllerTest { public void testGetJobs() throws Exception { JobDataBean jobBean = new JobDataBean(); jobBean.setJobName("job_name"); - given(service.getAliveJobs()).willReturn(Arrays.asList(jobBean)); + given(service.getAliveJobs()).willReturn(Collections.singletonList(jobBean)); mvc.perform(get(URLHelper.API_VERSION_PATH + "/jobs").contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) @@ -73,76 +83,102 @@ public class JobControllerTest { @Test public void testAddJobForSuccess() throws Exception { - JobSchedule jobSchedule = new JobSchedule(1L, "jobName","0 0/4 * * * ?","GMT+8:00", null); - given(service.addJob(jobSchedule)).willReturn(CREATE_JOB_SUCCESS); + JobSchedule jobSchedule = createJobSchedule(); + GriffinJob job = createGriffinJob(); + given(service.addJob(jobSchedule)).willReturn(job); mvc.perform(post(URLHelper.API_VERSION_PATH + "/jobs") .contentType(MediaType.APPLICATION_JSON) .content(JsonUtil.toJson(jobSchedule))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(205))) - .andDo(print()); + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id", is(1))); } @Test - public void testAddJobForFailure() throws Exception { - JobSchedule jobSchedule = new JobSchedule(1L, "jobName","0 0/4 * * * ?","GMT+8:00", null); - given(service.addJob(jobSchedule)).willReturn(CREATE_JOB_FAIL); + public void testAddJobForFailureWithBadRequest() throws Exception { + JobSchedule jobSchedule = createJobSchedule(); + given(service.addJob(jobSchedule)) + .willThrow(new GriffinException.BadRequestException(GriffinExceptionMessage.MISSING_METRIC_NAME)); mvc.perform(post(URLHelper.API_VERSION_PATH + "/jobs") .contentType(MediaType.APPLICATION_JSON) .content(JsonUtil.toJson(jobSchedule))) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(405))) - .andDo(print()); + .andExpect(status().isBadRequest()); + } + + @Test + public void testAddJobForFailureWithTriggerKeyExist() throws Exception { + JobSchedule jobSchedule = createJobSchedule(); + given(service.addJob(jobSchedule)) + .willThrow(new GriffinException.ConflictException(GriffinExceptionMessage.QUARTZ_JOB_ALREADY_EXIST)); + + mvc.perform(post(URLHelper.API_VERSION_PATH + "/jobs") + .contentType(MediaType.APPLICATION_JSON) + .content(JsonUtil.toJson(jobSchedule))) + .andExpect(status().isConflict()); } @Test public void testDeleteJobByIdForSuccess() throws Exception { - given(service.deleteJob(1L)).willReturn(DELETE_JOB_SUCCESS); + doNothing().when(service).deleteJob(1L); mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs/1")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(206))); + .andExpect(status().isNoContent()); } @Test - public void testDeleteJobByIdForFailure() throws Exception { - given(service.deleteJob(1L)).willReturn(DELETE_JOB_FAIL); + public void testDeleteJobByIdForFailureWithNotFound() throws Exception { + doThrow(new GriffinException.NotFoundException(JOB_ID_DOES_NOT_EXIST)).when(service).deleteJob(1L); mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs/1")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(406))); + .andExpect(status().isNotFound()); + } + + @Test + public void testDeleteJobByIdForFailureWithException() throws Exception { + doThrow(new GriffinException.ServiceException("Failed to delete job", new Exception())) + .when(service).deleteJob(1L); + + mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs/1")) + .andExpect(status().isInternalServerError()); } @Test public void testDeleteJobByNameForSuccess() throws Exception { String jobName = "jobName"; - given(service.deleteJob(jobName)).willReturn(DELETE_JOB_SUCCESS); + doNothing().when(service).deleteJob(jobName); - mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs").param("jobName",jobName)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(206))); + mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs").param("jobName", jobName)) + .andExpect(status().isNoContent()); } @Test - public void testDeleteJobByNameForFailure() throws Exception { + public void testDeleteJobByNameForFailureWithNotFound() throws Exception { String jobName = "jobName"; - given(service.deleteJob(jobName)).willReturn(DELETE_JOB_FAIL); + doThrow(new GriffinException.NotFoundException(JOB_NAME_DOES_NOT_EXIST)).when(service).deleteJob(jobName); - mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs").param("jobName",jobName)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(406))); + mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs").param("jobName", jobName)) + .andExpect(status().isNotFound()); + } + + @Test + public void testDeleteJobByNameForFailureWithException() throws Exception { + String jobName = "jobName"; + doThrow(new GriffinException.ServiceException("Failed to delete job", new Exception())) + .when(service).deleteJob(jobName); + + mvc.perform(delete(URLHelper.API_VERSION_PATH + "/jobs").param("jobName", jobName)) + .andExpect(status().isInternalServerError()); } @Test public void testFindInstancesOfJob() throws Exception { int page = 0; int size = 2; - JobInstanceBean jobInstance = new JobInstanceBean(1L, LivySessionStates.State.running, "", "", null,null); + JobInstanceBean jobInstance = new JobInstanceBean(1L, LivySessionStates.State.running, "", "", null, null); given(service.findInstancesOfJob(1L, page, size)).willReturn(Arrays.asList(jobInstance)); - mvc.perform(get(URLHelper.API_VERSION_PATH + "/jobs/instances").param("jobId",String.valueOf(1L)) + mvc.perform(get(URLHelper.API_VERSION_PATH + "/jobs/instances").param("jobId", String.valueOf(1L)) .param("page", String.valueOf(page)).param("size", String.valueOf(size))) .andExpect(status().isOk()) .andExpect(jsonPath("$.[0].state", is("running")));
http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java b/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java index d529753..a5beb51 100644 --- a/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java +++ b/service/src/test/java/org/apache/griffin/core/job/JobServiceImplTest.java @@ -19,7 +19,7 @@ under the License. package org.apache.griffin.core.job; -import org.apache.griffin.core.error.exception.GriffinException; +import org.apache.griffin.core.exception.GriffinException; import org.apache.griffin.core.job.entity.*; import org.apache.griffin.core.job.repo.GriffinJobRepo; import org.apache.griffin.core.job.repo.JobInstanceRepo; @@ -27,7 +27,6 @@ import org.apache.griffin.core.job.repo.JobScheduleRepo; import org.apache.griffin.core.measure.entity.DataConnector; import org.apache.griffin.core.measure.entity.GriffinMeasure; import org.apache.griffin.core.measure.repo.GriffinMeasureRepo; -import org.apache.griffin.core.util.GriffinOperationMessage; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,23 +40,17 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Bean; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Properties; +import java.util.*; 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; -import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.*; @RunWith(SpringRunner.class) public class JobServiceImplTest { @@ -108,32 +101,35 @@ public class JobServiceImplTest { @Test public void testGetAliveJobsForSuccess() throws SchedulerException { Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); SimpleTrigger trigger = new SimpleTriggerImpl(); given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willReturn(Arrays.asList(trigger)); + assertEquals(service.getAliveJobs().size(), 1); } @Test public void testGetAliveJobsForNoJobsWithTriggerEmpty() throws SchedulerException { Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willReturn(new ArrayList<>()); + assertEquals(service.getAliveJobs().size(), 0); } - @Test + @Test(expected = GriffinException.ServiceException.class) public void testGetAliveJobsForNoJobsWithException() throws SchedulerException { Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); - GriffinException.GetJobsFailureException exception = getExceptionForGetAliveJObs(scheduler); - assert exception != null; + given(scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willThrow(new SchedulerException()); + + service.getAliveJobs(); } @@ -142,89 +138,90 @@ public class JobServiceImplTest { JobSchedule js = createJobSchedule(); js.setId(1L); GriffinMeasure measure = createGriffinMeasure("measureName"); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); Scheduler scheduler = Mockito.mock(Scheduler.class); given(factory.getObject()).willReturn(scheduler); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); given(jobRepo.countByJobNameAndDeleted(js.getJobName(), false)).willReturn(0); given(jobScheduleRepo.save(js)).willReturn(js); given(jobRepo.save(Matchers.any(GriffinJob.class))).willReturn(job); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_SUCCESS); + + GriffinJob griffinJob = service.addJob(js); + assertEquals(griffinJob.getJobName(), job.getJobName()); } - @Test + @Test(expected = GriffinException.BadRequestException.class) public void testAddJobForFailureWithMeasureNull() throws Exception { JobSchedule js = createJobSchedule(); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(null); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test - public void testAddJobForFailureWitJobNameRepeat() throws Exception { + @Test(expected = GriffinException.BadRequestException.class) + public void testAddJobForFailureWitJobNameDuplicate() throws Exception { JobSchedule js = createJobSchedule(); GriffinMeasure measure = createGriffinMeasure("measureName"); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); given(jobRepo.countByJobNameAndDeleted(js.getJobName(), false)).willReturn(1); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test + @Test(expected = GriffinException.BadRequestException.class) public void testAddJobForFailureWitJobNameNull() throws Exception { JobSchedule js = createJobSchedule(null); GriffinMeasure measure = createGriffinMeasure("measureName"); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test + @Test(expected = GriffinException.BadRequestException.class) public void testAddJobForFailureWithBaselineInvalid() throws Exception { JobDataSegment source = createJobDataSegment("source_name", false); JobDataSegment target = createJobDataSegment("target_name", false); JobSchedule js = createJobSchedule("jobName", source, target); GriffinMeasure measure = createGriffinMeasure("measureName"); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test + @Test(expected = GriffinException.BadRequestException.class) public void testAddJobForFailureWithConnectorNameInvalid() throws Exception { GriffinMeasure measure = createGriffinMeasure("measureName"); JobDataSegment source = createJobDataSegment("source_connector_name", true); JobDataSegment target = createJobDataSegment("target_name", false); JobSchedule js = createJobSchedule("jobName", source, target); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test - public void testAddJobForFailureWithMeasureConnectorNameRepeat() throws Exception { + @Test(expected = GriffinException.BadRequestException.class) + public void testAddJobForFailureWithMeasureConnectorNameDuplicate() throws Exception { JobSchedule js = createJobSchedule(); DataConnector dcSource = createDataConnector("connector_name", "default", "test_data_src", "dt=#YYYYMMdd# AND hour=#HH#"); DataConnector dcTarget = createDataConnector("connector_name", "default", "test_data_tgt", "dt=#YYYYMMdd# AND hour=#HH#"); GriffinMeasure measure = createGriffinMeasure("measureName", dcSource, dcTarget); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test + @Test(expected = GriffinException.BadRequestException.class) public void testAddJobForFailureWithJobScheduleConnectorNameRepeat() throws Exception { GriffinMeasure measure = createGriffinMeasure("measureName"); JobDataSegment source = createJobDataSegment("source_name", true); JobDataSegment target = createJobDataSegment("source_name", false); JobSchedule js = createJobSchedule("jobName", source, target); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } - @Test + @Test(expected = GriffinException.ConflictException.class) public void testAddJobForFailureWithTriggerKeyExist() throws Exception { GriffinMeasure measure = createGriffinMeasure("measureName"); JobDataSegment source = createJobDataSegment("source_name", true); @@ -234,8 +231,8 @@ public class JobServiceImplTest { given(factory.getObject()).willReturn(scheduler); given(griffinMeasureRepo.findByIdAndDeleted(js.getMeasureId(), false)).willReturn(measure); given(scheduler.checkExists(Matchers.any(TriggerKey.class))).willReturn(true); - GriffinOperationMessage message = service.addJob(js); - assertEquals(message, CREATE_JOB_FAIL); + + service.addJob(js); } @Test @@ -245,10 +242,15 @@ public class JobServiceImplTest { JobInstanceBean instance = new JobInstanceBean(LivySessionStates.State.finding, "pName", "pGroup", null, null); job.setJobInstances(Arrays.asList(instance)); Scheduler scheduler = Mockito.mock(Scheduler.class); - given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); + given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); - assertEquals(service.deleteJob(jobId), DELETE_JOB_SUCCESS); + + service.deleteJob(jobId); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); } @Test @@ -261,28 +263,33 @@ public class JobServiceImplTest { given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(false); - assertEquals(service.deleteJob(jobId), DELETE_JOB_SUCCESS); + + service.deleteJob(jobId); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); } - @Test - public void testDeleteJobByIdForFailureWithNull() throws SchedulerException { - Long jobId = 1L; - given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(null); - assertEquals(service.deleteJob(jobId), DELETE_JOB_FAIL); + @Test(expected = GriffinException.NotFoundException.class) + public void testDeleteJobByIdForFailureWithJobNotFound() { + given(jobRepo.findByIdAndDeleted(1L, false)).willReturn(null); + + service.deleteJob(1L); } - @Test + @Test(expected = GriffinException.ServiceException.class) public void testDeleteJobByIdForFailureWithException() throws SchedulerException { Long jobId = 1L; - GriffinJob job = new GriffinJob(1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); Scheduler scheduler = Mockito.mock(Scheduler.class); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); doThrow(SchedulerException.class).when(scheduler).pauseJob(Matchers.any(JobKey.class)); - assertEquals(service.deleteJob(jobId), DELETE_JOB_FAIL); - } + service.deleteJob(jobId); + } @Test public void testDeleteJobByNameForSuccessWithTriggerKeyExist() throws SchedulerException { @@ -293,7 +300,15 @@ public class JobServiceImplTest { given(jobRepo.findByJobNameAndDeleted(job.getJobName(), false)).willReturn(Arrays.asList(job)); given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); - assertEquals(service.deleteJob(job.getJobName()), DELETE_JOB_SUCCESS); + doNothing().when(scheduler).pauseJob(Matchers.any(JobKey.class)); + given(scheduler.deleteJob(Matchers.any(JobKey.class))).willReturn(true); + + service.deleteJob(job.getJobName()); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); + } @Test @@ -302,104 +317,116 @@ public class JobServiceImplTest { JobInstanceBean instance = new JobInstanceBean(LivySessionStates.State.finding, "pName", "pGroup", null, null); job.setJobInstances(Arrays.asList(instance)); Scheduler scheduler = Mockito.mock(Scheduler.class); - given(jobRepo.findByJobNameAndDeleted(job.getJobName(), false)).willReturn(Arrays.asList(job)); given(factory.getObject()).willReturn(scheduler); + given(jobRepo.findByJobNameAndDeleted(job.getJobName(), false)).willReturn(Arrays.asList(job)); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(false); - assertEquals(service.deleteJob(job.getJobName()), DELETE_JOB_SUCCESS); + + service.deleteJob(job.getJobName()); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); } - @Test - public void testDeleteJobByJobNameForFailureWithNull() throws SchedulerException { + @Test(expected = GriffinException.NotFoundException.class) + public void testDeleteJobByJobNameForFailureWithJobNotFound() { String jobName = "jobName"; given(jobRepo.findByJobNameAndDeleted(jobName, false)).willReturn(new ArrayList<>()); - assertEquals(service.deleteJob(jobName), DELETE_JOB_FAIL); + + service.deleteJob(jobName); } - @Test + @Test(expected = GriffinException.ServiceException.class) public void testDeleteJobByJobNameForFailureWithException() throws SchedulerException { - Long jobId = 1L; - GriffinJob job = new GriffinJob(1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); Scheduler scheduler = Mockito.mock(Scheduler.class); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByJobNameAndDeleted(job.getJobName(), false)).willReturn(Arrays.asList(job)); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); doThrow(SchedulerException.class).when(scheduler).pauseJob(Matchers.any(JobKey.class)); - assertEquals(service.deleteJob(jobId), DELETE_JOB_FAIL); + + service.deleteJob(job.getJobName()); } @Test public void testDeleteJobsRelateToMeasureForSuccessWithTriggerKeyExist() throws SchedulerException { - Long jobId = 1L; - Long measureId = 1L; - GriffinJob job = new GriffinJob(measureId, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); JobInstanceBean instance = new JobInstanceBean(LivySessionStates.State.finding, "pName", "pGroup", null, null); job.setJobInstances(Arrays.asList(instance)); Scheduler scheduler = Mockito.mock(Scheduler.class); + given(jobRepo.findByMeasureIdAndDeleted(1L, false)).willReturn(Arrays.asList(job)); given(factory.getObject()).willReturn(scheduler); - given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); - given(jobRepo.findByMeasureIdAndDeleted(measureId, false)).willReturn(Arrays.asList(job)); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); - assertEquals(service.deleteJobsRelateToMeasure(measureId), true); + + service.deleteJobsRelateToMeasure(1L); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(1)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); } @Test public void testDeleteJobsRelateToMeasureForSuccessWithTriggerKeyNotExist() throws SchedulerException { - Long jobId = 1L; - Long measureId = 1L; - GriffinJob job = new GriffinJob(measureId, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); JobInstanceBean instance = new JobInstanceBean(LivySessionStates.State.finding, "pName", "pGroup", null, null); job.setJobInstances(Arrays.asList(instance)); Scheduler scheduler = Mockito.mock(Scheduler.class); + given(jobRepo.findByMeasureIdAndDeleted(1L, false)).willReturn(Arrays.asList(job)); given(factory.getObject()).willReturn(scheduler); - given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); - given(jobRepo.findByMeasureIdAndDeleted(measureId, false)).willReturn(Arrays.asList(job)); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(false); - assertEquals(service.deleteJobsRelateToMeasure(measureId), true); + + service.deleteJobsRelateToMeasure(1L); + verify(scheduler, times(2)).checkExists(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).pauseJob(Matchers.any(JobKey.class)); + verify(scheduler, times(0)).deleteJob(Matchers.any(JobKey.class)); + verify(jobRepo, times(1)).save(Matchers.any(GriffinJob.class)); } @Test - public void testDeleteJobsRelateToMeasureForSuccessWithNull() throws SchedulerException { + public void testDeleteJobsRelateToMeasureForSuccessWithJobNotExist() { Long measureId = 1L; - Scheduler scheduler = Mockito.mock(Scheduler.class); - given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByMeasureIdAndDeleted(measureId, false)).willReturn(null); - assertEquals(service.deleteJobsRelateToMeasure(measureId), true); + + service.deleteJobsRelateToMeasure(measureId); + verify(jobRepo, times(1)).findByMeasureIdAndDeleted(measureId, false); + verify(factory, times(0)).getObject(); } - @Test + @Test(expected = GriffinException.ServiceException.class) public void testDeleteJobsRelateToMeasureForFailureWithException() throws SchedulerException { - Long jobId = 1L; Long measureId = 1L; - GriffinJob job = new GriffinJob(measureId, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); JobInstanceBean instance = new JobInstanceBean(LivySessionStates.State.finding, "pName", "pGroup", null, null); job.setJobInstances(Arrays.asList(instance)); Scheduler scheduler = Mockito.mock(Scheduler.class); - given(factory.getObject()).willReturn(scheduler); - given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); given(jobRepo.findByMeasureIdAndDeleted(measureId, false)).willReturn(Arrays.asList(job)); + given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); doThrow(SchedulerException.class).when(scheduler).pauseJob(Matchers.any(JobKey.class)); - assertEquals(service.deleteJobsRelateToMeasure(measureId), false); + + service.deleteJobsRelateToMeasure(measureId); } @Test - public void testFindInstancesOfJobForSuccess() throws SchedulerException { + public void testFindInstancesOfJobForSuccess() { Long jobId = 1L; int page = 0; int size = 2; - GriffinJob job = new GriffinJob(1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); JobInstanceBean jobInstance = new JobInstanceBean(1L, LivySessionStates.State.dead, "app_id", "app_uri", null, null); - Pageable pageRequest = new PageRequest(page, size, Sort.Direction.DESC, "tms"); given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(job); - given(jobInstanceRepo.findByJobId(1L, pageRequest)).willReturn(Arrays.asList(jobInstance)); - assertEquals(service.findInstancesOfJob(1L, page, size).size(), 1); + given(jobInstanceRepo.findByJobId(Matchers.anyLong(), Matchers.any(PageRequest.class))).willReturn(Arrays.asList(jobInstance)); + + List<JobInstanceBean> jobInstanceBeans = service.findInstancesOfJob(1L, page, size); + assertEquals(jobInstanceBeans.size(), 1); } - @Test - public void testFindInstancesOfJobWithNull() throws SchedulerException { + @Test(expected = GriffinException.NotFoundException.class) + public void testFindInstancesOfJobWithJobNotFound() { Long jobId = 1L; given(jobRepo.findByIdAndDeleted(jobId, false)).willReturn(null); - assertEquals(service.findInstancesOfJob(jobId, 0, 2).size(), 0); + + service.findInstancesOfJob(jobId, 0, 2); } @Test @@ -409,7 +436,10 @@ public class JobServiceImplTest { Scheduler scheduler = Mockito.mock(Scheduler.class); given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); + service.deleteExpiredJobInstance(); + verify(scheduler, times(1)).pauseJob(Matchers.any(JobKey.class)); + verify(jobInstanceRepo, times(1)).deleteByExpireTimestamp(Matchers.any()); } @Test @@ -419,13 +449,19 @@ public class JobServiceImplTest { Scheduler scheduler = Mockito.mock(Scheduler.class); given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(false); + service.deleteExpiredJobInstance(); + verify(scheduler, times(0)).pauseJob(Matchers.any(JobKey.class)); + verify(jobInstanceRepo, times(1)).deleteByExpireTimestamp(Matchers.any()); } @Test - public void testDeleteExpiredJobInstanceForSuccessWithNull() throws SchedulerException { + public void testDeleteExpiredJobInstanceForSuccessWithNoInstance() { given(jobInstanceRepo.findByExpireTmsLessThanEqual(Matchers.any())).willReturn(null); + service.deleteExpiredJobInstance(); + verify(jobInstanceRepo, times(1)).deleteByExpireTimestamp(Matchers.any()); + } @Test @@ -436,7 +472,9 @@ public class JobServiceImplTest { given(factory.getObject()).willReturn(scheduler); given(scheduler.checkExists(Matchers.any(JobKey.class))).willReturn(true); doThrow(SchedulerException.class).when(scheduler).pauseJob(Matchers.any(JobKey.class)); + service.deleteExpiredJobInstance(); + verify(jobInstanceRepo, times(0)).deleteByExpireTimestamp(Matchers.any()); } @Test @@ -446,7 +484,9 @@ public class JobServiceImplTest { Whitebox.setInternalState(service, "restTemplate", restTemplate); String result = "{\"id\":1,\"state\":\"starting\",\"appId\":123,\"appInfo\":{\"driverLogUrl\":null,\"sparkUiUrl\":null},\"log\":[]}"; given(restTemplate.getForObject(Matchers.anyString(), Matchers.any())).willReturn(result); + service.syncInstancesOfAllJobs(); + verify(jobInstanceRepo, times(1)).save(instance); } @Test @@ -456,52 +496,58 @@ public class JobServiceImplTest { given(jobInstanceRepo.findByActiveState()).willReturn(Arrays.asList(instance)); Whitebox.setInternalState(service, "restTemplate", restTemplate); given(restTemplate.getForObject(Matchers.anyString(), Matchers.any())).willThrow(RestClientException.class); + service.syncInstancesOfAllJobs(); + verify(jobInstanceRepo, times(1)).save(instance); } @Test - public void testSyncInstancesOfJobForFailureWithIOException() throws Exception { + public void testSyncInstancesOfJobForFailureWithIOException() { JobInstanceBean instance = createJobInstance(); given(jobInstanceRepo.findByActiveState()).willReturn(Arrays.asList(instance)); Whitebox.setInternalState(service, "restTemplate", restTemplate); given(restTemplate.getForObject(Matchers.anyString(), Matchers.any())).willReturn("result"); + service.syncInstancesOfAllJobs(); + verify(jobInstanceRepo, times(0)).save(instance); } @Test - public void testSyncInstancesOfJobForFailureWithIllegalArgumentException() throws Exception { + public void testSyncInstancesOfJobForFailureWithIllegalArgumentException() { JobInstanceBean instance = createJobInstance(); given(jobInstanceRepo.findByActiveState()).willReturn(Arrays.asList(instance)); Whitebox.setInternalState(service, "restTemplate", restTemplate); given(restTemplate.getForObject(Matchers.anyString(), Matchers.any())).willReturn("{\"state\":\"wrong\"}"); + service.syncInstancesOfAllJobs(); + verify(jobInstanceRepo, times(0)).save(instance); } @Test - public void testSyncInstancesOfJobForFailureWithException() throws Exception { + public void testSyncInstancesOfJobForFailureWithException() { JobInstanceBean instance = createJobInstance(); given(jobInstanceRepo.findByActiveState()).willReturn(Arrays.asList(instance)); Whitebox.setInternalState(service, "restTemplate", restTemplate); String result = "{\"id\":1,\"state\":\"starting\",\"appId\":123,\"appInfo\":{\"driverLogUrl\":null,\"sparkUiUrl\":null},\"log\":[]}"; given(restTemplate.getForObject(Matchers.anyString(), Matchers.any())).willReturn(result); doThrow(Exception.class).when(jobInstanceRepo).save(Matchers.any(JobInstanceBean.class)); + service.syncInstancesOfAllJobs(); + verify(restTemplate, times(1)).getForObject(Matchers.anyString(), Matchers.any()); + verify(sparkJobProps, times(2)).getProperty(Matchers.anyString()); } @Test public void testGetHealthInfoWithHealthy() throws SchedulerException { - Long jobId = 1L; Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(jobId, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); - SimpleTrigger trigger = new SimpleTriggerImpl(); - List<Trigger> triggers = new ArrayList<>(); - triggers.add(trigger); + List<Trigger> triggers = Collections.singletonList(new SimpleTriggerImpl()); given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willReturn(triggers); + given(jobInstanceRepo.findByJobId(Matchers.anyLong(), Matchers.any(PageRequest.class))) + .willReturn(Collections.singletonList(createJobInstance())); - Pageable pageRequest = new PageRequest(0, 1, Sort.Direction.DESC, "tms"); - given(jobInstanceRepo.findByJobId(jobId, pageRequest)).willReturn(Arrays.asList(createJobInstance())); assertEquals(service.getHealthInfo().getHealthyJobCount(), 1); } @@ -509,52 +555,30 @@ public class JobServiceImplTest { @Test public void testGetHealthInfoWithUnhealthy() throws SchedulerException { Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); - given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); - SimpleTrigger trigger = new SimpleTriggerImpl(); - given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willReturn(Arrays.asList(trigger)); - - Pageable pageRequest = new PageRequest(0, 1, Sort.Direction.DESC, "tms"); - List<JobInstanceBean> scheduleStateList = new ArrayList<>(); + given(jobRepo.findByDeleted(false)).willReturn(Collections.singletonList(job)); + List<Trigger> triggers = Collections.singletonList(new SimpleTriggerImpl()); + given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willReturn(triggers); JobInstanceBean instance = createJobInstance(); instance.setState(LivySessionStates.State.error); - scheduleStateList.add(instance); - given(jobInstanceRepo.findByJobId(1L, pageRequest)).willReturn(scheduleStateList); + List<JobInstanceBean> scheduleStateList = Collections.singletonList(instance); + given(jobInstanceRepo.findByJobId(Matchers.anyLong(), Matchers.any(PageRequest.class))) + .willReturn(scheduleStateList); + assertEquals(service.getHealthInfo().getHealthyJobCount(), 0); } - @Test + @Test(expected = GriffinException.ServiceException.class) public void testGetHealthInfoWithException() throws SchedulerException { Scheduler scheduler = Mockito.mock(Scheduler.class); - GriffinJob job = new GriffinJob(1L, 1L, "jobName", "quartzJobName", "quartzGroupName", false); + GriffinJob job = createGriffinJob(); given(factory.getObject()).willReturn(scheduler); - given(jobRepo.findByDeleted(false)).willReturn(Arrays.asList(job)); - GriffinException.GetHealthInfoFailureException exception = getExceptionForHealthInfo(scheduler); - assert exception != null; - } - - - private GriffinException.GetHealthInfoFailureException getExceptionForHealthInfo(Scheduler scheduler) throws SchedulerException { - GriffinException.GetHealthInfoFailureException exception = null; - try { - given(scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willThrow(SchedulerException.class); - service.getHealthInfo(); - } catch (GriffinException.GetHealthInfoFailureException e) { - exception = e; - } - return exception; - } + given(jobRepo.findByDeleted(false)).willReturn(Collections.singletonList(job)); + given((List<Trigger>) scheduler.getTriggersOfJob(Matchers.any(JobKey.class))) + .willThrow(new SchedulerException()); - private GriffinException.GetJobsFailureException getExceptionForGetAliveJObs(Scheduler scheduler) throws SchedulerException { - GriffinException.GetJobsFailureException exception = null; - try { - given(scheduler.getTriggersOfJob(Matchers.any(JobKey.class))).willThrow(new GriffinException.GetJobsFailureException()); - service.getAliveJobs(); - } catch (GriffinException.GetJobsFailureException e) { - exception = e; - } - return exception; + service.getHealthInfo(); } } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/job/SparkSubmitJobTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/job/SparkSubmitJobTest.java b/service/src/test/java/org/apache/griffin/core/job/SparkSubmitJobTest.java index ccb641b..b252782 100644 --- a/service/src/test/java/org/apache/griffin/core/job/SparkSubmitJobTest.java +++ b/service/src/test/java/org/apache/griffin/core/job/SparkSubmitJobTest.java @@ -42,12 +42,13 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; import java.util.Arrays; +import java.util.Collections; import java.util.Properties; import static org.apache.griffin.core.util.EntityHelper.*; import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.*; @RunWith(SpringRunner.class) @@ -71,10 +72,6 @@ public class SparkSubmitJobTest { @Autowired private SparkSubmitJob sparkSubmitJob; - @Autowired - @Qualifier("livyConf") - private Properties livyConfProps; - @MockBean private RestTemplate restTemplate; @@ -95,10 +92,11 @@ public class SparkSubmitJobTest { JobInstanceBean instance = createJobInstance(); GriffinMeasure measure = createGriffinMeasure("measureName"); SegmentPredicate predicate = createFileExistPredicate(); - JobDetail jd = createJobDetail(JsonUtil.toJson(measure), JsonUtil.toJson(Arrays.asList(predicate))); + JobDetail jd = createJobDetail(JsonUtil.toJson(measure), JsonUtil.toJson(Collections.singletonList(predicate))); given(context.getJobDetail()).willReturn(jd); given(context.getTrigger()).willReturn(createSimpleTrigger(4, 5)); given(jobInstanceRepo.findByPredicateName(Matchers.anyString())).willReturn(instance); + sparkSubmitJob.execute(context); assertTrue(true); } @@ -109,10 +107,11 @@ public class SparkSubmitJobTest { JobInstanceBean instance = createJobInstance(); GriffinMeasure measure = createGriffinMeasure("measureName"); SegmentPredicate predicate = createFileExistPredicate(); - JobDetail jd = createJobDetail(JsonUtil.toJson(measure), JsonUtil.toJson(Arrays.asList(predicate))); + JobDetail jd = createJobDetail(JsonUtil.toJson(measure), JsonUtil.toJson(Collections.singletonList(predicate))); given(context.getJobDetail()).willReturn(jd); given(context.getTrigger()).willReturn(createSimpleTrigger(4, 4)); given(jobInstanceRepo.findByPredicateName(Matchers.anyString())).willReturn(instance); + sparkSubmitJob.execute(context); assertTrue(true); } @@ -128,7 +127,8 @@ public class SparkSubmitJobTest { given(jobInstanceRepo.findByPredicateName(Matchers.anyString())).willReturn(instance); Whitebox.setInternalState(sparkSubmitJob, "restTemplate", restTemplate); given(restTemplate.postForObject(Matchers.anyString(), Matchers.any(), Matchers.any())).willReturn(result); - given(jobService.pauseJob(Matchers.any(), Matchers.any())).willReturn(true); + doNothing().when(jobService).pauseJob(Matchers.any(), Matchers.any()); + sparkSubmitJob.execute(context); assertTrue(true); } @@ -141,14 +141,16 @@ public class SparkSubmitJobTest { JobDetail jd = createJobDetail(JsonUtil.toJson(measure), ""); given(context.getJobDetail()).willReturn(jd); given(jobInstanceRepo.findByPredicateName(Matchers.anyString())).willReturn(instance); - given(jobService.pauseJob(Matchers.any(), Matchers.any())).willReturn(true); + doNothing().when(jobService).pauseJob(Matchers.any(), Matchers.any()); + sparkSubmitJob.execute(context); assertTrue(true); } @Test - public void testExecuteWithNullException() throws Exception { + public void testExecuteWithNullException() { JobExecutionContext context = mock(JobExecutionContext.class); + sparkSubmitJob.execute(context); assertTrue(true); } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/measure/ExternalMeasureOperationImplTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/ExternalMeasureOperationImplTest.java b/service/src/test/java/org/apache/griffin/core/measure/ExternalMeasureOperationImplTest.java new file mode 100644 index 0000000..dee01cb --- /dev/null +++ b/service/src/test/java/org/apache/griffin/core/measure/ExternalMeasureOperationImplTest.java @@ -0,0 +1,102 @@ +/* +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.exception.GriffinException; +import org.apache.griffin.core.job.entity.VirtualJob; +import org.apache.griffin.core.job.repo.VirtualJobRepo; +import org.apache.griffin.core.measure.entity.ExternalMeasure; +import org.apache.griffin.core.measure.repo.ExternalMeasureRepo; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Matchers; +import org.mockito.Mock; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.apache.griffin.core.util.EntityHelper.createExternalMeasure; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +@RunWith(SpringRunner.class) +public class ExternalMeasureOperationImplTest { + + @InjectMocks + private ExternalMeasureOperationImpl operation; + + @Mock + private ExternalMeasureRepo measureRepo; + @Mock + private VirtualJobRepo jobRepo; + + @Before + public void setup() { + } + + + @Test + public void testCreateForSuccess() { + ExternalMeasure measure = createExternalMeasure("view_item_hourly"); + given(measureRepo.save(measure)).willReturn(measure); + given(jobRepo.save(Matchers.any(VirtualJob.class))).willReturn(new VirtualJob()); + + operation.create(measure); + verify(jobRepo, times(1)).save(new VirtualJob()); + } + + @Test(expected = GriffinException.BadRequestException.class) + public void testCreateForFailureWithBlankMetricName() { + String measureName = "view_item_hourly"; + ExternalMeasure measure = createExternalMeasure(measureName); + measure.setMetricName(" "); + operation.create(measure); + } + + @Test + public void testUpdateForSuccess() { + ExternalMeasure measure = createExternalMeasure("view_item_hourly"); + measure.setId(1L); + given(measureRepo.findOne(1L)).willReturn(measure); + given(measureRepo.save(Matchers.any(ExternalMeasure.class))).willReturn(measure); + + operation.create(measure); + verify(measureRepo, times(1)).save(Matchers.any(ExternalMeasure.class)); + } + + @Test(expected = GriffinException.BadRequestException.class) + public void testUpdateForFailureWithBlankMetricName() { + String measureName = "view_item_hourly"; + ExternalMeasure measure = createExternalMeasure(measureName); + measure.setMetricName(" "); + + operation.update(measure); + } + + @Test + public void testDeleteForSuccess() { + ExternalMeasure measure = createExternalMeasure("view_item_hourly"); + given(measureRepo.save(measure)).willReturn(measure); + + operation.delete(measure); + verify(measureRepo, times(1)).save(measure); + } +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/measure/GriffinMeasureOperationImplTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/GriffinMeasureOperationImplTest.java b/service/src/test/java/org/apache/griffin/core/measure/GriffinMeasureOperationImplTest.java new file mode 100644 index 0000000..47f218a --- /dev/null +++ b/service/src/test/java/org/apache/griffin/core/measure/GriffinMeasureOperationImplTest.java @@ -0,0 +1,120 @@ +/* +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.exception.GriffinException; +import org.apache.griffin.core.job.JobServiceImpl; +import org.apache.griffin.core.measure.entity.DataConnector; +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.MeasureRepo; +import org.junit.Before; +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 static org.apache.griffin.core.util.EntityHelper.createDataConnector; +import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure; +import static org.junit.Assert.assertEquals; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; + +@RunWith(SpringRunner.class) +public class GriffinMeasureOperationImplTest { + + @InjectMocks + private GriffinMeasureOperationImpl operation; + + @Mock + private MeasureRepo<Measure> measureRepo; + @Mock + private DataConnectorRepo dcRepo; + @Mock + private JobServiceImpl jobService; + + + @Before + public void setup() { + } + + @Test + public void testCreateForSuccess() throws Exception { + Measure measure = createGriffinMeasure("view_item_hourly"); + given(measureRepo.save(measure)).willReturn(measure); + + Measure m = operation.create(measure); + assertEquals(m.getName(), measure.getName()); + } + + @Test(expected = GriffinException.BadRequestException.class) + public void testCreateForFailureWithConnectorExist() throws Exception { + Measure measure = createGriffinMeasure("view_item_hourly"); + DataConnector dc = new DataConnector("source_name", "1h", "1.2", null); + given(dcRepo.findByConnectorNames(Arrays.asList("source_name", "target_name"))).willReturn(Arrays.asList(dc)); + + operation.create(measure); + } + + @Test(expected = GriffinException.BadRequestException.class) + public void testCreateForFailureWithConnectorNull() 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); + + operation.create(measure); + } + + @Test + public void testUpdateForSuccess() throws Exception { + Measure measure = createGriffinMeasure("view_item_hourly"); + given(measureRepo.save(measure)).willReturn(measure); + + operation.update(measure); + verify(measureRepo, times(1)).save(measure); + } + + @Test + public void testDeleteForSuccess() throws Exception { + Measure measure = createGriffinMeasure("view_item_hourly"); + measure.setId(1L); + doNothing().when(jobService).deleteJobsRelateToMeasure(1L); + given(measureRepo.save(measure)).willReturn(measure); + + operation.update(measure); + verify(measureRepo, times(1)).save(measure); + } + + @Test(expected = GriffinException.ServiceException.class) + public void testDeleteForFailureWithPauseJob() throws Exception { + Measure measure = createGriffinMeasure("view_item_hourly"); + measure.setId(1L); + doThrow(new GriffinException.ServiceException("Service exception", new RuntimeException())) + .when(jobService).deleteJobsRelateToMeasure(1L); + + operation.delete(measure); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java index 5eb5a11..c564333 100644 --- a/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java +++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureControllerTest.java @@ -19,45 +19,54 @@ under the License. package org.apache.griffin.core.measure; +import org.apache.griffin.core.exception.GriffinException; +import org.apache.griffin.core.exception.GriffinExceptionHandler; +import org.apache.griffin.core.exception.GriffinExceptionMessage; +import org.apache.griffin.core.measure.entity.GriffinMeasure; import org.apache.griffin.core.measure.entity.Measure; -import org.apache.griffin.core.util.GriffinOperationMessage; import org.apache.griffin.core.util.JsonUtil; import org.apache.griffin.core.util.URLHelper; 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.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure; -import static org.apache.griffin.core.util.GriffinOperationMessage.*; import static org.hamcrest.CoreMatchers.is; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doThrow; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(SpringRunner.class) -@WebMvcTest(value = MeasureController.class, secure = false) public class MeasureControllerTest { - @Autowired + private MockMvc mvc; - @MockBean - private MeasureService service; + @Mock + private MeasureServiceImpl service; + + @InjectMocks + private MeasureController controller; @Before public void setup() { - + mvc = MockMvcBuilders + .standaloneSetup(controller) + .setControllerAdvice(new GriffinExceptionHandler()) + .build(); } @Test @@ -84,66 +93,63 @@ public class MeasureControllerTest { @Test public void testDeleteMeasuresByIdForSuccess() throws Exception { - given(service.deleteMeasureById(1L)).willReturn(DELETE_MEASURE_BY_ID_SUCCESS); + doNothing().when(service).deleteMeasureById(1L); mvc.perform(delete(URLHelper.API_VERSION_PATH + "/measures/1")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(202))); + .andExpect(status().isNoContent()); } @Test public void testDeleteMeasuresByIdForNotFound() throws Exception { - given(service.deleteMeasureById(1L)).willReturn(RESOURCE_NOT_FOUND); + doThrow(new GriffinException.NotFoundException(GriffinExceptionMessage.MEASURE_ID_DOES_NOT_EXIST)) + .when(service).deleteMeasureById(1L); mvc.perform(delete(URLHelper.API_VERSION_PATH + "/measures/1")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(400))); + .andExpect(status().isNotFound()); } @Test - public void testDeleteMeasuresByIdForFail() throws Exception { - given(service.deleteMeasureById(1L)).willReturn(DELETE_MEASURE_BY_ID_FAIL); + public void testDeleteMeasuresByIdForGriffinFailureWithException() throws Exception { + doThrow(new GriffinException.ServiceException("Failed to delete job", new Exception())) + .when(service).deleteMeasureById(1L); mvc.perform(delete(URLHelper.API_VERSION_PATH + "/measures/1")) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(402))); + .andExpect(status().isInternalServerError()); } @Test public void testUpdateMeasureForSuccess() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.updateMeasure(measure)).willReturn(UPDATE_MEASURE_SUCCESS); + doNothing().when(service).updateMeasure(measure); mvc.perform(put(URLHelper.API_VERSION_PATH + "/measures") .contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(204))); + .andExpect(status().isNoContent()); } @Test public void testUpdateMeasureForNotFound() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.updateMeasure(measure)).willReturn(RESOURCE_NOT_FOUND); + doThrow(new GriffinException.NotFoundException(GriffinExceptionMessage.MEASURE_ID_DOES_NOT_EXIST)) + .when(service).updateMeasure(measure); mvc.perform(put(URLHelper.API_VERSION_PATH + "/measures") .contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(400))); - + .andExpect(status().isNotFound()); } @Test - public void testUpdateMeasureForFail() throws Exception { + public void testUpdateMeasureForTypeMismatch() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.updateMeasure(measure)).willReturn(UPDATE_MEASURE_FAIL); + doThrow(new GriffinException.BadRequestException(GriffinExceptionMessage.MEASURE_TYPE_DOES_NOT_MATCH)) + .when(service).updateMeasure(measure); mvc.perform(put(URLHelper.API_VERSION_PATH + "/measures") .contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(404))); + .andExpect(status().isBadRequest()); } @Test @@ -163,37 +169,38 @@ public class MeasureControllerTest { @Test public void testCreateNewMeasureForSuccess() throws Exception { - Measure measure = createGriffinMeasure("view_item_hourly"); + GriffinMeasure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.createMeasure(measure)).willReturn(CREATE_MEASURE_SUCCESS); + given(service.createMeasure(measure)).willReturn(measure); mvc.perform(post(URLHelper.API_VERSION_PATH + "/measures") .contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(201))); + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.name", is("view_item_hourly"))); } @Test public void testCreateNewMeasureForFailWithDuplicate() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.createMeasure(measure)).willReturn(CREATE_MEASURE_FAIL_DUPLICATE); + doThrow(new GriffinException.ConflictException(GriffinExceptionMessage.MEASURE_NAME_ALREADY_EXIST)) + .when(service).createMeasure(measure); mvc.perform(post(URLHelper.API_VERSION_PATH + "/measures") .contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(410))); + .andExpect(status().isConflict()); } @Test - public void testCreateNewMeasureForFailWithSaveException() throws Exception { + public void testCreateNewMeasureForFailWithInvalidParams() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); String measureJson = JsonUtil.toJson(measure); - given(service.createMeasure(measure)).willReturn(GriffinOperationMessage.CREATE_MEASURE_FAIL); + doThrow(new GriffinException.BadRequestException(GriffinExceptionMessage.MISSING_METRIC_NAME)) + .when(service).createMeasure(measure); - mvc.perform(post(URLHelper.API_VERSION_PATH + "/measures").contentType(MediaType.APPLICATION_JSON).content(measureJson)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.code", is(401))); + mvc.perform(post(URLHelper.API_VERSION_PATH + "/measures") + .contentType(MediaType.APPLICATION_JSON).content(measureJson)) + .andExpect(status().isBadRequest()); } http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgControllerTest.java ---------------------------------------------------------------------- diff --git a/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgControllerTest.java b/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgControllerTest.java index df7fdca..2fd63d9 100644 --- a/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgControllerTest.java +++ b/service/src/test/java/org/apache/griffin/core/measure/MeasureOrgControllerTest.java @@ -19,7 +19,6 @@ under the License. package org.apache.griffin.core.measure; -import org.apache.griffin.core.job.JobService; import org.apache.griffin.core.util.URLHelper; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,8 +34,6 @@ import java.util.List; import java.util.Map; import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; -import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.hasSize; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -53,9 +50,6 @@ public class MeasureOrgControllerTest { @MockBean private MeasureOrgService measureOrgService; - @MockBean - private JobService jobService; - @Test public void testGetOrgs() throws Exception { String org = "orgName"; http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/6b1a7000/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 857d35f..16e235a 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 @@ -20,79 +20,43 @@ under the License. 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.exception.GriffinException; 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.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.mockito.InjectMocks; +import org.mockito.Mock; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedList; +import java.util.Collections; import java.util.List; -import static org.apache.griffin.core.util.EntityHelper.*; -import static org.apache.griffin.core.util.GriffinOperationMessage.*; +import static org.apache.griffin.core.util.EntityHelper.createExternalMeasure; +import static org.apache.griffin.core.util.EntityHelper.createGriffinMeasure; import static org.junit.Assert.assertEquals; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.*; @RunWith(SpringRunner.class) public class MeasureServiceImplTest { - @TestConfiguration - public static class MeasureServiceConf { - @Bean - public MeasureServiceImpl measureService() { - return new MeasureServiceImpl(); - } - - @Bean(name = "griffinOperation") - public MeasureOperation griffinOperation() { - return new GriffinMeasureOperationImpl(); - } - - @Bean(name = "externalOperation") - public MeasureOperation externalOperation() { - return new ExternalMeasureOperationImpl(); - } - } - - @Autowired + @InjectMocks private MeasureServiceImpl service; - @MockBean - private ExternalMeasureRepo externalMeasureRepo; + @Mock + private MeasureOperation externalOp; - @MockBean - private GriffinMeasureRepo griffinMeasureRepo; + @Mock + private MeasureOperation griffinOp; - @MockBean + @Mock private MeasureRepo<Measure> measureRepo; - @MockBean - private JobServiceImpl jobService; - - @MockBean - private DataConnectorRepo dataConnectorRepo; - - @MockBean - private VirtualJobRepo jobRepo; - @Before public void setup() { } @@ -100,7 +64,8 @@ public class MeasureServiceImplTest { @Test public void testGetAllMeasures() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); - given(measureRepo.findByDeleted(false)).willReturn(Arrays.asList(measure)); + given(measureRepo.findByDeleted(false)).willReturn(Collections.singletonList(measure)); + List<Measure> measures = service.getAllAliveMeasures(); assertEquals(measures.size(), 1); assertEquals(measures.get(0).getName(), "view_item_hourly"); @@ -110,6 +75,7 @@ public class MeasureServiceImplTest { public void testGetMeasuresById() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); given(measureRepo.findByIdAndDeleted(1L, false)).willReturn(measure); + Measure m = service.getMeasureById(1); assertEquals(m.getName(), measure.getName()); } @@ -118,7 +84,8 @@ public class MeasureServiceImplTest { public void testGetAliveMeasuresByOwner() throws Exception { String owner = "test"; Measure measure = createGriffinMeasure("view_item_hourly"); - given(measureRepo.findByOwnerAndDeleted(owner, false)).willReturn(Arrays.asList(measure)); + given(measureRepo.findByOwnerAndDeleted(owner, false)).willReturn(Collections.singletonList(measure)); + List<Measure> measures = service.getAliveMeasuresByOwner(owner); assertEquals(measures.get(0).getName(), measure.getName()); } @@ -129,201 +96,105 @@ public class MeasureServiceImplTest { 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); - } + doNothing().when(griffinOp).delete(measure); - @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); + service.deleteMeasureById(measure.getId()); + verify(griffinOp, times(1)).delete(measure); } @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 { + public void testDeleteMeasuresByIdForExternalSuccess() { 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); - } + doNothing().when(externalOp).delete(measure); - @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); + service.deleteMeasureById(1L); + verify(externalOp, times(1)).delete(measure); } - @Test - public void testDeleteMeasuresByIdForFailureWithNotFound() throws Exception { + @Test(expected = GriffinException.NotFoundException.class) + public void testDeleteMeasuresByIdFailureWithNotFound() { given(measureRepo.findByIdAndDeleted(1L, false)).willReturn(null); - GriffinOperationMessage message = service.deleteMeasureById(1L); - assertEquals(message, RESOURCE_NOT_FOUND); - } - - @Test - public void testCreateMeasureForGriffinSuccess() throws Exception { - String measureName = "view_item_hourly"; - GriffinMeasure measure = createGriffinMeasure(measureName); - given(measureRepo.findByNameAndDeleted(measureName, false)).willReturn(new ArrayList<>()); - GriffinOperationMessage message = service.createMeasure(measure); - assertEquals(message, CREATE_MEASURE_SUCCESS); - } - @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); + service.deleteMeasureById(1L); } - @Test - 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(expected = GriffinException.ServiceException.class) + public void testDeleteMeasuresByIdForGriffinFailureWithException() throws Exception { + GriffinMeasure measure = createGriffinMeasure("externalMeasure"); + measure.setId(1L); + given(measureRepo.findByIdAndDeleted(measure.getId(), false)).willReturn(measure); + doThrow(new GriffinException.ServiceException("Failed to delete job", new Exception())) + .when(griffinOp).delete(measure); - @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); + service.deleteMeasureById(1L); } @Test - public void testCreateMeasureForExternalSuccess() throws Exception { + public void testCreateMeasureForGriffinSuccess() throws Exception { String measureName = "view_item_hourly"; - ExternalMeasure measure = createExternalMeasure(measureName); + GriffinMeasure griffinMeasure = createGriffinMeasure(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); - } + given(griffinOp.create(griffinMeasure)).willReturn(griffinMeasure); - @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); + Measure measure = service.createMeasure(griffinMeasure); + assertEquals(measure.getName(), griffinMeasure.getName()); } @Test - public void testCreateMeasureForExternalFailureWithException() throws Exception { + public void testCreateMeasureForExternalSuccess() { String measureName = "view_item_hourly"; - ExternalMeasure measure = createExternalMeasure(measureName); + ExternalMeasure externalMeasure = 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); + given(externalOp.create(externalMeasure)).willReturn(externalMeasure); + Measure measure = service.createMeasure(externalMeasure); + assertEquals(measure.getName(), externalMeasure.getName()); } - @Test - public void testCreateMeasureForFailureWithRepeat() throws Exception { + @Test(expected = GriffinException.ConflictException.class) + public void testCreateMeasureForFailureWithDuplicate() 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); - } + given(measureRepo.findByNameAndDeleted(measureName, false)).willReturn(Collections.singletonList(measure)); + service.createMeasure(measure); + } @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); + doNothing().when(griffinOp).update(measure); + + service.updateMeasure(measure); + verify(griffinOp, times(1)).update(measure); } - @Test + @Test(expected = GriffinException.BadRequestException.class) 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); + + service.updateMeasure(griffinMeasure); } - @Test - public void testUpdateMeasureForGriffinFailureWithNotFound() throws Exception { + @Test(expected = GriffinException.NotFoundException.class) + public void testUpdateMeasureForFailureWithNotFound() throws Exception { Measure measure = createGriffinMeasure("view_item_hourly"); given(measureRepo.findByIdAndDeleted(measure.getId(), false)).willReturn(null); - GriffinOperationMessage message = service.updateMeasure(measure); - 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); + service.updateMeasure(measure); } @Test - public void testUpdateMeasureForExternalSuccess() throws Exception { + public void testUpdateMeasureForExternal() { 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); - } + doNothing().when(externalOp).update(measure); - @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); + service.updateMeasure(measure); + verify(externalOp, times(1)).update(measure); } - }
