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

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


The following commit(s) were added to refs/heads/kylin5 by this push:
     new 259d0ca533 KYLIN-5269 add local debug mode for kylin5 (#1982)
259d0ca533 is described below

commit 259d0ca533b0227741bb1f19158cdf44a6578d1e
Author: Tengting Xu <34978943+muk...@users.noreply.github.com>
AuthorDate: Wed Sep 21 15:35:06 2022 +0800

    KYLIN-5269 add local debug mode for kylin5 (#1982)
    
    * KYLIN-5269 add local debug mode for kylin5
    
    * KYLIN-5266 minor fix ut
    
    * KYLIN-5269 minor fix
    
    * KYLIN-5269 minor fix
---
 dev-support/local/README.md                        |  67 ++++++++++
 dev-support/local/docker-compose.yml               |  17 +++
 dev-support/local/images/docker_container.png      | Bin 0 -> 78475 bytes
 dev-support/local/images/docker_resources.png      | Bin 0 -> 138867 bytes
 dev-support/local/images/executing_result.png      | Bin 0 -> 33520 bytes
 dev-support/local/images/idea_configuration.png    | Bin 0 -> 126310 bytes
 dev-support/local/images/kylin_ui.png              | Bin 0 -> 106723 bytes
 .../local/images/run_configuration_replace.png     | Bin 0 -> 50906 bytes
 dev-support/local/images/sparder.png               | Bin 0 -> 57787 bytes
 dev-support/local/local.sh                         | 140 +++++++++++++++++++++
 .../runConfigurations/BootstrapServer_local.xml    |  28 +++++
 .../BootstrapServer_local_community.xml            |  23 ++++
 .../apache/kylin/rest/KylinPrepareEnvListener.java |  13 ++
 .../apache/kylin/common/PropertiesDelegate.java    |   9 +-
 .../kylin/job/execution/NExecutableManager.java    |   3 +-
 .../job/impl/threadpool/NDefaultSchedulerTest.java |   1 +
 .../test_case_data/localmeta/kylin.properties      |   5 +-
 .../apache/kylin/rest/service/JobServiceTest.java  |   8 +-
 .../tool/security/KylinPasswordResetCLITest.java   |   1 +
 19 files changed, 307 insertions(+), 8 deletions(-)

diff --git a/dev-support/local/README.md b/dev-support/local/README.md
new file mode 100644
index 0000000000..b28a3123d4
--- /dev/null
+++ b/dev-support/local/README.md
@@ -0,0 +1,67 @@
+### Requirements
+
+1. JDK 1.8 + version, Docker 3.8 version and above
+
+2. Executing `mvn clean install -DskipTests` manually and make sure that 
compiler is ok.
+
+3. Install Docker Desktop on local machine and configure the Docker resource, 
as follows is the lowest requirement:
+
+   ![image-20211102111253713](./images/docker_resources.png)
+
+
+### Usage
+
+1) Executing `./dev-support/local/local.sh init` to initialize env.
+
+- Current step will download the spark to local, and if download failed will 
notify user to download by the scripts.
+
+  > Note: If the spark already exists, the spark will delete and re-download 
it.
+
+- Current step will load the `run configuration` automatically to IDEA.
+
+- Current step will install frontend env.
+
+*Executing Result*
+
+![Executing Result](./images/executing_result.png)
+
+* Run Configuration for IDEA Debug*
+
+![image-20211102105411171](./images/idea_configuration.png)
+
+
+3) Executing `./dev-support/local/local.sh up` to download images and start 
the container。
+
+*Container started successfully*
+
+![image-20211102110553460](./images/docker_container.png)
+
+
+4) After start IDEA Debug and access to `http://localhost:8080/` to check 
Kylin started successfully.
+
+* Run into Kylin web and enjoy.
+
+![Kylin WebSite](./images/kylin_ui.png)
+
+* Access to `http://localhost:4041/` to check sparder started successfully.
+  
+![Sparder](./images/sparder.png)
+
+
+### Other Usage
+
+1) `./dev-support/local/local.sh stop`        : Stop the running containers
+
+2) `./dev-support/local/local.sh start`       : Start all stopped containers
+
+3) `./dev-support/local/local.sh ps`          : List all containers
+
+4) `./dev-support/local/local.sh down`        : Stop all containers and delete 
them
+
+5) `./dev-support/local/local.sh interactive` : Enter in specific container
+
+### FAQ
+
+1) After executing `local.sh init` and runConfiguration has nothing change. 
Then replace `type="SpringBootApplicationConfigurationType" factoryName="Spring 
Boot"` to `type="Application" factoryName="Application"` in 
`.idea/runconfigurations/BootstrapServer_local.xml`.
+
+![](images/run_configuration_replace.png)
diff --git a/dev-support/local/docker-compose.yml 
b/dev-support/local/docker-compose.yml
new file mode 100644
index 0000000000..7edb6d87bb
--- /dev/null
+++ b/dev-support/local/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3.8"
+
+services:
+
+  zookeeper:
+    image: zookeeper:3.6
+    container_name: zookeeper
+    hostname: zookeeper
+    networks:
+      - local
+    ports:
+      - 2181:2181
+
+
+# 2181 -> zk
+networks:
+  local:
diff --git a/dev-support/local/images/docker_container.png 
b/dev-support/local/images/docker_container.png
new file mode 100644
index 0000000000..622cb664d6
Binary files /dev/null and b/dev-support/local/images/docker_container.png 
differ
diff --git a/dev-support/local/images/docker_resources.png 
b/dev-support/local/images/docker_resources.png
new file mode 100644
index 0000000000..a902f4aba2
Binary files /dev/null and b/dev-support/local/images/docker_resources.png 
differ
diff --git a/dev-support/local/images/executing_result.png 
b/dev-support/local/images/executing_result.png
new file mode 100644
index 0000000000..3ae088de5b
Binary files /dev/null and b/dev-support/local/images/executing_result.png 
differ
diff --git a/dev-support/local/images/idea_configuration.png 
b/dev-support/local/images/idea_configuration.png
new file mode 100644
index 0000000000..6ea6db11d3
Binary files /dev/null and b/dev-support/local/images/idea_configuration.png 
differ
diff --git a/dev-support/local/images/kylin_ui.png 
b/dev-support/local/images/kylin_ui.png
new file mode 100644
index 0000000000..35ebb2aa0e
Binary files /dev/null and b/dev-support/local/images/kylin_ui.png differ
diff --git a/dev-support/local/images/run_configuration_replace.png 
b/dev-support/local/images/run_configuration_replace.png
new file mode 100644
index 0000000000..3470717a19
Binary files /dev/null and 
b/dev-support/local/images/run_configuration_replace.png differ
diff --git a/dev-support/local/images/sparder.png 
b/dev-support/local/images/sparder.png
new file mode 100644
index 0000000000..16340a6f7d
Binary files /dev/null and b/dev-support/local/images/sparder.png differ
diff --git a/dev-support/local/local.sh b/dev-support/local/local.sh
new file mode 100755
index 0000000000..5e46a9763b
--- /dev/null
+++ b/dev-support/local/local.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+set -o pipefail
+
+function help() {
+    echo "Usage: local.sh <COMMAND>"
+    echo
+    echo "Commands:"
+    echo "  init        Install spark and set idea run configurations and 
install dependencies"
+    echo "  up          Download image and start the container(NOTE: current 
only need zookeeper)."
+    echo "  down        Stop the container and remove it"
+    echo "  start       Start the container"
+    echo "  stop        Stop the container"
+    echo "  sample      Load sample data"
+    echo "  ps          List containers"
+    echo "  interactive Enter the container and get interactive prompts"
+    exit 1
+}
+
+function info() {
+    echo -e "\033[32m$@\033[0m"
+}
+
+function warn() {
+    echo -e "\033[33m$@\033[0m"
+}
+
+function error() {
+    echo -e "\033[31m$@\033[0m"
+}
+
+PROJECT_DIR=$(cd -P -- "$(dirname -- "$0")/../.." && pwd -P)
+WORKDIR=$(cd -P -- "${PROJECT_DIR}/dev-support/local" && pwd -P)
+FRONTEND_DIR=$(cd -P -- "${PROJECT_DIR}/kystudio" && pwd -P)
+
+KYLIN_HOME="${PROJECT_DIR}"
+warn "# KYLIN_HOME=${KYLIN_HOME}"
+
+SPARK_HOME="${PROJECT_DIR}/build/spark"
+warn "# SPARK_HOME=${SPARK_HOME}"
+
+
+function main() {
+  if [[ $# == 0 ]]; then
+    help
+  fi
+
+  case $1 in
+    "init" )
+        if [[ ! -d "${PROJECT_DIR}/src/server/target" ]]; then
+            error "* Please execute 'mvn clean install -DskipTests' first!"
+            exit 1
+        fi
+
+        if [[ -d "${SPARK_HOME}" ]]; then
+            warn "* Spark already exists, will be deleted and re-downloaded"
+            rm -rf ${SPARK_HOME}
+        fi
+
+        info "* Downloading spark..."
+        ${PROJECT_DIR}/build/release/download-spark.sh
+        if [[ $? != 0 ]]; then
+            warn "  Download spark failed, please manually execute 
'download-spark.sh'"
+        fi
+
+        info "* Setting IDEA run configurations..."
+        if [[ ! -d "${PROJECT_DIR}/.idea/runConfigurations" ]]; then
+            mkdir "${PROJECT_DIR}/.idea/runConfigurations"
+        fi
+        DEFAULT_CONFIGURATION_VERSION=
+        if [[ -z ${DEFAULT_CONFIGURATION_VERSION} ]]; then
+            DEFAULT_CONFIGURATION_VERSION="community"
+        fi
+        warn "# IDEA run configuration version is 
${DEFAULT_CONFIGURATION_VERSION}..."
+        eval "cat <<EOF
+            
$(<"${WORKDIR}/runConfigurations/BootstrapServer_local_community.xml")
+EOF" 
>"${PROJECT_DIR}/.idea/runConfigurations/BootstrapServer_local_community.xml"
+
+        info "* Build Frontend..."
+        cd ${FRONTEND_DIR}
+        npm install >>/dev/null 2>&1
+
+        info "* Init Done!"
+        ;;
+    "up" )
+        info "* Starting container..."
+        docker compose -f "${WORKDIR}/docker-compose.yml" up -d
+        if [[ $? != 0 ]]; then
+            error "* Start container failed;"
+            exit 1
+        fi
+        info "* Up Done!"
+        ;;
+    "down" )
+        docker compose -f "${WORKDIR}/docker-compose.yml" down
+        ;;
+    "start" )
+        shift
+        docker compose -f "${WORKDIR}/docker-compose.yml" start $@
+        ;;
+    "stop" )
+        shift
+        docker compose -f "${WORKDIR}/docker-compose.yml" stop $@
+        ;;
+    "ps" )
+        shift
+        docker compose -f "${WORKDIR}/docker-compose.yml" ps $@
+        ;;
+    "interactive" )
+        if [[ -z $2 ]]; then
+            help
+        fi
+        docker compose -f "${WORKDIR}/docker-compose.yml" exec $2 bash
+        ;;
+    *)
+        help
+        ;;
+  esac
+}
+
+main $@
+
diff --git a/dev-support/local/runConfigurations/BootstrapServer_local.xml 
b/dev-support/local/runConfigurations/BootstrapServer_local.xml
new file mode 100644
index 0000000000..e0407591f7
--- /dev/null
+++ b/dev-support/local/runConfigurations/BootstrapServer_local.xml
@@ -0,0 +1,28 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration name="BootstrapServer[Local]" 
type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+    <module name="kylin-server" />
+    <extension name="net.ashald.envfile">
+      <option name="IS_ENABLED" value="false" />
+      <option name="IS_SUBST" value="false" />
+      <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
+      <option name="IS_IGNORE_MISSING_FILES" value="false" />
+      <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
+      <ENTRIES>
+        <ENTRY IS_ENABLED="true" PARSER="runconfig" />
+      </ENTRIES>
+    </extension>
+    <option name="SPRING_BOOT_MAIN_CLASS" 
value="org.apache.kylin.rest.BootstrapServer" />
+    <option name="VM_PARAMETERS" value="-Xms1g -Xmx6g -Dspark.local=true 
-Dcalcite.debug=true" />
+    <option name="PROGRAM_PARAMETERS" 
value="--kylin.env.zookeeper-connect-string=localhost:2181 
--kylin.server.mode=all" />
+    <option name="WORKING_DIRECTORY" value="file://%MODULE_WORKING_DIR%" />
+    <option name="ALTERNATIVE_JRE_PATH" />
+    <option name="SHORTEN_COMMAND_LINE" value="NONE" />
+    <envs>
+      <env name="KYLIN_HOME" value="$PROJECT_DIR" />
+      <env name="SPARK_HOME" value="$PROJECT_DIR/build/spark" />
+    </envs>
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
diff --git 
a/dev-support/local/runConfigurations/BootstrapServer_local_community.xml 
b/dev-support/local/runConfigurations/BootstrapServer_local_community.xml
new file mode 100644
index 0000000000..ea711f31be
--- /dev/null
+++ b/dev-support/local/runConfigurations/BootstrapServer_local_community.xml
@@ -0,0 +1,23 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration name="BootstrapServer[Local]" type="Application" 
factoryName="Application">
+    <module name="kylin-server" />
+    <extension name="coverage">
+      <pattern>
+        <option name="PATTERN" value="org.apache.kylin.rest.*" />
+        <option name="ENABLED" value="true" />
+      </pattern>
+    </extension>
+    <option name="INCLUDE_PROVIDED_SCOPE" value="true" />
+    <option name="MAIN_CLASS_NAME" 
value="org.apache.kylin.rest.BootstrapServer" />
+    <option name="VM_PARAMETERS" value="-Xms1g -Xmx6g -Dspark.local=true 
-Dcalcite.debug=true" />
+    <option name="PROGRAM_PARAMETERS" 
value="--kylin.env.zookeeper-connect-string=localhost:2181 
--kylin.server.mode=all" />
+    <option name="WORKING_DIRECTORY" value="file://%MODULE_WORKING_DIR%" />
+    <envs>
+      <env name="KYLIN_HOME" value="$PROJECT_DIR" />
+      <env name="SPARK_HOME" value="$PROJECT_DIR/build/spark" />
+    </envs>
+    <method v="2">
+      <option name="Make" enabled="true" />
+    </method>
+  </configuration>
+</component>
diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
index 0a30035b81..06bc583e13 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
@@ -18,6 +18,9 @@
 package org.apache.kylin.rest;
 
 import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.kylin.common.KylinConfig;
@@ -25,6 +28,7 @@ import org.apache.kylin.common.util.ClassUtil;
 import org.apache.kylin.common.util.TimeZoneUtils;
 import org.apache.kylin.common.util.TempMetadataBuilder;
 import org.apache.kylin.common.util.Unsafe;
+import org.apache.kylin.source.jdbc.H2Database;
 import org.apache.kylin.tool.kerberos.KerberosLoginTask;
 import org.springframework.boot.SpringApplication;
 import 
org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
@@ -130,5 +134,14 @@ public class KylinPrepareEnvListener implements 
EnvironmentPostProcessor, Ordere
         Unsafe.setProperty("kylin.query.pushdown.jdbc.driver", 
"org.h2.Driver");
         Unsafe.setProperty("kylin.query.pushdown.jdbc.username", "sa");
         Unsafe.setProperty("kylin.query.pushdown.jdbc.password", "");
+
+        // Load H2 Tables (inner join) for pushdown to rdbms in local debug 
mode
+        try {
+            Connection h2Connection = 
DriverManager.getConnection("jdbc:h2:mem:db_default;DB_CLOSE_DELAY=-1", "sa", 
"");
+            H2Database h2DB = new H2Database(h2Connection, 
KylinConfig.getInstanceFromEnv(), "default");
+            h2DB.loadAllTables();
+        } catch (SQLException ex) {
+            log.error(ex.getMessage(), ex);
+        }
     }
 }
diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java 
b/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
index 671a20d0b1..fd24fbd98b 100644
--- 
a/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
+++ 
b/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
@@ -96,7 +96,14 @@ public class PropertiesDelegate extends Properties {
 
     private ConcurrentMap<Object, Object> getAllProperties() {
         // When KylinExternalConfigLoader is enabled, properties is static
-        if (configLoader == null || 
configLoader.getClass().equals(KylinExternalConfigLoader.class)) {
+        if (configLoader == null || 
configLoader.getClass().equals(KylinExternalConfigLoader.class)
+                || 
configLoader.getClass().getSimpleName().equals("TestExternalConfigLoader")) {
+            /**
+             * Return properties directly
+             * 1. if configloader is null
+             * 2. if configloadder is KylinExternalConfigLoader.class
+             * 3. if running UT
+             */
             return properties;
         } else if 
(configLoader.getClass().equals(NacosExternalConfigLoader.class)) {
             // When NacosExternalConfigLoader enabled, fetch config entries 
from remote for each call
diff --git 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
index 40cf03d671..206851cca1 100644
--- 
a/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
+++ 
b/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
@@ -205,11 +205,12 @@ public class NExecutableManager {
         if (KylinConfig.getInstanceFromEnv().isUTEnv()) {
             EventBusFactory.getInstance().postAsync(new 
JobReadyNotifier(project));
             EventBusFactory.getInstance().postAsync(new 
JobAddedNotifier(project, jobType));
-        } else
+        } else {
             UnitOfWork.get().doAfterUnit(() -> {
                 EventBusFactory.getInstance().postAsync(new 
JobReadyNotifier(project));
                 EventBusFactory.getInstance().postAsync(new 
JobAddedNotifier(project, jobType));
             });
+        }
     }
 
     private void addJobOutput(ExecutablePO executable) {
diff --git 
a/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
 
b/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
index e934b98505..6faaf5d379 100644
--- 
a/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
+++ 
b/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
@@ -1953,6 +1953,7 @@ public class NDefaultSchedulerTest extends 
BaseSchedulerTest {
     }
 
     @Test
+    @Ignore("TODO: move it")
     public void testStorageQuotaLimitReached() {
         try {
             // case READY
diff --git a/src/examples/test_case_data/localmeta/kylin.properties 
b/src/examples/test_case_data/localmeta/kylin.properties
index 762d85c875..a8e324a447 100755
--- a/src/examples/test_case_data/localmeta/kylin.properties
+++ b/src/examples/test_case_data/localmeta/kylin.properties
@@ -146,7 +146,7 @@ 
kylin.storage.columnar.spark-conf.spark.sql.warehouse.dir=${kylin.env.hdfs-worki
 
kylin.storage.columnar.spark-conf.spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:derby:memory:db;create=true
 
 kylin.engine.spark-conf.spark.master=local[8]
-kylin.metadata.random-admin-password.enabled=true
+kylin.metadata.random-admin-password.enabled=false
 kylin.monitor.enabled=false
 
 kylin.engine.spark-conf.spark.driver.cores=2
@@ -156,7 +156,7 @@ kylin.engine.spark-conf.spark.executor.cores=2
 kylin.engine.spark-conf.spark.executor.instances=1
 kylin.engine.spark-conf.spark.executor.memory=512m
 kylin.engine.spark-conf.spark.executor.memoryOverhead=512m
-
+kylin.engine.spark-conf.spark.sql.hive.metastore.jars=../../build/spark/hive_1_2_2/*
 
 kylin.storage.columnar.spark-conf.spark.driver.cores=1
 kylin.storage.columnar.spark-conf.spark.driver.memory=512m
@@ -165,3 +165,4 @@ kylin.storage.columnar.spark-conf.spark.executor.cores=1
 kylin.storage.columnar.spark-conf.spark.executor.instances=1
 kylin.storage.columnar.spark-conf.spark.executor.memory=512m
 kylin.storage.columnar.spark-conf.spark.executor.memoryOverhead=512m
+kylin.storage.columnar.spark-conf.spark.sql.hive.metastore.jars=../../build/spark/hive_1_2_2/*
diff --git 
a/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
 
b/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
index abd26300ce..4edc0075d5 100644
--- 
a/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
+++ 
b/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
@@ -313,16 +313,16 @@ public class JobServiceTest extends 
NLocalFileMetadataTestCase {
         Mockito.when(executableDao.getJobs(Mockito.anyLong(), 
Mockito.anyLong())).thenReturn(mockJobs);
         {
             List<String> jobNames = Lists.newArrayList();
-            JobFilter jobFilter = new JobFilter(Lists.newArrayList(), 
jobNames, 0, "", "", "default", "total_duration",
+            JobFilter jobFilter = new JobFilter(Lists.newArrayList(), 
jobNames, 0, "", "", "default", "duration",
                     true);
             List<ExecutableResponse> jobs = jobService.listJobs(jobFilter);
 
-            val totalDurationArrays = 
jobs.stream().map(ExecutableResponse::getTotalDuration)
+            val durationArrays = 
jobs.stream().map(ExecutableResponse::getTotalDuration)
                     .collect(Collectors.toList());
-            List<Long> copyDurationList = new ArrayList<>(totalDurationArrays);
+            List<Long> copyDurationList = new ArrayList<>(durationArrays);
             copyDurationList.sort(Collections.reverseOrder());
             Assert.assertEquals(3, copyDurationList.size());
-            Assert.assertEquals(totalDurationArrays, copyDurationList);
+            Assert.assertEquals(durationArrays, copyDurationList);
         }
 
         for (int i = 0; i < 3; i++) {
diff --git 
a/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
 
b/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
index 6aaf5a5e65..e8ca0ae812 100644
--- 
a/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
+++ 
b/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
@@ -65,6 +65,7 @@ public class KylinPasswordResetCLITest extends 
LogOutputTestCase {
 
     @Test
     public void testResetAdminPassword() throws Exception {
+        overwriteSystemProp("kylin.metadata.random-admin-password.enabled", 
"true");
         val pwdEncoder = new BCryptPasswordEncoder();
         overwriteSystemProp("kylin.security.user-password-encoder", 
pwdEncoder.getClass().getName());
         val user = new ManagedUser("ADMIN", "KYLIN", true, 
Constant.ROLE_ADMIN, Constant.GROUP_ALL_USERS);

Reply via email to