This is an automated email from the ASF dual-hosted git repository.

caishunfeng pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new bcf1b67255 [Fix] add resource full name check (#15757)
bcf1b67255 is described below

commit bcf1b672557f71480dbffe1be35338c4f7bed18e
Author: caishunfeng <[email protected]>
AuthorDate: Mon Mar 25 16:40:04 2024 +0800

    [Fix] add resource full name check (#15757)
    
    * add resource full name check
    
    * fix UT
    
    * fix query params error
---
 .../api/service/impl/ResourcesServiceImpl.java     | 114 +++++--------
 .../api/service/ResourcesServiceTest.java          | 178 ++++++++-------------
 .../components/resource/table/use-table.ts         |   4 +-
 3 files changed, 107 insertions(+), 189 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
index e56bd79a0c..e6341f021d 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java
@@ -127,12 +127,6 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
 
         String tenantCode = getTenantCode(user);
 
-        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, "")) {
-            log.error("current user does not have permission");
-            putMsg(result, Status.NO_CURRENT_OPERATING_PERMISSION);
-            return result;
-        }
-
         String userResRootPath = ResourceType.UDF.equals(type) ? 
storageOperate.getUdfDir(tenantCode)
                 : storageOperate.getResDir(tenantCode);
         String fullName = !currentDir.contains(userResRootPath) ? 
userResRootPath + name : currentDir + name;
@@ -178,12 +172,6 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
 
         String tenantCode = getTenantCode(user);
 
-        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, "")) {
-            log.error("current user does not have permission");
-            putMsg(result, Status.NO_CURRENT_OPERATING_PERMISSION);
-            return result;
-        }
-
         result = verifyFile(name, type, file);
         if (!result.getCode().equals(Status.SUCCESS.getCode())) {
             return result;
@@ -464,16 +452,15 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
         }
 
         String tenantCode = getTenantCode(user);
-        String baseDir = isAdmin(loginUser) ? 
storageOperate.getDir(ResourceType.ALL, tenantCode)
-                : storageOperate.getDir(type, tenantCode);
-        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, resTenantCode)
-                || (StringUtils.isNotBlank(fullName) && 
!StringUtils.startsWith(fullName, baseDir))) {
+        checkFullName(tenantCode, fullName);
+
+        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, resTenantCode)) 
{
             log.error("current user does not have permission");
             putMsg(result, Status.NO_CURRENT_OPERATING_PERMISSION);
             return result;
         }
 
-        List<StorageEntity> resourcesList = new ArrayList<>();
+        List<StorageEntity> resourcesList;
         try {
             resourcesList = queryStorageEntityList(loginUser, fullName, type, 
tenantCode, false);
         } catch (ServiceException e) {
@@ -645,46 +632,33 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
         }
 
         String tenantCode = getTenantCode(user);
+        checkFullName(tenantCode, fullName);
 
-        String defaultPath = "";
-        List<StorageEntity> resourcesList = new ArrayList<>();
+        String baseDir = storageOperate.getDir(type, tenantCode);
 
+        List<StorageEntity> resourcesList = new ArrayList<>();
         if (StringUtils.isBlank(fullName)) {
             if (isAdmin(loginUser)) {
                 List<User> userList = userMapper.selectList(null);
                 Set<String> visitedTenantEntityCode = new HashSet<>();
                 for (User userEntity : userList) {
-
                     String tenantEntityCode = getTenantCode(userEntity);
                     if (!visitedTenantEntityCode.contains(tenantEntityCode)) {
-                        defaultPath = 
storageOperate.getResDir(tenantEntityCode);
-                        if (type.equals(ResourceType.UDF)) {
-                            defaultPath = 
storageOperate.getUdfDir(tenantEntityCode);
-                        }
-                        
resourcesList.addAll(storageOperate.listFilesStatusRecursively(defaultPath, 
defaultPath,
+                        baseDir = storageOperate.getDir(type, 
tenantEntityCode);
+                        
resourcesList.addAll(storageOperate.listFilesStatusRecursively(baseDir, baseDir,
                                 tenantEntityCode, type));
                         visitedTenantEntityCode.add(tenantEntityCode);
                     }
                 }
             } else {
-                defaultPath = storageOperate.getResDir(tenantCode);
-                if (type.equals(ResourceType.UDF)) {
-                    defaultPath = storageOperate.getUdfDir(tenantCode);
-                }
-
-                resourcesList = 
storageOperate.listFilesStatusRecursively(defaultPath, defaultPath, tenantCode, 
type);
+                resourcesList = 
storageOperate.listFilesStatusRecursively(baseDir, baseDir, tenantCode, type);
             }
         } else {
-            defaultPath = storageOperate.getResDir(tenantCode);
-            if (type.equals(ResourceType.UDF)) {
-                defaultPath = storageOperate.getUdfDir(tenantCode);
-            }
-
-            resourcesList = 
storageOperate.listFilesStatusRecursively(fullName, defaultPath, tenantCode, 
type);
+            resourcesList = 
storageOperate.listFilesStatusRecursively(fullName, baseDir, tenantCode, type);
         }
 
         Visitor resourceTreeVisitor = new ResourceTreeVisitor(resourcesList);
-        result.put(Constants.DATA_LIST, 
resourceTreeVisitor.visit(defaultPath).getChildren());
+        result.put(Constants.DATA_LIST, 
resourceTreeVisitor.visit(baseDir).getChildren());
         putMsg(result, Status.SUCCESS);
 
         return result;
@@ -761,6 +735,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
         }
 
         String tenantCode = getTenantCode(user);
+        checkFullName(tenantCode, fullName);
 
         if (!isUserTenantValid(isAdmin(loginUser), tenantCode, resTenantCode)) 
{
             log.error("current user does not have permission");
@@ -768,10 +743,11 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
             return result;
         }
 
-        String defaultPath = storageOperate.getResDir(tenantCode);
+        String baseDir = storageOperate.getResDir(tenantCode);
+
         StorageEntity resource;
         try {
-            resource = storageOperate.getFileStatus(fullName, defaultPath, 
resTenantCode, null);
+            resource = storageOperate.getFileStatus(fullName, baseDir, 
resTenantCode, null);
         } catch (Exception e) {
             log.error(e.getMessage() + " Resource path: {}", fullName, e);
             putMsg(result, Status.RESOURCE_NOT_EXIST);
@@ -786,7 +762,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
 
         // recursively delete a folder
         List<String> allChildren =
-                storageOperate.listFilesStatusRecursively(fullName, 
defaultPath, resTenantCode, resource.getType())
+                storageOperate.listFilesStatusRecursively(fullName, baseDir, 
resTenantCode, resource.getType())
                         .stream().map(storageEntity -> 
storageEntity.getFullName()).collect(Collectors.toList());
 
         String[] allChildrenFullNameArray = 
allChildren.stream().toArray(String[]::new);
@@ -863,11 +839,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
             return result;
         }
 
-        String defaultPath = storageOperate.getResDir(resTenantCode);
-        if (type.equals(ResourceType.UDF)) {
-            defaultPath = storageOperate.getUdfDir(resTenantCode);
-        }
-
+        String defaultPath = storageOperate.getDir(type, resTenantCode);
         StorageEntity file;
         try {
             file = storageOperate.getFileStatus(defaultPath + fileName, 
defaultPath, resTenantCode, type);
@@ -904,6 +876,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
         }
 
         String tenantCode = getTenantCode(user);
+        checkFullName(tenantCode, fullName);
 
         if (!isUserTenantValid(isAdmin(loginUser), tenantCode, resTenantCode)) 
{
             log.error("current user does not have permission");
@@ -924,7 +897,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
             }
         }
 
-        List<String> content = new ArrayList<>();
+        List<String> content;
         try {
             if (storageOperate.exists(fullName)) {
                 content = storageOperate.vimFile(tenantCode, fullName, 
skipLineNum, limit);
@@ -977,12 +950,6 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
 
         String tenantCode = getTenantCode(user);
 
-        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, "")) {
-            log.error("current user does not have permission");
-            putMsg(result, Status.NO_CURRENT_OPERATING_PERMISSION);
-            return result;
-        }
-
         if (FileUtils.directoryTraversal(fileName)) {
             log.warn("File name verify failed, fileName:{}.", 
RegexUtils.escapeNRT(fileName));
             putMsg(result, Status.VERIFY_PARAMETER_NAME_FAILED);
@@ -1003,13 +970,8 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
 
         String name = fileName.trim() + "." + nameSuffix;
 
-        String fullName = "";
         String userResRootPath = storageOperate.getResDir(tenantCode);
-        if (!currentDir.contains(userResRootPath)) {
-            fullName = userResRootPath + name;
-        } else {
-            fullName = currentDir + name;
-        }
+        String fullName = currentDir.contains(userResRootPath) ? currentDir + 
name : userResRootPath + name;
 
         result = verifyResourceName(fullName, type, loginUser);
         if (!result.getCode().equals(Status.SUCCESS.getCode())) {
@@ -1063,11 +1025,9 @@ public class ResourcesServiceImpl extends 
BaseServiceImpl implements ResourcesSe
             putMsg(result, Status.USER_NOT_EXIST, loginUser.getId());
             return result;
         }
-        if (!fullName.startsWith(storageOperate.getResDir(resTenantCode))) {
-            throw new ServiceException("Resource file: " + fullName + " is 
illegal");
-        }
 
         String tenantCode = getTenantCode(user);
+        checkFullName(tenantCode, fullName);
 
         if (!isUserTenantValid(isAdmin(loginUser), tenantCode, resTenantCode)) 
{
             log.error("current user does not have permission");
@@ -1178,6 +1138,7 @@ public class ResourcesServiceImpl extends BaseServiceImpl 
implements ResourcesSe
         }
 
         String tenantCode = getTenantCode(user);
+        checkFullName(tenantCode, fullName);
 
         String[] aliasArr = fullName.split("/");
         String alias = aliasArr[aliasArr.length - 1];
@@ -1280,12 +1241,6 @@ public class ResourcesServiceImpl extends 
BaseServiceImpl implements ResourcesSe
 
         String tenantCode = getTenantCode(user);
 
-        if (!isUserTenantValid(isAdmin(loginUser), tenantCode, "")) {
-            log.error("current user does not have permission");
-            putMsg(result, Status.NO_CURRENT_OPERATING_PERMISSION);
-            return result;
-        }
-
         String baseDir = isAdmin(loginUser) ? 
storageOperate.getDir(ResourceType.ALL, tenantCode)
                 : storageOperate.getDir(type, tenantCode);
 
@@ -1306,16 +1261,14 @@ public class ResourcesServiceImpl extends 
BaseServiceImpl implements ResourcesSe
      */
     private boolean isUserTenantValid(boolean isAdmin, String userTenantCode,
                                       String resTenantCode) throws 
ServiceException {
-        if (!isAdmin) {
-            resTenantCode = resTenantCode == null ? "" : resTenantCode;
-            if (!StringUtils.isBlank(resTenantCode) && 
!resTenantCode.equals(userTenantCode)) {
-                // if an ordinary user directly send a query API with a 
different tenantCode and fullName "",
-                // still he/she does not have read permission.
-                return false;
-            }
+        if (isAdmin) {
+            return true;
         }
-
-        return true;
+        if (StringUtils.isEmpty(resTenantCode)) {
+            // TODO: resource tenant code will be empty when query resources 
list, need to be optimized
+            return true;
+        }
+        return resTenantCode.equals(userTenantCode);
     }
 
     private String getTenantCode(User user) {
@@ -1325,4 +1278,11 @@ public class ResourcesServiceImpl extends 
BaseServiceImpl implements ResourcesSe
         }
         return tenant.getTenantCode();
     }
+
+    private void checkFullName(String userTenantCode, String fullName) {
+        String baseDir = storageOperate.getDir(ResourceType.ALL, 
userTenantCode);
+        if (StringUtils.isNotBlank(fullName) && 
!StringUtils.startsWith(fullName, baseDir)) {
+            throw new ServiceException("Resource file: " + fullName + " is 
illegal");
+        }
+    }
 }
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
index a01ce75a4c..0679b8892d 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ResourcesServiceTest.java
@@ -27,7 +27,6 @@ import 
org.apache.dolphinscheduler.api.dto.resources.ResourceComponent;
 import org.apache.dolphinscheduler.api.enums.Status;
 import org.apache.dolphinscheduler.api.exceptions.ServiceException;
 import 
org.apache.dolphinscheduler.api.permission.ResourcePermissionCheckService;
-import org.apache.dolphinscheduler.api.service.impl.BaseServiceImpl;
 import org.apache.dolphinscheduler.api.service.impl.ResourcesServiceImpl;
 import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
@@ -36,7 +35,6 @@ import org.apache.dolphinscheduler.common.enums.UserType;
 import org.apache.dolphinscheduler.common.utils.FileUtils;
 import org.apache.dolphinscheduler.common.utils.PropertyUtils;
 import org.apache.dolphinscheduler.dao.entity.Tenant;
-import org.apache.dolphinscheduler.dao.entity.UdfFunc;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper;
 import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
@@ -56,11 +54,9 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
-import java.util.Set;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
@@ -89,6 +85,8 @@ public class ResourcesServiceTest {
 
     private static final Logger logger = 
LoggerFactory.getLogger(ResourcesServiceTest.class);
 
+    private static final String tenantCode = "123";
+
     @InjectMocks
     private ResourcesServiceImpl resourcesService;
 
@@ -110,10 +108,6 @@ public class ResourcesServiceTest {
     @Mock
     private ResourcePermissionCheckService resourcePermissionCheckService;
 
-    private static final Logger serviceLogger = 
LoggerFactory.getLogger(BaseServiceImpl.class);
-
-    private static final Logger resourceLogger = 
LoggerFactory.getLogger(ResourcesServiceImpl.class);
-
     private MockedStatic<FileUtils> mockedStaticFileUtils;
 
     private MockedStatic<Files> mockedStaticFiles;
@@ -126,7 +120,7 @@ public class ResourcesServiceTest {
 
     private MockedStatic<java.nio.file.Files> filesMockedStatic;
 
-    private Throwable exception;
+    private Exception exception;
 
     @BeforeEach
     public void setUp() {
@@ -196,7 +190,7 @@ public class ResourcesServiceTest {
         mockMultipartFile = new MockMultipartFile(tooLongFileName, 
tooLongFileName, "pdf", "test".getBytes());
         when(Files.getFileExtension(tooLongFileName)).thenReturn("pdf");
         // '/databasePath/tenantCode/RESOURCE/'
-        
when(storageOperate.getResDir("123")).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getResDir(tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
         result = resourcesService.uploadResource(user, tooLongFileName, 
ResourceType.FILE, mockMultipartFile, "/");
         logger.info(result.toString());
         assertEquals(Status.RESOURCE_FULL_NAME_TOO_LONG_ERROR.getMsg(), 
result.getMsg());
@@ -213,7 +207,7 @@ public class ResourcesServiceTest {
         user.setTenantId(1);
         when(tenantMapper.queryById(1)).thenReturn(getTenant());
         when(userMapper.selectById(user.getId())).thenReturn(getUser());
-        
when(storageOperate.getResDir("123")).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getResDir(tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
         try {
             
when(storageOperate.exists("/dolphinscheduler/123/resources/directoryTest")).thenReturn(true);
         } catch (IOException e) {
@@ -233,7 +227,7 @@ public class ResourcesServiceTest {
 
         when(userMapper.selectById(user.getId())).thenReturn(getUser());
         when(tenantMapper.queryById(1)).thenReturn(getTenant());
-        
when(storageOperate.getResDir("123")).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getResDir(tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
 
         // USER_NO_OPERATION_PERM
         user.setUserType(UserType.GENERAL_USER);
@@ -242,7 +236,7 @@ public class ResourcesServiceTest {
         tenantWNoPermission.setTenantCode("321");
         when(tenantMapper.queryById(1)).thenReturn(tenantWNoPermission);
         Result result = resourcesService.updateResource(user, 
"/dolphinscheduler/123/resources/ResourcesServiceTest",
-                "123", "ResourcesServiceTest", ResourceType.FILE, null);
+                tenantCode, "ResourcesServiceTest", ResourceType.FILE, null);
         logger.info(result.toString());
         assertEquals(Status.NO_CURRENT_OPERATING_PERMISSION.getMsg(), 
result.getMsg());
 
@@ -256,10 +250,10 @@ public class ResourcesServiceTest {
 
         try {
             
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest",
-                    "/dolphinscheduler/123/resources/", "123", 
ResourceType.FILE))
+                    "/dolphinscheduler/123/resources/", tenantCode, 
ResourceType.FILE))
                             .thenReturn(getStorageEntityResource());
             result = resourcesService.updateResource(user, 
"/dolphinscheduler/123/resources/ResourcesServiceTest",
-                    "123", "ResourcesServiceTest", ResourceType.FILE, null);
+                    tenantCode, "ResourcesServiceTest", ResourceType.FILE, 
null);
             logger.info(result.toString());
             assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
         } catch (Exception e) {
@@ -278,14 +272,14 @@ public class ResourcesServiceTest {
 
         try {
             
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest1.jar",
-                    "/dolphinscheduler/123/resources/", "123", 
ResourceType.UDF))
+                    "/dolphinscheduler/123/resources/", tenantCode, 
ResourceType.UDF))
                             .thenReturn(getStorageEntityUdfResource());
         } catch (Exception e) {
             logger.error(e.getMessage() + " Resource path: {}",
                     
"/dolphinscheduler/123/resources/ResourcesServiceTest1.jar", e);
         }
         result = resourcesService.updateResource(user, 
"/dolphinscheduler/123/resources/ResourcesServiceTest1.jar",
-                "123", "ResourcesServiceTest2.jar", ResourceType.UDF, null);
+                tenantCode, "ResourcesServiceTest2.jar", ResourceType.UDF, 
null);
         logger.info(result.toString());
         assertEquals(Status.RESOURCE_EXIST.getMsg(), result.getMsg());
 
@@ -298,7 +292,7 @@ public class ResourcesServiceTest {
         when(tenantMapper.queryById(1)).thenReturn(getTenant());
 
         result = resourcesService.updateResource(user, 
"/dolphinscheduler/123/resources/ResourcesServiceTest1.jar",
-                "123", "ResourcesServiceTest1.jar", ResourceType.UDF, null);
+                tenantCode, "ResourcesServiceTest1.jar", ResourceType.UDF, 
null);
         logger.info(result.toString());
         assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
     }
@@ -317,11 +311,11 @@ public class ResourcesServiceTest {
         when(userMapper.selectList(null)).thenReturn(mockUserList);
         when(userMapper.selectById(getUser().getId())).thenReturn(getUser());
         
when(tenantMapper.queryById(getUser().getTenantId())).thenReturn(getTenant());
-        
when(storageOperate.getResDir("123")).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getResDir(tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
 
         try {
             
when(storageOperate.listFilesStatus("/dolphinscheduler/123/resources/", 
"/dolphinscheduler/123/resources/",
-                    "123", ResourceType.FILE)).thenReturn(mockResList);
+                    tenantCode, ResourceType.FILE)).thenReturn(mockResList);
         } catch (Exception e) {
             logger.error("QueryResourceListPaging Error");
         }
@@ -335,30 +329,30 @@ public class ResourcesServiceTest {
 
     @Test
     public void testQueryResourceList() {
-        User loginUser = new User();
-        loginUser.setId(0);
-        loginUser.setUserType(UserType.ADMIN_USER);
+        User loginUser = getUser();
 
-        when(userMapper.selectList(null)).thenReturn(Arrays.asList(loginUser));
+        
when(userMapper.selectList(null)).thenReturn(Collections.singletonList(loginUser));
         when(userMapper.selectById(loginUser.getId())).thenReturn(loginUser);
         when(tenantMapper.queryById(Mockito.anyInt())).thenReturn(getTenant());
-        
when(storageOperate.getResDir("123")).thenReturn("/dolphinscheduler/123/resources/");
+        when(storageOperate.getDir(ResourceType.ALL, 
tenantCode)).thenReturn("/dolphinscheduler");
+        when(storageOperate.getDir(ResourceType.FILE, 
tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getResDir(tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
         
when(storageOperate.listFilesStatusRecursively("/dolphinscheduler/123/resources/",
-                "/dolphinscheduler/123/resources/", "123", ResourceType.FILE))
-                        .thenReturn(Arrays.asList(getStorageEntityResource()));
-        Map<String, Object> result = 
resourcesService.queryResourceList(loginUser, ResourceType.FILE, "");
-        logger.info(result.toString());
+                "/dolphinscheduler/123/resources/", tenantCode, 
ResourceType.FILE))
+                        
.thenReturn(Collections.singletonList(getStorageEntityResource()));
+        Map<String, Object> result =
+                resourcesService.queryResourceList(loginUser, 
ResourceType.FILE, "/dolphinscheduler/123/resources/");
         assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
         List<ResourceComponent> resourceList = (List<ResourceComponent>) 
result.get(Constants.DATA_LIST);
         Assertions.assertTrue(CollectionUtils.isNotEmpty(resourceList));
 
         // test udf
-        
when(storageOperate.getUdfDir("123")).thenReturn("/dolphinscheduler/123/udfs/");
+        when(storageOperate.getDir(ResourceType.UDF, 
tenantCode)).thenReturn("/dolphinscheduler/123/udfs/");
+        
when(storageOperate.getUdfDir(tenantCode)).thenReturn("/dolphinscheduler/123/udfs/");
         
when(storageOperate.listFilesStatusRecursively("/dolphinscheduler/123/udfs/", 
"/dolphinscheduler/123/udfs/",
-                "123", 
ResourceType.UDF)).thenReturn(Arrays.asList(getStorageEntityUdfResource()));
+                tenantCode, 
ResourceType.UDF)).thenReturn(Arrays.asList(getStorageEntityUdfResource()));
         loginUser.setUserType(UserType.GENERAL_USER);
-        result = resourcesService.queryResourceList(loginUser, 
ResourceType.UDF, "");
-        logger.info(result.toString());
+        result = resourcesService.queryResourceList(loginUser, 
ResourceType.UDF, "/dolphinscheduler/123/udfs/");
         assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
         resourceList = (List<ResourceComponent>) 
result.get(Constants.DATA_LIST);
         Assertions.assertTrue(CollectionUtils.isNotEmpty(resourceList));
@@ -379,18 +373,18 @@ public class ResourcesServiceTest {
 
         // RESOURCE_NOT_EXIST
         when(tenantMapper.queryById(Mockito.anyInt())).thenReturn(getTenant());
-        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest",
 null, "123", null))
-                .thenReturn(getStorageEntityResource());
-        Result result = resourcesService.delete(loginUser, 
"/dolphinscheduler/123/resources/ResNotExist", "123");
-        logger.info(result.toString());
+        when(storageOperate.getDir(ResourceType.ALL, 
tenantCode)).thenReturn("/dolphinscheduler");
+        
when(storageOperate.getResDir(getTenant().getTenantCode())).thenReturn("/dolphinscheduler/123/resources/");
+        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest",
+                "/dolphinscheduler/123/resources/", tenantCode, null))
+                        .thenReturn(getStorageEntityResource());
+        Result result = resourcesService.delete(loginUser, 
"/dolphinscheduler/123/resources/ResNotExist", tenantCode);
         assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), result.getMsg());
 
         // SUCCESS
         loginUser.setTenantId(1);
-        result = resourcesService.delete(loginUser, 
"/dolphinscheduler/123/resources/ResourcesServiceTest", "123");
-        logger.info(result.toString());
+        result = resourcesService.delete(loginUser, 
"/dolphinscheduler/123/resources/ResourcesServiceTest", tenantCode);
         assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
-
     }
 
     @Test
@@ -421,18 +415,16 @@ public class ResourcesServiceTest {
     }
 
     @Test
-    public void testReadResource() {
+    public void testReadResource() throws IOException {
         // RESOURCE_NOT_EXIST
         when(userMapper.selectById(getUser().getId())).thenReturn(getUser());
         
when(tenantMapper.queryById(getUser().getTenantId())).thenReturn(getTenant());
         Result result = resourcesService.readResource(getUser(), "", "", 1, 
10);
-        logger.info(result.toString());
         assertEquals(Status.RESOURCE_FILE_NOT_EXIST.getCode(), (int) 
result.getCode());
 
         // RESOURCE_SUFFIX_NOT_SUPPORT_VIEW
         when(FileUtils.getResourceViewSuffixes()).thenReturn("class");
         result = resourcesService.readResource(getUser(), "", "", 1, 10);
-        logger.info(result.toString());
         assertEquals(Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW.getMsg(), 
result.getMsg());
 
         // USER_NOT_EXIST
@@ -440,7 +432,6 @@ public class ResourcesServiceTest {
         when(FileUtils.getResourceViewSuffixes()).thenReturn("jar");
         
when(Files.getFileExtension("ResourcesServiceTest.jar")).thenReturn("jar");
         result = resourcesService.readResource(getUser(), "", "", 1, 10);
-        logger.info(result.toString());
         assertEquals(Status.USER_NOT_EXIST.getCode(), (int) result.getCode());
 
         // TENANT_NOT_EXIST
@@ -449,17 +440,16 @@ public class ResourcesServiceTest {
         Assertions.assertThrows(ServiceException.class, () -> 
resourcesService.readResource(getUser(), "", "", 1, 10));
 
         // SUCCESS
+        when(FileUtils.getResourceViewSuffixes()).thenReturn("jar,sh");
+        when(storageOperate.getDir(ResourceType.ALL, 
tenantCode)).thenReturn("/dolphinscheduler");
+        
when(storageOperate.getResDir(getTenant().getTenantCode())).thenReturn("/dolphinscheduler/123/resources/");
         when(userMapper.selectById(getUser().getId())).thenReturn(getUser());
         
when(tenantMapper.queryById(getUser().getTenantId())).thenReturn(getTenant());
-        try {
-            when(storageOperate.exists(Mockito.any())).thenReturn(true);
-            when(storageOperate.vimFile(Mockito.any(), Mockito.any(), eq(1), 
eq(10))).thenReturn(getContent());
-        } catch (IOException e) {
-            logger.error("storage error", e);
-        }
-        when(Files.getFileExtension("test.jar")).thenReturn("jar");
-        result = resourcesService.readResource(getUser(), "test.jar", "", 1, 
10);
-        logger.info(result.toString());
+        when(storageOperate.exists(Mockito.any())).thenReturn(true);
+        when(storageOperate.vimFile(Mockito.any(), Mockito.any(), eq(1), 
eq(10))).thenReturn(getContent());
+        
when(Files.getFileExtension("/dolphinscheduler/123/resources/test.jar")).thenReturn("jar");
+        result = resourcesService.readResource(getUser(), 
"/dolphinscheduler/123/resources/test.jar", tenantCode, 1,
+                10);
         assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
     }
 
@@ -494,29 +484,32 @@ public class ResourcesServiceTest {
         when(storageOperate.getResDir(Mockito.anyString())).thenReturn("/tmp");
         ServiceException serviceException =
                 Assertions.assertThrows(ServiceException.class, () -> 
resourcesService.updateResourceContent(getUser(),
-                        
"/dolphinscheduler/123/resources/ResourcesServiceTest.jar", "123", "content"));
+                        
"/dolphinscheduler/123/resources/ResourcesServiceTest.jar", tenantCode, 
"content"));
         assertTrue(serviceException.getMessage()
                 .contains("Resource file: 
/dolphinscheduler/123/resources/ResourcesServiceTest.jar is illegal"));
 
         // RESOURCE_NOT_EXIST
+        when(storageOperate.getDir(ResourceType.ALL, 
tenantCode)).thenReturn("/dolphinscheduler");
         
when(storageOperate.getResDir(Mockito.anyString())).thenReturn("/dolphinscheduler/123/resources");
-        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest.jar",
 "", "123",
+        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest.jar",
 "", tenantCode,
                 ResourceType.FILE)).thenReturn(null);
         Result result = resourcesService.updateResourceContent(getUser(),
-                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
"123", "content");
+                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
tenantCode, "content");
         assertEquals(Status.RESOURCE_NOT_EXIST.getMsg(), result.getMsg());
 
         // RESOURCE_SUFFIX_NOT_SUPPORT_VIEW
         when(FileUtils.getResourceViewSuffixes()).thenReturn("class");
-        when(storageOperate.getFileStatus("/dolphinscheduler/123/resources", 
"", "123", ResourceType.FILE))
+        when(storageOperate.getFileStatus("/dolphinscheduler/123/resources", 
"", tenantCode, ResourceType.FILE))
                 .thenReturn(getStorageEntityResource());
 
-        result = resourcesService.updateResourceContent(getUser(), 
"/dolphinscheduler/123/resources", "123", "content");
+        result = resourcesService.updateResourceContent(getUser(), 
"/dolphinscheduler/123/resources", tenantCode,
+                "content");
         assertEquals(Status.RESOURCE_SUFFIX_NOT_SUPPORT_VIEW.getMsg(), 
result.getMsg());
 
         // USER_NOT_EXIST
         when(userMapper.selectById(getUser().getId())).thenReturn(null);
-        result = resourcesService.updateResourceContent(getUser(), 
"/dolphinscheduler/123/resources/123.class", "123",
+        result = resourcesService.updateResourceContent(getUser(), 
"/dolphinscheduler/123/resources/123.class",
+                tenantCode,
                 "content");
         Assertions.assertTrue(Status.USER_NOT_EXIST.getCode() == 
result.getCode());
 
@@ -524,10 +517,10 @@ public class ResourcesServiceTest {
         when(userMapper.selectById(getUser().getId())).thenReturn(getUser());
         when(tenantMapper.queryById(1)).thenReturn(null);
         Assertions.assertThrows(ServiceException.class, () -> 
resourcesService.updateResourceContent(getUser(),
-                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
"123", "content"));
+                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
tenantCode, "content"));
 
         // SUCCESS
-        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest.jar",
 "", "123",
+        
when(storageOperate.getFileStatus("/dolphinscheduler/123/resources/ResourcesServiceTest.jar",
 "", tenantCode,
                 ResourceType.FILE)).thenReturn(getStorageEntityResource());
 
         when(Files.getFileExtension(Mockito.anyString())).thenReturn("jar");
@@ -537,7 +530,7 @@ public class ResourcesServiceTest {
         when(FileUtils.getUploadFilename(Mockito.anyString(), 
Mockito.anyString())).thenReturn("test");
         when(FileUtils.writeContent2File(Mockito.anyString(), 
Mockito.anyString())).thenReturn(true);
         result = resourcesService.updateResourceContent(getUser(),
-                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
"123", "content");
+                "/dolphinscheduler/123/resources/ResourcesServiceTest.jar", 
tenantCode, "content");
         logger.info(result.toString());
         assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
     }
@@ -628,7 +621,7 @@ public class ResourcesServiceTest {
         User user = getUser();
         when(userMapper.selectById(user.getId())).thenReturn(getUser());
         
when(tenantMapper.queryById(user.getTenantId())).thenReturn(getTenant());
-        when(storageOperate.getDir(ResourceType.FILE, 
"123")).thenReturn("/dolphinscheduler/123/resources/");
+        when(storageOperate.getDir(ResourceType.FILE, 
tenantCode)).thenReturn("/dolphinscheduler/123/resources/");
         try {
             when(storageOperate.getFileStatus(Mockito.anyString(), 
Mockito.anyString(), Mockito.anyString(),
                     Mockito.any())).thenReturn(getStorageEntityResource());
@@ -640,28 +633,29 @@ public class ResourcesServiceTest {
         assertEquals(Status.SUCCESS.getMsg(), result.getMsg());
     }
 
-    private Set<Integer> getSetIds() {
-
-        Set<Integer> resources = new HashSet<>();
-        resources.add(1);
-        return resources;
-    }
-
     private Tenant getTenant() {
         Tenant tenant = new Tenant();
-        tenant.setTenantCode("123");
+        tenant.setTenantCode(tenantCode);
         return tenant;
     }
 
+    private User getUser() {
+        User user = new User();
+        user.setId(1);
+        user.setUserType(UserType.GENERAL_USER);
+        user.setTenantId(1);
+        user.setTenantCode(tenantCode);
+        return user;
+    }
+
     private StorageEntity getStorageEntityResource() {
         StorageEntity entity = new StorageEntity();
         entity.setAlias("ResourcesServiceTest");
         entity.setFileName("ResourcesServiceTest");
         entity.setDirectory(false);
-        entity.setUserName("123");
+        entity.setUserName(tenantCode);
         entity.setType(ResourceType.FILE);
         
entity.setFullName("/dolphinscheduler/123/resources/ResourcesServiceTest");
-
         return entity;
     }
 
@@ -670,49 +664,13 @@ public class ResourcesServiceTest {
         entity.setAlias("ResourcesServiceTest1.jar");
         entity.setFileName("ResourcesServiceTest1.jar");
         entity.setDirectory(false);
-        entity.setUserName("123");
+        entity.setUserName(tenantCode);
         entity.setType(ResourceType.UDF);
         
entity.setFullName("/dolphinscheduler/123/resources/ResourcesServiceTest1.jar");
 
         return entity;
     }
 
-    private UdfFunc getUdfFunc() {
-
-        UdfFunc udfFunc = new UdfFunc();
-        udfFunc.setId(1);
-        return udfFunc;
-    }
-
-    private UdfFunc getUdfFunc(int udfId) {
-
-        UdfFunc udfFunc = new UdfFunc();
-        udfFunc.setId(udfId);
-        return udfFunc;
-    }
-
-    private List<UdfFunc> getUdfFuncList() {
-
-        List<UdfFunc> udfFuncs = new ArrayList<>();
-        udfFuncs.add(getUdfFunc(1));
-        udfFuncs.add(getUdfFunc(2));
-        udfFuncs.add(getUdfFunc(3));
-        return udfFuncs;
-    }
-
-    private List<UdfFunc> getSingleUdfFuncList() {
-        return Collections.singletonList(getUdfFunc(3));
-    }
-
-    private User getUser() {
-        User user = new User();
-        user.setId(1);
-        user.setUserType(UserType.GENERAL_USER);
-        user.setTenantId(1);
-        user.setTenantCode("tenantCode");
-        return user;
-    }
-
     private List<String> getContent() {
         List<String> contentList = new ArrayList<>();
         contentList.add("test");
diff --git 
a/dolphinscheduler-ui/src/views/resource/components/resource/table/use-table.ts 
b/dolphinscheduler-ui/src/views/resource/components/resource/table/use-table.ts
index 888e480a59..6897f19996 100644
--- 
a/dolphinscheduler-ui/src/views/resource/components/resource/table/use-table.ts
+++ 
b/dolphinscheduler-ui/src/views/resource/components/resource/table/use-table.ts
@@ -284,8 +284,8 @@ export const useDetailPageStore = defineStore('detailPage', 
{
     setFullName(fullName: string) {
       this.fullName = fullName
     },
-    setTenantCode(fullName: string) {
-      this.fullName = fullName
+    setTenantCode(tenantCode: string) {
+      this.tenantCode = tenantCode
     },
     setSearchValue(searchValue: string) {
       this.searchValue = searchValue


Reply via email to