diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java index 61dc1a7193..2587290fd3 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/LoggerService.java @@ -84,7 +84,12 @@ public class LoggerService { if (taskInstance == null){ throw new RuntimeException("task instance is null"); } + String host = taskInstance.getHost(); + if(StringUtils.isEmpty(host)){ + throw new RuntimeException("task instance host is null"); + } + LogClient logClient = new LogClient(host, Constants.RPC_PORT); return logClient.getLogBytes(taskInstance.getLogPath()); } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java index 798e064d79..cec7102ce1 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/LoggerServiceTest.java @@ -16,37 +16,95 @@ */ package org.apache.dolphinscheduler.api.service; -import org.apache.dolphinscheduler.api.ApiApplicationServer; import org.apache.dolphinscheduler.api.enums.Status; +import org.apache.dolphinscheduler.api.log.LogClient; import org.apache.dolphinscheduler.api.utils.Result; -import org.apache.dolphinscheduler.common.enums.UserType; -import org.apache.dolphinscheduler.dao.entity.User; +import org.apache.dolphinscheduler.dao.ProcessDao; +import org.apache.dolphinscheduler.dao.entity.TaskInstance; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +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 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; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = ApiApplicationServer.class) +@RunWith(PowerMockRunner.class) +@PrepareForTest({LoggerService.class}) public class LoggerServiceTest { + private static final Logger logger = LoggerFactory.getLogger(LoggerServiceTest.class); - @Autowired + @InjectMocks private LoggerService loggerService; + @Mock + private ProcessDao processDao; + @Mock + private LogClient logClient; - @Test - public void queryDataSourceList(){ + @Before + public void setUp() { + + try { + PowerMockito.whenNew(LogClient.class).withAnyArguments().thenReturn(logClient); + } catch (Exception e) { + logger.error("setUp error: {}",e.getMessage()); + } + } - User loginUser = new User(); - loginUser.setId(27); - loginUser.setUserType(UserType.GENERAL_USER); + @Test + public void testQueryDataSourceList(){ - Result result = loggerService.queryLog(-1, 0, 100); + TaskInstance taskInstance = new TaskInstance(); + Mockito.when(processDao.findTaskInstanceById(1)).thenReturn(taskInstance); + Result result = loggerService.queryLog(2,1,1); + //TASK_INSTANCE_NOT_FOUND + Assert.assertEquals(Status.TASK_INSTANCE_NOT_FOUND.getCode(),result.getCode().intValue()); + //HOST NOT FOUND + result = loggerService.queryLog(1,1,1); Assert.assertEquals(Status.TASK_INSTANCE_NOT_FOUND.getCode(),result.getCode().intValue()); + + //SUCCESS + taskInstance.setHost("127.0.0.1"); + taskInstance.setLogPath("/temp/log"); + Mockito.when(logClient.rollViewLog("/temp/log",1,1 )).thenReturn("test"); + Mockito.when(processDao.findTaskInstanceById(1)).thenReturn(taskInstance); + result = loggerService.queryLog(1,1,1); + Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); } + + @Test + public void testGetLogBytes(){ + + TaskInstance taskInstance = new TaskInstance(); + Mockito.when(processDao.findTaskInstanceById(1)).thenReturn(taskInstance); + + //task instance is null + try{ + loggerService.getLogBytes(2); + }catch (Exception e){ + logger.error("testGetLogBytes error: {}","task instance is null"); + } + + //task instance host is null + try{ + loggerService.getLogBytes(1); + }catch (Exception e){ + logger.error("testGetLogBytes error: {}","task instance host is null"); + } + + //success + Mockito.when(logClient.getLogBytes("/temp/log")).thenReturn(new byte[]{}); + taskInstance.setHost("127.0.0.1"); + taskInstance.setLogPath("/temp/log"); + byte [] result = loggerService.getLogBytes(1); + Assert.assertEquals(0,result.length); + } + } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 875577c672..1b88c77418 100644 --- a/pom.xml +++ b/pom.xml @@ -699,6 +699,7 @@ **/api/service/ExecutorService2Test.java **/api/service/BaseServiceTest.java **/api/service/BaseDAGServiceTest.java + **/api/service/LoggerServiceTest.java **/alert/utils/ExcelUtilsTest.java **/alert/utils/FuncUtilsTest.java **/alert/utils/JSONUtilsTest.java