diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java index f4becbe36d..b95782711f 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/DataAnalysisService.java @@ -108,8 +108,8 @@ public class DataAnalysisService extends BaseService{ List taskInstanceStateCounts = taskInstanceMapper.countTaskInstanceStateByUser(start, end, projectIds); - TaskCountDto taskCountResult = new TaskCountDto(taskInstanceStateCounts); - if (taskInstanceStateCounts != null) { + if (taskInstanceStateCounts != null && !taskInstanceStateCounts.isEmpty()) { + TaskCountDto taskCountResult = new TaskCountDto(taskInstanceStateCounts); result.put(Constants.DATA_LIST, taskCountResult); putMsg(result, Status.SUCCESS); } else { @@ -155,8 +155,8 @@ public class DataAnalysisService extends BaseService{ processInstanceMapper.countInstanceStateByUser(start, end, projectIdArray); - TaskCountDto taskCountResult = new TaskCountDto(processInstanceStateCounts); - if (processInstanceStateCounts != null) { + if (processInstanceStateCounts != null && !processInstanceStateCounts.isEmpty()) { + TaskCountDto taskCountResult = new TaskCountDto(processInstanceStateCounts); result.put(Constants.DATA_LIST, taskCountResult); putMsg(result, Status.SUCCESS); } else { @@ -340,7 +340,7 @@ public class DataAnalysisService extends BaseService{ if (StringUtils.isNotEmpty(taskQueueStr)){ String[] splits = taskQueueStr.split("_"); if (splits.length >= 4){ - tasksQueueIds[i++]=Integer.parseInt(splits[3]); + tasksQueueIds[i++] = Integer.parseInt(splits[3]); } } } @@ -350,7 +350,7 @@ public class DataAnalysisService extends BaseService{ if (StringUtils.isNotEmpty(taskKillStr)){ String[] splits = taskKillStr.split("-"); if (splits.length == 2){ - tasksKillIds[i++]=Integer.parseInt(splits[1]); + tasksKillIds[i++] = Integer.parseInt(splits[1]); } } } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataAnalysisServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataAnalysisServiceTest.java index 88098ba608..c7afd76cc6 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataAnalysisServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/DataAnalysisServiceTest.java @@ -16,36 +16,209 @@ */ package org.apache.dolphinscheduler.api.service; -import org.apache.dolphinscheduler.api.ApiApplicationServer; import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.common.Constants; +import org.apache.dolphinscheduler.common.enums.CommandType; +import org.apache.dolphinscheduler.common.enums.ExecutionStatus; import org.apache.dolphinscheduler.common.enums.UserType; +import org.apache.dolphinscheduler.common.queue.ITaskQueue; +import org.apache.dolphinscheduler.common.queue.TaskQueueFactory; +import org.apache.dolphinscheduler.common.utils.DateUtils; +import org.apache.dolphinscheduler.dao.ProcessDao; +import org.apache.dolphinscheduler.dao.entity.CommandCount; +import org.apache.dolphinscheduler.dao.entity.ExecuteStatusCount; +import org.apache.dolphinscheduler.dao.entity.Project; import org.apache.dolphinscheduler.dao.entity.User; +import org.apache.dolphinscheduler.dao.mapper.*; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = ApiApplicationServer.class) +@RunWith(PowerMockRunner.class) +@PrepareForTest({TaskQueueFactory.class}) public class DataAnalysisServiceTest { - private static final Logger logger = LoggerFactory.getLogger(DataAnalysisServiceTest.class); - - @Autowired + + @InjectMocks private DataAnalysisService dataAnalysisService; + @Mock + ProjectMapper projectMapper; + + @Mock + ProjectService projectService; + + @Mock + ProcessInstanceMapper processInstanceMapper; + + @Mock + ProcessDefinitionMapper processDefinitionMapper; + + @Mock + CommandMapper commandMapper; + + @Mock + ErrorCommandMapper errorCommandMapper; + + @Mock + TaskInstanceMapper taskInstanceMapper; + + @Mock + ITaskQueue taskQueue; + + @Mock + ProcessDao processDao; + + private Project project; + + private Map resultMap; + + private User user; + + @Before + public void setUp() { + + user = new User(); + project = new Project(); + project.setId(1); + resultMap = new HashMap<>(); + Mockito.when(projectMapper.selectById(1)).thenReturn(project); + Mockito.when(projectService.hasProjectAndPerm(user,project,resultMap)).thenReturn(true); + + } + + + @After + public void after(){ + + user = null; + projectMapper = null; + resultMap = null; + } + + @Test - public void countDefinitionByUser(){ - User loginUser = new User(); - loginUser.setId(27); - loginUser.setUserType(UserType.GENERAL_USER); - Map map = dataAnalysisService.countDefinitionByUser(loginUser, 21); - Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS)); + public void testCountTaskStateByProject(){ + + String startDate = "2020-02-11 16:02:18"; + String endDate = "2020-02-11 16:03:18"; + + //checkProject false + Map result = dataAnalysisService.countTaskStateByProject(user, 2, startDate, endDate); + Assert.assertTrue(result.isEmpty()); + + // task instance state count error + result = dataAnalysisService.countTaskStateByProject(user, 1, startDate, endDate); + Assert.assertEquals(Status.TASK_INSTANCE_STATE_COUNT_ERROR,result.get(Constants.STATUS)); + + //SUCCESS + Mockito.when(taskInstanceMapper.countTaskInstanceStateByUser(DateUtils.getScheduleDate(startDate), + DateUtils.getScheduleDate(endDate), new Integer[]{1})).thenReturn(getTaskInstanceStateCounts()); + + result = dataAnalysisService.countTaskStateByProject(user, 1, startDate, endDate); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + + } + + + @Test + public void testCountProcessInstanceStateByProject(){ + + String startDate = "2020-02-11 16:02:18"; + String endDate = "2020-02-11 16:03:18"; + //checkProject false + Map result = dataAnalysisService.countProcessInstanceStateByProject(user,2,startDate,endDate); + Assert.assertTrue(result.isEmpty()); + + //COUNT_PROCESS_INSTANCE_STATE_ERROR + result = dataAnalysisService.countProcessInstanceStateByProject(user,1,startDate,endDate); + Assert.assertEquals(Status.COUNT_PROCESS_INSTANCE_STATE_ERROR,result.get(Constants.STATUS)); + + //SUCCESS + Mockito.when(processInstanceMapper.countInstanceStateByUser(DateUtils.getScheduleDate(startDate), + DateUtils.getScheduleDate(endDate), new Integer[]{1})).thenReturn(getTaskInstanceStateCounts()); + result = dataAnalysisService.countProcessInstanceStateByProject(user,1,startDate,endDate); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + } + + @Test + public void testCountDefinitionByUser(){ + + Map result = dataAnalysisService.countDefinitionByUser(user,1); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + } + + + @Test + public void testCountCommandState(){ + + String startDate = "2020-02-11 16:02:18"; + String endDate = "2020-02-11 16:03:18"; + //checkProject false + Map result = dataAnalysisService.countCommandState(user,2,startDate,endDate); + Assert.assertTrue(result.isEmpty()); + List commandCounts = new ArrayList<>(1); + CommandCount commandCount = new CommandCount(); + commandCount.setCommandType(CommandType.START_PROCESS); + commandCounts.add(commandCount); + Mockito.when(commandMapper.countCommandState(0, DateUtils.getScheduleDate(startDate), + DateUtils.getScheduleDate(endDate), new Integer[]{1})).thenReturn(commandCounts); + + Mockito.when(errorCommandMapper.countCommandState( DateUtils.getScheduleDate(startDate), + DateUtils.getScheduleDate(endDate), new Integer[]{1})).thenReturn(commandCounts); + + result = dataAnalysisService.countCommandState(user,1,startDate,endDate); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + + } + + @Test + public void testCountQueueState(){ + + PowerMockito.mockStatic(TaskQueueFactory.class); + List taskQueueList = new ArrayList<>(1); + taskQueueList.add("1_0_1_1_-1"); + List taskKillList = new ArrayList<>(1); + taskKillList.add("1-0"); + PowerMockito.when(taskQueue.getAllTasks(Constants.DOLPHINSCHEDULER_TASKS_QUEUE)).thenReturn(taskQueueList); + PowerMockito.when(taskQueue.getAllTasks(Constants.DOLPHINSCHEDULER_TASKS_KILL)).thenReturn(taskKillList); + PowerMockito.when(TaskQueueFactory.getTaskQueueInstance()).thenReturn(taskQueue); + //checkProject false + Map result = dataAnalysisService.countQueueState(user,2); + Assert.assertTrue(result.isEmpty()); + + result = dataAnalysisService.countQueueState(user,1); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + //admin + user.setUserType(UserType.ADMIN_USER); + result = dataAnalysisService.countQueueState(user,1); + Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS)); + + } + + /** + * get list + * @return + */ + private List getTaskInstanceStateCounts(){ + + List taskInstanceStateCounts = new ArrayList<>(1); + ExecuteStatusCount executeStatusCount = new ExecuteStatusCount(); + executeStatusCount.setExecutionStatus(ExecutionStatus.RUNNING_EXEUTION); + taskInstanceStateCounts.add(executeStatusCount); + + return taskInstanceStateCounts; } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 77da183f53..53184e7412 100644 --- a/pom.xml +++ b/pom.xml @@ -701,6 +701,7 @@ **/api/service/BaseServiceTest.java **/api/service/BaseDAGServiceTest.java **/api/service/LoggerServiceTest.java + **/api/service/DataAnalysisServiceTest.java **/alert/utils/ExcelUtilsTest.java **/alert/utils/FuncUtilsTest.java **/alert/utils/JSONUtilsTest.java