diff --git a/dolphinscheduler-api/pom.xml b/dolphinscheduler-api/pom.xml
index 06a444aa6d..014799b0b6 100644
--- a/dolphinscheduler-api/pom.xml
+++ b/dolphinscheduler-api/pom.xml
@@ -250,5 +250,23 @@
${servlet-api.version}
+
+ org.powermock
+ powermock-module-junit4
+ test
+
+
+
+ org.powermock
+ powermock-api-mockito2
+ test
+
+
+ org.mockito
+ mockito-core
+
+
+
+
\ No newline at end of file
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UdfFuncServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UdfFuncServiceTest.java
index 814a9ee7cd..9ec24bbb50 100644
--- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UdfFuncServiceTest.java
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/UdfFuncServiceTest.java
@@ -16,43 +16,211 @@
*/
package org.apache.dolphinscheduler.api.service;
-import org.apache.dolphinscheduler.api.ApiApplicationServer;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.dolphinscheduler.api.enums.Status;
import org.apache.dolphinscheduler.api.utils.PageInfo;
+import org.apache.dolphinscheduler.api.utils.Result;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.UdfType;
import org.apache.dolphinscheduler.common.enums.UserType;
+import org.apache.dolphinscheduler.common.utils.CollectionUtils;
+import org.apache.dolphinscheduler.common.utils.PropertyUtils;
+import org.apache.dolphinscheduler.dao.entity.Resource;
+import org.apache.dolphinscheduler.dao.entity.UdfFunc;
import org.apache.dolphinscheduler.dao.entity.User;
+import org.apache.dolphinscheduler.dao.mapper.ResourceMapper;
+import org.apache.dolphinscheduler.dao.mapper.UDFUserMapper;
+import org.apache.dolphinscheduler.dao.mapper.UdfFuncMapper;
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;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
import java.util.Map;
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = ApiApplicationServer.class)
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(PropertyUtils.class)
public class UdfFuncServiceTest {
private static final Logger logger = LoggerFactory.getLogger(UdfFuncServiceTest.class);
- @Autowired
+ @InjectMocks
private UdfFuncService udfFuncService;
+ @Mock
+ private ResourceMapper resourceMapper;
+ @Mock
+ private UdfFuncMapper udfFuncMapper;
+ @Mock
+ private UDFUserMapper udfUserMapper;
+
+
+ @Before
+ public void setUp() {
+ PowerMockito.mockStatic(PropertyUtils.class);
+ }
+
+ @Test
+ public void testCreateUdfFunction(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ //hdfs not start
+ Result result = udfFuncService.createUdfFunction(getLoginUser(), "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, Integer.MAX_VALUE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP.getMsg(),result.getMsg());
+ //resource not exist
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = udfFuncService.createUdfFunction(getLoginUser(), "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, Integer.MAX_VALUE);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(),result.getMsg());
+ // success
+ PowerMockito.when(resourceMapper.selectById(1)).thenReturn(getResource());
+ result = udfFuncService.createUdfFunction(getLoginUser(), "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, 1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+ }
@Test
- public void queryUdfFuncListPaging(){
+ public void testQueryUdfFuncDetail(){
+
+ PowerMockito.when(udfFuncMapper.selectById(1)).thenReturn(getUdfFunc());
+ //resource not exist
+ Map result = udfFuncService.queryUdfFuncDetail(2);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST,result.get(Constants.STATUS));
+ // success
+ result = udfFuncService.queryUdfFuncDetail(1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ }
+
+ @Test
+ public void testUpdateUdfFunc(){
+
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(false);
+ PowerMockito.when(udfFuncMapper.selectUdfById(1)).thenReturn(getUdfFunc());
+ PowerMockito.when(resourceMapper.selectById(1)).thenReturn(getResource());
+
+ //UDF_FUNCTION_NOT_EXIST
+ Map result = udfFuncService.updateUdfFunc(12, "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, 1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.UDF_FUNCTION_NOT_EXIST,result.get(Constants.STATUS));
+
+ //HDFS_NOT_STARTUP
+ result = udfFuncService.updateUdfFunc(1, "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, 1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.HDFS_NOT_STARTUP,result.get(Constants.STATUS));
+
+ //RESOURCE_NOT_EXIST
+ PowerMockito.when(udfFuncMapper.selectUdfById(11)).thenReturn(getUdfFunc());
+ PowerMockito.when(PropertyUtils.getResUploadStartupState()).thenReturn(true);
+ result = udfFuncService.updateUdfFunc(11, "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, 12);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.RESOURCE_NOT_EXIST,result.get(Constants.STATUS));
+
+ //success
+ result = udfFuncService.updateUdfFunc(11, "UdfFuncServiceTest", "org.apache.dolphinscheduler.api.service.UdfFuncServiceTest", "String", "UdfFuncServiceTest", "UdfFuncServiceTest", UdfType.HIVE, 1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+
+ }
+
+ @Test
+ public void testQueryUdfFuncListPaging(){
+
+ IPage page = new Page<>(1,10);
+ page.setTotal(1L);
+ page.setRecords(getList());
+ Mockito.when(udfFuncMapper.queryUdfFuncPaging(Mockito.any(Page.class), Mockito.eq(0),Mockito.eq("test"))).thenReturn(page);
+ Map result = udfFuncService.queryUdfFuncListPaging(getLoginUser(),"test",1,10);
+ logger.info(result.toString());
+ PageInfo pageInfo = (PageInfo) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(pageInfo.getLists()));
+ }
+
+ @Test
+ public void testQueryResourceList(){
+ Mockito.when(udfFuncMapper.getUdfFuncByType(1, 1)).thenReturn(getList());
+ Map result = udfFuncService.queryResourceList(getLoginUser(),1);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS,result.get(Constants.STATUS));
+ List udfFuncList = (List) result.get(Constants.DATA_LIST);
+ Assert.assertTrue(CollectionUtils.isNotEmpty(udfFuncList));
+ }
+
+ @Test
+ public void testDelete(){
+ Result result= udfFuncService.delete(122);
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+ }
+
+ @Test
+ public void testVerifyUdfFuncByName(){
+
+ //success
+ Mockito.when(udfFuncMapper.queryUdfByIdStr(null, "UdfFuncServiceTest")).thenReturn(getList());
+ Result result = udfFuncService.verifyUdfFuncByName("test");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.SUCCESS.getMsg(),result.getMsg());
+ //exist
+ result = udfFuncService.verifyUdfFuncByName("UdfFuncServiceTest");
+ logger.info(result.toString());
+ Assert.assertEquals(Status.UDF_FUNCTION_EXISTS.getMsg(),result.getMsg());
+ }
+
+ /**
+ * create admin user
+ * @return
+ */
+ private User getLoginUser(){
User loginUser = new User();
- loginUser.setId(-1);
- loginUser.setUserType(UserType.GENERAL_USER);
+ loginUser.setUserType(UserType.ADMIN_USER);
+ loginUser.setId(1);
+ return loginUser;
+ }
+
+ /**
+ * get resourceId
+ */
+ private Resource getResource(){
- Map map = udfFuncService.queryUdfFuncListPaging(loginUser, "", 1, 10);
- Assert.assertEquals(Status.SUCCESS, map.get(Constants.STATUS));
+ Resource resource = new Resource();
+ resource.setId(1);
+ resource.setAlias("test");
+ return resource;
+ }
- PageInfo pageInfo = (PageInfo) map.get("data");
- logger.info(pageInfo.getLists().toString());
+ private List getList(){
+ List udfFuncList = new ArrayList<>();
+ udfFuncList.add(getUdfFunc());
+ return udfFuncList;
+ }
+ /**
+ * get UdfFunc id
+ */
+ private UdfFunc getUdfFunc(){
+ UdfFunc udfFunc = new UdfFunc();
+ udfFunc.setFuncName("UdfFuncServiceTest");
+ udfFunc.setClassName("org.apache.dolphinscheduler.api.service.UdfFuncServiceTest");
+ udfFunc.setResourceId(0);
+ udfFunc.setResourceName("UdfFuncServiceTest");
+ udfFunc.setCreateTime(new Date());
+ udfFunc.setDatabase("database");
+ udfFunc.setUpdateTime(new Date());
+ udfFunc.setType(UdfType.HIVE);
+ return udfFunc;
}
}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fafa7be6ef..5e94b16768 100644
--- a/pom.xml
+++ b/pom.xml
@@ -675,6 +675,7 @@
**/api/service/WorkerGroupServiceTest.java
**/api/service/AlertGroupServiceTest.java
**/api/service/ProjectServiceTest.java
+ **/api/service/UdfFuncServiceTest.java
**/alert/utils/ExcelUtilsTest.java
**/alert/utils/FuncUtilsTest.java
**/alert/utils/JSONUtilsTest.java