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

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit e824503ecaeca7f657de11bf12113ab5fd1eadb3
Author: haocheni <hao_...@qq.com>
AuthorDate: Tue Aug 29 14:59:55 2023 +0800

    KYLIN-5796 Support databinder auto grow collections limit
---
 .../kylin/rest/controller/NBasicController.java    | 14 ++++++++
 .../kylin/rest/aspect/InsensitiveNameAspect.java   |  3 ++
 .../org/apache/kylin/common/KylinConfigBase.java   | 15 +++++++++
 .../kylin/common/exception/ServerErrorCode.java    |  1 +
 .../org/apache/kylin/common/msg/CnMessage.java     | 10 ++++++
 .../java/org/apache/kylin/common/msg/Message.java  |  9 +++++
 .../resources/kylin_errorcode_conf_en.properties   |  1 +
 .../resources/kylin_errorcode_conf_zh.properties   |  1 +
 src/metadata-server/pom.xml                        |  5 +++
 .../controller/NProjectControllerKylinTest.java    | 17 ++++------
 .../rest/controller/NProjectControllerV2Test.java  | 17 ++++------
 .../rest/controller/NUserGroupControllerTest.java  | 38 ++++++++++------------
 .../controller/NUserGroupControllerV2Test.java     | 22 +++++--------
 .../rest/controller/OpenAclTCRControllerTest.java  | 15 +++------
 .../controller/open/OpenAclTCRControllerTest.java  |  8 +++--
 .../open/OpenUserGroupControllerTest.java          | 14 ++++----
 .../rest/controller/NQueryMetaControllerTest.java  |  2 ++
 .../rest/controller/SparkSourceControllerTest.java | 12 ++++---
 18 files changed, 127 insertions(+), 77 deletions(-)

diff --git 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
index e88ce19d72..61854b7436 100644
--- 
a/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
+++ 
b/src/common-server/src/main/java/org/apache/kylin/rest/controller/NBasicController.java
@@ -24,6 +24,7 @@ import static 
org.apache.kylin.common.exception.ServerErrorCode.EMPTY_PROJECT_NA
 import static 
org.apache.kylin.common.exception.ServerErrorCode.FAILED_CONNECT_CATALOG;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.FAILED_DOWNLOAD_FILE;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.INCORRECT_PROJECT_MODE;
+import static 
org.apache.kylin.common.exception.ServerErrorCode.INVALID_DATA_BINDER_AUTO_GROW_COLLECTION_LIMIT;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.INVALID_PARAMETER;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.LOW_LEVEL_LICENSE;
 import static 
org.apache.kylin.common.exception.ServerErrorCode.UNSUPPORTED_STREAMING_OPERATION;
@@ -110,6 +111,7 @@ import org.apache.kylin.rest.util.PagingUtil;
 import org.apache.kylin.util.DataRangeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.InvalidPropertyException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.http.HttpEntity;
@@ -128,7 +130,9 @@ import 
org.springframework.transaction.CannotCreateTransactionException;
 import org.springframework.util.StreamUtils;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.InitBinder;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.client.RequestCallback;
@@ -184,6 +188,10 @@ public class NBasicController {
             if (cause instanceof CannotCreateTransactionException) {
                 kylinException = new KylinException(FAILED_CONNECT_CATALOG, 
msg.getConnectDatabaseError(), false);
             }
+            if (cause instanceof InvalidPropertyException && cause.getCause() 
instanceof IndexOutOfBoundsException) {
+                kylinException = new 
KylinException(INVALID_DATA_BINDER_AUTO_GROW_COLLECTION_LIMIT,
+                        msg.getInvalidDataBinderAutoGrowCollectionLimit(), 
false);
+            }
             if (cause instanceof KylinException) {
                 kylinException = (KylinException) cause;
             }
@@ -679,4 +687,10 @@ public class NBasicController {
             }
         }
     }
+
+    @InitBinder
+    private void initBinder(WebDataBinder binder) {
+        int autoGrowCollectionLimit = 
KylinConfig.getInstanceFromEnv().getDataBinderAutoGrowCollectionLimit();
+        binder.setAutoGrowCollectionLimit(autoGrowCollectionLimit);
+    }
 }
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/aspect/InsensitiveNameAspect.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/aspect/InsensitiveNameAspect.java
index cfc43bf7b2..8d54a85807 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/aspect/InsensitiveNameAspect.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/aspect/InsensitiveNameAspect.java
@@ -125,6 +125,9 @@ public class InsensitiveNameAspect {
         for (int i = 0; i < parameterNames.length; i++) {
             if (parameterTypes[i] == String.class && Objects.equals("project", 
parameterNames[i])) {
                 projectName = (String) args[i];
+                if (StringUtils.isBlank(projectName)) {
+                    continue;
+                }
                 NProjectManager projectManager = 
NProjectManager.getInstance(KylinConfig.getInstanceFromEnv());
                 ProjectInstance projectInstance = 
projectManager.getProject(projectName);
                 if (projectInstance != null) {
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 9bce3f735a..3de55bf84e 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -53,6 +53,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.apache.commons.lang3.text.StrSubstitutor;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -3073,6 +3074,20 @@ public abstract class KylinConfigBase implements 
Serializable {
         return 
Boolean.parseBoolean(getOptional("kylin.web.session.jdbc-encode-enabled", 
FALSE));
     }
 
+    public int getDataBinderAutoGrowCollectionLimit() {
+        String defaultValue = "256";
+        String value = 
getOptional("kylin.web.data-binder.auto-grow-collection-limit", defaultValue);
+
+        if (!NumberUtils.isDigits(value)) {
+            return Integer.parseInt(defaultValue);
+        }
+        int intValue = Integer.parseInt(value);
+        if (intValue <= 0) {
+            return Integer.parseInt(defaultValue);
+        }
+        return intValue;
+    }
+
     public String getSpringStoreType() {
         return getOptional("spring.session.store-type", "");
     }
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java
 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java
index 881a6c1f7f..68aa6bcd3f 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/exception/ServerErrorCode.java
@@ -281,6 +281,7 @@ public enum ServerErrorCode implements ErrorCodeSupplier {
     SPARK_FAILURE("KE-010038002"), //
     CONFIG_NONEXIST_PROJECT("KE-010038003"), //
     CONFIG_NONEXIST_MODEL("KE-010038004"), //
+    INVALID_DATA_BINDER_AUTO_GROW_COLLECTION_LIMIT("KE-010038005"), //
 
     // 10039XXX jdbc source
 
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java 
b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
index 09c3925756..5d15f7042c 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/CnMessage.java
@@ -1725,4 +1725,14 @@ public class CnMessage extends Message {
     public String getIllegalNegative(String parameter) {
         return String.format(PARAMETER_MUST_BE_POSITIVE_NUMBER, parameter);
     }
+
+    @Override
+    public String getInvalidDataBinderAutoGrowCollectionLimit() {
+        return "操作失败,请调大参数 kylin.web.data-binder.auto-grow-collection-limit 
的值后再试。";
+    }
+
+    @Override
+    public String getRedisInitFailed() {
+        return "Redis初始化失败";
+    }
 }
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java 
b/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java
index 3dff08d642..e43eece2e5 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/msg/Message.java
@@ -1628,4 +1628,13 @@ public class Message {
 
     }
 
+    public String getInvalidDataBinderAutoGrowCollectionLimit() {
+        return "Operation failed, please increase the value of "
+                + "kylin.web.data-binder.auto-grow-collection-limit and try 
again.";
+    }
+
+    public String getRedisInitFailed() {
+        return "Redis init failed";
+    }
+
 }
diff --git 
a/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties 
b/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties
index b82744456d..02e3f7f830 100644
--- a/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties
+++ b/src/core-common/src/main/resources/kylin_errorcode_conf_en.properties
@@ -273,6 +273,7 @@ KE-010038001=System Profile Abnormal Data
 KE-010038002=Spark Failure
 KE-010038003=Non Exist Project
 KE-010038004=Non Exist Model
+KE-010038005=invalid data binder auto grow collection limit
 KE-010039001=Invalid Connection Info
 
 # cache
diff --git 
a/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties 
b/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties
index 9f04bec06f..d8fbfc42ed 100644
--- a/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties
+++ b/src/core-common/src/main/resources/kylin_errorcode_conf_zh.properties
@@ -271,6 +271,7 @@ KE-010038001=系统配置数据异常
 KE-010038002=Spark出错
 KE-010038003=不存在的项目
 KE-010038004=不存在的模型
+KE-010038005=无效的表单数组自动增长限制
 KE-010039001=连接信息有误
 
 # cache
diff --git a/src/metadata-server/pom.xml b/src/metadata-server/pom.xml
index 151ab4df97..28a360d290 100644
--- a/src/metadata-server/pom.xml
+++ b/src/metadata-server/pom.xml
@@ -89,6 +89,11 @@
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerKylinTest.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerKylinTest.java
index 779e79dae2..e44d8683ac 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerKylinTest.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerKylinTest.java
@@ -22,15 +22,14 @@ import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLI
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.rest.controller.v2.NProjectControllerKylin;
 import org.apache.kylin.rest.service.ProjectService;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -44,13 +43,11 @@ import 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+@MetadataInfo(onlyProps = true)
 public class NProjectControllerKylinTest {
 
     private MockMvc mockMvc;
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @Mock
     private ProjectService projectService;
 
@@ -59,7 +56,7 @@ public class NProjectControllerKylinTest {
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", Constant.ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         MockitoAnnotations.initMocks(this);
         mockMvc = MockMvcBuilders.standaloneSetup(nProjectControllerKylin)
@@ -68,7 +65,7 @@ public class NProjectControllerKylinTest {
         SecurityContextHolder.getContext().setAuthentication(authentication);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerV2Test.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerV2Test.java
index 2b25ca4285..28999ee180 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerV2Test.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NProjectControllerV2Test.java
@@ -23,15 +23,14 @@ import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLI
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.metadata.project.ProjectInstance;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.rest.controller.v2.NProjectControllerV2;
 import org.apache.kylin.rest.service.ProjectService;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -45,13 +44,11 @@ import 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+@MetadataInfo(onlyProps = true)
 public class NProjectControllerV2Test {
 
     private MockMvc mockMvc;
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @Mock
     private ProjectService projectService;
 
@@ -60,7 +57,7 @@ public class NProjectControllerV2Test {
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", Constant.ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         MockitoAnnotations.initMocks(this);
         mockMvc = 
MockMvcBuilders.standaloneSetup(nProjectControllerV2).defaultRequest(MockMvcRequestBuilders.get("/"))
@@ -69,7 +66,7 @@ public class NProjectControllerV2Test {
         SecurityContextHolder.getContext().setAuthentication(authentication);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerTest.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerTest.java
index 119f49253b..261c66ec82 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerTest.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerTest.java
@@ -18,15 +18,17 @@
 
 package org.apache.kylin.rest.controller;
 
+import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
 import static 
org.apache.kylin.common.exception.code.ErrorCodeServer.REQUEST_PARAMETER_EMPTY_OR_VALUE_EMPTY;
 import static org.apache.kylin.rest.constant.Constant.ROLE_ADMIN;
-import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
 
 import java.util.Arrays;
 import java.util.List;
 
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.service.UserService;
 import org.apache.kylin.metadata.user.ManagedUser;
 import org.apache.kylin.metadata.usergroup.UserGroup;
@@ -35,12 +37,11 @@ import org.apache.kylin.rest.request.UserGroupRequest;
 import org.apache.kylin.rest.response.UserGroupResponseKI;
 import org.apache.kylin.rest.service.AclTCRService;
 import org.apache.kylin.rest.service.NUserGroupService;
-import org.junit.After;
 import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -61,10 +62,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ser.FilterProvider;
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
 
 import lombok.val;
 
+@MetadataInfo
 public class NUserGroupControllerTest {
 
     private MockMvc mockMvc;
@@ -78,15 +79,12 @@ public class NUserGroupControllerTest {
     @Mock
     private UserService userService;
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @InjectMocks
     private NUserGroupController nUserGroupController = Mockito.spy(new 
NUserGroupController());
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         FilterProvider filterProvider = new 
SimpleFilterProvider().addFilter("passwordFilter",
                 SimpleBeanPropertyFilter.serializeAllExcept("password", 
"defaultPassword"));
@@ -101,7 +99,7 @@ public class NUserGroupControllerTest {
         SecurityContextHolder.getContext().setAuthentication(authentication);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
@@ -155,19 +153,19 @@ public class NUserGroupControllerTest {
     }
 
     @Test
-    public void testAddEmptyGroup() throws Exception {
-        thrown.expect(KylinException.class);
-        
thrown.expectMessage(REQUEST_PARAMETER_EMPTY_OR_VALUE_EMPTY.getMsg("group_name"));
-        UserGroupRequest request = new UserGroupRequest();
-        request.setGroupName("");
-        nUserGroupController.addUserGroup(request);
+    public void testAddEmptyGroup() {
+        Assertions.assertThrows(KylinException.class, () -> {
+            UserGroupRequest request = new UserGroupRequest();
+            request.setGroupName("");
+            nUserGroupController.addUserGroup(request);
+        }, REQUEST_PARAMETER_EMPTY_OR_VALUE_EMPTY.getMsg("group_name"));
     }
 
-    @Test(expected = KylinException.class)
+    @Test
     public void testAddIllegalGroupName() throws Exception {
         UserGroupRequest request = new UserGroupRequest();
         request.setGroupName(".hhhh");
-        nUserGroupController.addUserGroup(request);
+        Assertions.assertThrows(KylinException.class, () -> 
nUserGroupController.addUserGroup(request));
     }
 
     @Test
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerV2Test.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerV2Test.java
index 7727ea5614..40524b1949 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerV2Test.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/NUserGroupControllerV2Test.java
@@ -21,15 +21,14 @@ import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLI
 
 import java.util.List;
 
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.constant.Constant;
-import org.apache.kylin.metadata.user.ManagedUser;
 import org.apache.kylin.rest.controller.v2.NUserGroupControllerV2;
 import org.apache.kylin.rest.service.NUserGroupService;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -44,10 +43,10 @@ import 
org.springframework.test.web.servlet.result.MockMvcResultMatchers;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 import org.springframework.web.accept.ContentNegotiationManager;
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
-
+import io.kyligence.kap.metadata.user.ManagedUser;
 import lombok.val;
 
+@MetadataInfo(onlyProps = true)
 public class NUserGroupControllerV2Test {
 
     private MockMvc mockMvc;
@@ -55,15 +54,12 @@ public class NUserGroupControllerV2Test {
     @Mock
     private NUserGroupService userGroupService;
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     @InjectMocks
     private NUserGroupControllerV2 nUserGroupControllerV2 = Mockito.spy(new 
NUserGroupControllerV2());
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", Constant.ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         MockitoAnnotations.initMocks(this);
         ContentNegotiationManager contentNegotiationManager = new 
ContentNegotiationManager();
@@ -73,7 +69,7 @@ public class NUserGroupControllerV2Test {
         SecurityContextHolder.getContext().setAuthentication(authentication);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/OpenAclTCRControllerTest.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/OpenAclTCRControllerTest.java
index 14b227aa9c..ec29ce066e 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/OpenAclTCRControllerTest.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/OpenAclTCRControllerTest.java
@@ -32,11 +32,9 @@ import 
org.apache.kylin.common.util.NLocalFileMetadataTestCase;
 import org.apache.kylin.rest.controller.open.OpenAclTCRController;
 import org.apache.kylin.rest.request.AclTCRRequest;
 import org.apache.kylin.rest.service.AclTCRService;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -73,12 +71,9 @@ public class OpenAclTCRControllerTest extends 
NLocalFileMetadataTestCase {
     @InjectMocks
     private OpenAclTCRController openAclTCRController = Mockito.spy(new 
OpenAclTCRController());
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
     private static final String APPLICATION_JSON_PUBLIC = 
HTTP_VND_APACHE_KYLIN_V4_PUBLIC_JSON;
 
-    @Before
+    @BeforeEach
     public void setup() throws IOException {
         MockitoAnnotations.initMocks(this);
         mockMvc = 
MockMvcBuilders.standaloneSetup(openAclTCRController).defaultRequest(MockMvcRequestBuilders.get("/"))
@@ -89,7 +84,7 @@ public class OpenAclTCRControllerTest extends 
NLocalFileMetadataTestCase {
         createTestMetadata();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         cleanupTestMetadata();
     }
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenAclTCRControllerTest.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenAclTCRControllerTest.java
index 8b182e9f7d..1823dd91ce 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenAclTCRControllerTest.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenAclTCRControllerTest.java
@@ -26,14 +26,15 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.rest.service.AccessService;
 import org.apache.kylin.rest.service.IUserGroupService;
 import org.apache.kylin.rest.service.UserService;
 import org.apache.kylin.rest.request.AclTCRRequest;
 import org.apache.kylin.rest.service.AclTCRService;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -56,6 +57,7 @@ import 
com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 /**
  * created by lee
  **/
+@MetadataInfo
 public class OpenAclTCRControllerTest {
     @Mock
     private UserService userService;
@@ -74,7 +76,7 @@ public class OpenAclTCRControllerTest {
 
     private MockMvc mockMvc;
 
-    @Before
+    @BeforeEach
     public void setup() {
         FilterProvider filterProvider = new 
SimpleFilterProvider().addFilter("passwordFilter",
                 SimpleBeanPropertyFilter.serializeAllExcept("password", 
"defaultPassword"));
diff --git 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenUserGroupControllerTest.java
 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenUserGroupControllerTest.java
index f5a6e6a8ca..b3a8a7f425 100644
--- 
a/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenUserGroupControllerTest.java
+++ 
b/src/metadata-server/src/test/java/org/apache/kylin/rest/controller/open/OpenUserGroupControllerTest.java
@@ -25,15 +25,17 @@ import java.util.List;
 
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.guava30.shaded.common.collect.Lists;
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.constant.Constant;
-import org.apache.kylin.rest.response.DataResult;
-import org.apache.kylin.rest.response.EnvelopeResponse;
 import org.apache.kylin.rest.controller.NUserGroupController;
 import org.apache.kylin.rest.request.UpdateGroupRequest;
 import org.apache.kylin.rest.request.UserGroupRequest;
+import org.apache.kylin.rest.response.DataResult;
+import org.apache.kylin.rest.response.EnvelopeResponse;
 import org.apache.kylin.rest.service.NUserGroupService;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -53,10 +55,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ser.FilterProvider;
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
-import org.apache.kylin.guava30.shaded.common.collect.Lists;
 
 import lombok.val;
 
+@MetadataInfo(onlyProps = true)
 public class OpenUserGroupControllerTest {
     private MockMvc mockMvc;
 
@@ -71,7 +73,7 @@ public class OpenUserGroupControllerTest {
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", Constant.ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         FilterProvider filterProvider = new 
SimpleFilterProvider().addFilter("passwordFilter",
                 SimpleBeanPropertyFilter.serializeAllExcept("password", 
"defaultPassword"));
diff --git 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryMetaControllerTest.java
 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryMetaControllerTest.java
index e2d22d1087..f445a12197 100644
--- 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryMetaControllerTest.java
+++ 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/NQueryMetaControllerTest.java
@@ -20,6 +20,7 @@ package org.apache.kylin.rest.controller;
 
 import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_EARLY_JSON;
 
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.service.QueryService;
 import org.apache.kylin.rest.controller.v2.NQueryMetaController;
 import org.junit.jupiter.api.Assertions;
@@ -38,6 +39,7 @@ import 
org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 import org.apache.kylin.guava30.shaded.common.collect.Lists;
 
+@MetadataInfo(onlyProps = true)
 class NQueryMetaControllerTest {
     private MockMvc mockMvc;
 
diff --git 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/SparkSourceControllerTest.java
 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/SparkSourceControllerTest.java
index b807258079..40791a9eaa 100644
--- 
a/src/query-server/src/test/java/org/apache/kylin/rest/controller/SparkSourceControllerTest.java
+++ 
b/src/query-server/src/test/java/org/apache/kylin/rest/controller/SparkSourceControllerTest.java
@@ -21,13 +21,14 @@ package org.apache.kylin.rest.controller;
 import static 
org.apache.kylin.common.constant.HttpConstant.HTTP_VND_APACHE_KYLIN_JSON;
 
 import org.apache.kylin.common.util.JsonUtil;
+import org.apache.kylin.junit.annotation.MetadataInfo;
 import org.apache.kylin.rest.constant.Constant;
 import org.apache.kylin.rest.request.DDLRequest;
 import org.apache.kylin.rest.request.ExportTableRequest;
 import org.apache.kylin.rest.service.SparkSourceService;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -41,6 +42,7 @@ import 
org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+@MetadataInfo(onlyProps = true)
 public class SparkSourceControllerTest {
     private MockMvc mockMvc;
 
@@ -52,7 +54,7 @@ public class SparkSourceControllerTest {
 
     private final Authentication authentication = new 
TestingAuthenticationToken("ADMIN", "ADMIN", Constant.ROLE_ADMIN);
 
-    @Before
+    @BeforeEach
     public void setup() {
         MockitoAnnotations.initMocks(this);
         mockMvc = 
MockMvcBuilders.standaloneSetup(sparkSourceController).defaultRequest(MockMvcRequestBuilders.get("/"))
@@ -60,7 +62,7 @@ public class SparkSourceControllerTest {
         SecurityContextHolder.getContext().setAuthentication(authentication);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
     }
 

Reply via email to