You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@linkis.apache.org by pe...@apache.org on 2022/10/10 09:12:58 UTC
[incubator-linkis] branch dev-1.3.1 updated: feat: linkis-storage-script-dev-server unit test (#3486)
This is an automated email from the ASF dual-hosted git repository.
peacewong pushed a commit to branch dev-1.3.1
in repository https://gitbox.apache.org/repos/asf/incubator-linkis.git
The following commit(s) were added to refs/heads/dev-1.3.1 by this push:
new c3eb128b0 feat: linkis-storage-script-dev-server unit test (#3486)
c3eb128b0 is described below
commit c3eb128b00e0586c5f5e8eca1b6aa9f8aa446653
Author: ruY <43...@users.noreply.github.com>
AuthorDate: Mon Oct 10 17:12:51 2022 +0800
feat: linkis-storage-script-dev-server unit test (#3486)
* feat: linkis-storage-script-dev-server unit test
* fix: check license
---
.../java/org/apache/linkis/filesystem/Scan.java | 23 +++
.../linkis/filesystem/WebApplicationServer.java | 34 +++
.../conf/WorkSpaceConfigurationTest.java | 69 +++++++
.../constant/WorkSpaceConstantsTest.java | 40 ++++
.../exception/WorkSpaceExceptionTest.java | 47 +++++
.../exception/WorkspaceExceptionManagerTest.java | 44 ++++
.../restful/api/BMLFsRestfulApiTest.java | 124 +++++++++++
.../filesystem/restful/api/FsRestfulApiTest.java | 227 +++++++++++++++++++++
.../linkis/filesystem/util/WorkspaceUtilTest.java | 74 +++++++
.../src/test/resources/application.properties | 63 ++++++
.../src/test/resources/deleteFile.sql | 17 ++
.../src/test/resources/existsSql.sql | 17 ++
.../src/test/resources/info.log | 19 ++
.../src/test/resources/linkis.properties | 22 ++
.../src/test/resources/query.sql | 17 ++
.../linkis/filesystem/entity/FSInfoTest.scala | 36 ++++
16 files changed, 873 insertions(+)
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/Scan.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/Scan.java
new file mode 100644
index 000000000..bbb4e427e
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/Scan.java
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+
+@EnableAutoConfiguration
+public class Scan {}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/WebApplicationServer.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/WebApplicationServer.java
new file mode 100644
index 000000000..17faf096d
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/WebApplicationServer.java
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.ServletComponentScan;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+@EnableAutoConfiguration
+@ServletComponentScan
+@ComponentScan
+public class WebApplicationServer extends SpringBootServletInitializer {
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(WebApplicationServer.class).run(args);
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/conf/WorkSpaceConfigurationTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/conf/WorkSpaceConfigurationTest.java
new file mode 100644
index 000000000..7eda4af72
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/conf/WorkSpaceConfigurationTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.conf;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+public class WorkSpaceConfigurationTest {
+
+ @Test
+ @DisplayName("staticCommonConst")
+ public void staticCommonConst() {
+
+ String localUserRootPath = WorkSpaceConfiguration.LOCAL_USER_ROOT_PATH.getValue();
+ String hdfsUserRootPathPrefix = WorkSpaceConfiguration.HDFS_USER_ROOT_PATH_PREFIX.getValue();
+ String hdfsUserRootPathSuffix = WorkSpaceConfiguration.HDFS_USER_ROOT_PATH_SUFFIX.getValue();
+ Boolean resultSetDownloadIsLimit =
+ WorkSpaceConfiguration.RESULT_SET_DOWNLOAD_IS_LIMIT.getValue();
+ Integer resultSetDownloadMaxSizeCsv =
+ WorkSpaceConfiguration.RESULT_SET_DOWNLOAD_MAX_SIZE_CSV.getValue();
+ Integer resultSetDownloadMaxSizeExecl =
+ WorkSpaceConfiguration.RESULT_SET_DOWNLOAD_MAX_SIZE_EXCEL.getValue();
+ Long fileSystemGetTimeOut = WorkSpaceConfiguration.FILESYSTEM_GET_TIMEOUT.getValue();
+ Integer fileSystemFsThreadNum = WorkSpaceConfiguration.FILESYSTEM_FS_THREAD_NUM.getValue();
+ Integer fileSystemFsThreadCache = WorkSpaceConfiguration.FILESYSTEM_FS_THREAD_CACHE.getValue();
+ Boolean filesystemPathCheckTrigger =
+ WorkSpaceConfiguration.FILESYSTEM_PATH_CHECK_TRIGGER.getValue();
+ String filesystemLogAdmin = WorkSpaceConfiguration.FILESYSTEM_LOG_ADMIN.getValue();
+ Boolean filesystemPathCheckOwner =
+ WorkSpaceConfiguration.FILESYSTEM_PATH_CHECK_OWNER.getValue();
+ Boolean filesystemPathAutoCreate =
+ WorkSpaceConfiguration.FILESYSTEM_PATH_AUTO_CREATE.getValue();
+ Long localFilesystemUserRefreshInterval =
+ WorkSpaceConfiguration.LOCAL_FILESYSTEM_USER_REFRESH_INTERVAL.getValue();
+ Boolean enableUserGroup = WorkSpaceConfiguration.ENABLE_USER_GROUP.getValue();
+
+ Assertions.assertNotNull(localUserRootPath);
+ Assertions.assertNotNull(hdfsUserRootPathPrefix);
+ Assertions.assertNotNull(hdfsUserRootPathSuffix);
+ Assertions.assertTrue(resultSetDownloadIsLimit.booleanValue());
+ Assertions.assertTrue(resultSetDownloadMaxSizeCsv.intValue() == 5000);
+ Assertions.assertTrue(resultSetDownloadMaxSizeExecl == 5000);
+ Assertions.assertTrue(fileSystemGetTimeOut == 10000L);
+ Assertions.assertTrue(fileSystemFsThreadNum == 10);
+ Assertions.assertTrue(fileSystemFsThreadCache == 1000);
+ Assertions.assertFalse(filesystemPathCheckTrigger);
+ Assertions.assertNotNull(filesystemLogAdmin);
+ Assertions.assertFalse(filesystemPathCheckOwner.booleanValue());
+ Assertions.assertFalse(filesystemPathAutoCreate.booleanValue());
+ Assertions.assertTrue(localFilesystemUserRefreshInterval == 1800000L);
+ Assertions.assertTrue(enableUserGroup.booleanValue());
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/constant/WorkSpaceConstantsTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/constant/WorkSpaceConstantsTest.java
new file mode 100644
index 000000000..6fe4f8754
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/constant/WorkSpaceConstantsTest.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.constant;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+public class WorkSpaceConstantsTest {
+
+ @Test
+ @DisplayName("staticCommonConst")
+ public void staticCommonConst() {
+
+ String xlsxResponseContentType = WorkSpaceConstants.XLSX_RESPONSE_CONTENT_TYPE;
+ String defaultDateType = WorkSpaceConstants.DEFAULT_DATE_TYPE;
+ String localReturnType = WorkSpaceConstants.LOCAL_RETURN_TYPE;
+ String blank = WorkSpaceConstants.BLANK;
+
+ Assertions.assertNotNull(xlsxResponseContentType);
+ Assertions.assertNotNull(defaultDateType);
+ Assertions.assertNotNull(localReturnType);
+ Assertions.assertNotNull(blank);
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkSpaceExceptionTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkSpaceExceptionTest.java
new file mode 100644
index 000000000..e0967e6c4
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkSpaceExceptionTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.exception;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+public class WorkSpaceExceptionTest {
+
+ @Test
+ @DisplayName("workSpaceExceptionTest")
+ public void workSpaceExceptionTest() {
+
+ int errorCode = 80001;
+ String errorMsg =
+ "Requesting IO-Engine to initialize fileSystem failed!(请求IO-Engine初始化fileSystem失败!)";
+ String ip = "127.0.0.1";
+ int port = 8081;
+ String serviceKind = "ps-service";
+ WorkSpaceException workSpaceException = new WorkSpaceException(errorCode, errorMsg);
+
+ Assertions.assertTrue(errorCode == workSpaceException.getErrCode());
+ Assertions.assertEquals(errorMsg, workSpaceException.getDesc());
+
+ WorkSpaceException spaceException =
+ new WorkSpaceException(errorCode, errorMsg, ip, port, serviceKind);
+ Assertions.assertEquals(ip, spaceException.getIp());
+ Assertions.assertTrue(port == spaceException.getPort());
+ Assertions.assertEquals(serviceKind, spaceException.getServiceKind());
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkspaceExceptionManagerTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkspaceExceptionManagerTest.java
new file mode 100644
index 000000000..3263a6820
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/exception/WorkspaceExceptionManagerTest.java
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.exception;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WorkspaceExceptionManagerTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(WorkspaceExceptionManagerTest.class);
+
+ @Test
+ @DisplayName("createExceptionTest")
+ public void createExceptionTest() {
+
+ WorkSpaceException exception = WorkspaceExceptionManager.createException(80021, "");
+ Assertions.assertTrue(80021 == exception.getErrCode());
+ Assertions.assertNotNull(exception.getDesc());
+
+ Exception nullPointerException =
+ Assertions.assertThrows(
+ NullPointerException.class,
+ () -> WorkspaceExceptionManager.createException(8002100, ""));
+ LOG.info("assertThrows pass, the error message: {} ", nullPointerException.getMessage());
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/BMLFsRestfulApiTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/BMLFsRestfulApiTest.java
new file mode 100644
index 000000000..d2d5f0fad
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/BMLFsRestfulApiTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.restful.api;
+
+import org.apache.linkis.common.utils.JsonUtils;
+import org.apache.linkis.filesystem.Scan;
+import org.apache.linkis.filesystem.WebApplicationServer;
+import org.apache.linkis.filesystem.bml.BMLHelper;
+import org.apache.linkis.server.Message;
+import org.apache.linkis.server.MessageStatus;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = {WebApplicationServer.class, Scan.class})
+@AutoConfigureMockMvc
+public class BMLFsRestfulApiTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(BMLFsRestfulApiTest.class);
+
+ @Autowired private MockMvc mockMvc;
+
+ @InjectMocks private BMLFsRestfulApi bmlFsRestfulApi;
+
+ @MockBean private BMLHelper bmlHelper;
+
+ @Test
+ @DisplayName("openScriptFromBMLTest")
+ public void openScriptFromBMLTest() throws Exception {
+ String querySql = this.getClass().getResource("/").getPath() + "/query.sql";
+ Map<String, Object> query = new HashMap<>();
+ InputStream is = new FileInputStream(new File(querySql));
+ query.put("stream", is);
+ query.put("name", "hadoop");
+ Mockito.when(bmlHelper.query("hadoop", "1", "1")).thenReturn(query);
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(
+ get("/filesystem/openScriptFromBML")
+ .param("fileName", querySql)
+ .param("resourceId", "1")
+ .param("version", "1"))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson().readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ @DisplayName("openScriptFromProductBMLTest")
+ public void openScriptFromProductBMLTest() throws Exception {
+
+ String querySql = this.getClass().getResource("/").getPath() + "/query.sql";
+ Map<String, Object> query = new HashMap<>();
+ InputStream is = new FileInputStream(new File(querySql));
+ query.put("stream", is);
+ query.put("name", "hadoop");
+ Mockito.when(bmlHelper.query("hadoop", "1", "1")).thenReturn(query);
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(
+ get("/filesystem/product/openScriptFromBML")
+ .param("fileName", querySql)
+ .param("resourceId", "1")
+ .param("version", "1"))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson().readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/FsRestfulApiTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/FsRestfulApiTest.java
new file mode 100644
index 000000000..c42466b18
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/restful/api/FsRestfulApiTest.java
@@ -0,0 +1,227 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.restful.api;
+
+import org.apache.linkis.common.io.FsPath;
+import org.apache.linkis.common.utils.JsonUtils;
+import org.apache.linkis.filesystem.Scan;
+import org.apache.linkis.filesystem.WebApplicationServer;
+import org.apache.linkis.filesystem.service.FsService;
+import org.apache.linkis.server.Message;
+import org.apache.linkis.server.MessageStatus;
+import org.apache.linkis.storage.fs.FileSystem;
+import org.apache.linkis.storage.fs.impl.LocalFileSystem;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.attribute.PosixFileAttributes;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest(classes = {WebApplicationServer.class, Scan.class})
+@AutoConfigureMockMvc
+public class FsRestfulApiTest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(FsRestfulApiTest.class);
+
+ @InjectMocks private FsRestfulApi fsRestfulApi;
+
+ @Autowired private MockMvc mockMvc;
+
+ @MockBean(name = "fsService")
+ private FsService fsService;
+
+ @Test
+ @DisplayName("getDirFileTreesTest")
+ public void getDirFileTreesTest() throws Exception {
+
+ if (!FsPath.WINDOWS) {
+ FileSystem fs = new LocalFileSystem();
+ fs.setUser("docker");
+ String group =
+ Files.readAttributes(
+ Paths.get(this.getClass().getResource("/").getPath()), PosixFileAttributes.class)
+ .group()
+ .getName();
+ fs.setGroup(new FsPath(this.getClass().getResource("/").getPath()), group);
+
+ Mockito.when(fsService.getFileSystem(Mockito.anyString(), Mockito.any(FsPath.class)))
+ .thenReturn(fs);
+ String path = this.getClass().getResource("/").getPath();
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(get("/filesystem/getDirFileTrees").param("path", path))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson()
+ .readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+ }
+
+ @Test
+ @DisplayName("isExistTest")
+ public void isExistTest() throws Exception {
+
+ FileSystem fs = new LocalFileSystem();
+ fs.setUser("docker");
+ Mockito.when(fsService.getFileSystem(Mockito.anyString(), Mockito.any(FsPath.class)))
+ .thenReturn(fs);
+ String path = this.getClass().getResource("/").getPath();
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(get("/filesystem/isExist").param("path", path))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson().readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ @DisplayName("fileInfoTest")
+ public void fileInfoTest() throws Exception {
+ if (!FsPath.WINDOWS) {
+ FileSystem fs = new LocalFileSystem();
+ fs.setUser("docker");
+ String group =
+ Files.readAttributes(
+ Paths.get(this.getClass().getResource("/").getPath()), PosixFileAttributes.class)
+ .group()
+ .getName();
+ fs.setGroup(new FsPath(this.getClass().getResource("/").getPath()), group);
+ Mockito.when(fsService.getFileSystem(Mockito.anyString(), Mockito.any(FsPath.class)))
+ .thenReturn(fs);
+ String path = this.getClass().getResource("/").getPath() + "query.sql";
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(get("/filesystem/fileInfo").param("path", path))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson()
+ .readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+ }
+
+ @Test
+ @DisplayName("openFileTest")
+ public void openFileTest() throws Exception {
+
+ if (!FsPath.WINDOWS) {
+ FileSystem fs = new LocalFileSystem();
+ fs.setUser("docker");
+ String group =
+ Files.readAttributes(
+ Paths.get(this.getClass().getResource("/").getPath()), PosixFileAttributes.class)
+ .group()
+ .getName();
+ fs.setGroup(new FsPath(this.getClass().getResource("/").getPath()), group);
+
+ Mockito.when(fsService.getFileSystem(Mockito.anyString(), Mockito.any(FsPath.class)))
+ .thenReturn(fs);
+ String path = this.getClass().getResource("/").getPath() + "query.sql";
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(get("/filesystem/fileInfo").param("path", path))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson()
+ .readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+ }
+
+ @Test
+ @DisplayName("openLogTest")
+ public void openLogTest() throws Exception {
+
+ if (!FsPath.WINDOWS) {
+ FileSystem fs = new LocalFileSystem();
+ fs.setUser("docker");
+ String group =
+ Files.readAttributes(
+ Paths.get(this.getClass().getResource("/").getPath()), PosixFileAttributes.class)
+ .group()
+ .getName();
+ fs.setGroup(new FsPath(this.getClass().getResource("/").getPath()), group);
+
+ Mockito.when(fsService.getFileSystem(Mockito.anyString(), Mockito.any(FsPath.class)))
+ .thenReturn(fs);
+ String path = this.getClass().getResource("/").getPath() + "info.log";
+
+ MvcResult mvcResult =
+ mockMvc
+ .perform(get("/filesystem/openLog").param("path", path))
+ .andExpect(status().isOk())
+ .andExpect(content().contentType(MediaType.APPLICATION_JSON))
+ .andReturn();
+
+ Message res =
+ JsonUtils.jackson()
+ .readValue(mvcResult.getResponse().getContentAsString(), Message.class);
+
+ assertEquals(MessageStatus.SUCCESS(), res.getStatus());
+ LOG.info(mvcResult.getResponse().getContentAsString());
+ }
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/util/WorkspaceUtilTest.java b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/util/WorkspaceUtilTest.java
new file mode 100644
index 000000000..2920c0bef
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/java/org/apache/linkis/filesystem/util/WorkspaceUtilTest.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.util;
+
+import org.apache.linkis.filesystem.entity.LogLevel;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+public class WorkspaceUtilTest {
+
+ @Test
+ @DisplayName("staticCommonConstTest")
+ public void staticCommonConstTest() {
+
+ String infoReg = WorkspaceUtil.infoReg;
+ String allReg = WorkspaceUtil.allReg;
+ String errorReg = WorkspaceUtil.errorReg;
+ String warnReg = WorkspaceUtil.warnReg;
+
+ Assertions.assertNotNull(infoReg);
+ Assertions.assertNotNull(allReg);
+ Assertions.assertNotNull(errorReg);
+ Assertions.assertNotNull(warnReg);
+ }
+
+ @Test
+ @DisplayName("logMatchTest")
+ public void logMatchTest() {
+ String code =
+ "2022-09-18 01:03:35.120 INFO [SpringContextShutdownHook] com.netflix.util.concurrent.ShutdownEnabledTimer 67 cancel - Shutdown hook removed for: NFLoadBalancer-PingTimer-linkis-cg-linkismanager";
+ LogLevel logLevel = new LogLevel(LogLevel.Type.INFO);
+ List<Integer> logMatch = WorkspaceUtil.logMatch(code, logLevel);
+
+ Assertions.assertTrue(logMatch.size() == 2);
+ }
+
+ @Test
+ @DisplayName("suffixTuningTest")
+ public void suffixTuningTest() {
+ String path = "/home/hadoop/logs/linkis/apps";
+ String tuningPath = WorkspaceUtil.suffixTuning(path);
+
+ Assertions.assertNotNull(tuningPath);
+ }
+
+ @Test
+ @DisplayName("isLogAdminTest")
+ public void isLogAdminTest() {
+ boolean logAdmin = WorkspaceUtil.isLogAdmin("hadoop");
+ boolean admin = WorkspaceUtil.isLogAdmin("hadoops");
+
+ Assertions.assertTrue(logAdmin);
+ Assertions.assertFalse(admin);
+ }
+}
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/application.properties b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/application.properties
new file mode 100644
index 000000000..6cbb4ce88
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/application.properties
@@ -0,0 +1,63 @@
+#
+# 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.
+#
+
+#wds.linkis.test.mode=true
+wds.linkis.server.version=v1
+
+#test
+wds.linkis.test.mode=true
+wds.linkis.test.user=hadoop
+
+wds.linkis.is.gateway=true
+wds.linkis.server.web.session.timeout=1h
+wds.linkis.gateway.conf.enable.proxy.user=false
+wds.linkis.gateway.conf.url.pass.auth=/dss/
+wds.linkis.gateway.conf.enable.token.auth=true
+wds.linkis.login_encrypt.enable=false
+#logging.level.root=debug
+#logging.file=./test.log
+#debug=true
+
+#ng.datasource.driver-class-name=org.h2.Driver
+#spring.datasource.url=jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=true
+#spring.datasource.schema=classpath:create.sql
+#spring.datasource.data=classpath:data.sql
+##spring.datasource.username=sa
+#spring.datasource.password=
+#spring.datasource.hikari.connection-test-query=select 1
+##spring.datasource.hikari.minimum-idle=5
+#spring.datasource.hikari.auto-commit=true
+#spring.datasource.hikari.validation-timeout=3000
+#spring.datasource.hikari.pool-name=linkis-test
+#spring.datasource.hikari.maximum-pool-size=50
+#spring.datasource.hikari.connection-timeout=30000
+#spring.datasource.hikari.idle-timeout=600000
+#spring.datasource.hikari.leak-detection-threshold=0
+#spring.datasource.hikari.initialization-fail-timeout=1
+
+#spring.main.web-application-type=servlet
+#server.port=1234
+#spring.h2.console.enabled=true
+
+#disable eureka discovery client
+spring.cloud.service-registry.auto-registration.enabled=false
+eureka.client.enabled=false
+eureka.client.serviceUrl.registerWithEureka=false
+linkis.workspace.filesystem.auto.create=true
+
+#mybatis-plus.mapper-locations=classpath*:org/apache/linkis/udf/dao/impl/*.xml
+#mybatis-plus.type-aliases-package=org.apache.linkis.udf.entity
+#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
+
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/deleteFile.sql b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/deleteFile.sql
new file mode 100644
index 000000000..95f334f41
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/deleteFile.sql
@@ -0,0 +1,17 @@
+/*
+ * 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.
+*/
+show databases;
\ No newline at end of file
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/existsSql.sql b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/existsSql.sql
new file mode 100644
index 000000000..95f334f41
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/existsSql.sql
@@ -0,0 +1,17 @@
+/*
+ * 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.
+*/
+show databases;
\ No newline at end of file
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/info.log b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/info.log
new file mode 100644
index 000000000..153f737ca
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/info.log
@@ -0,0 +1,19 @@
+/*
+ * 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.
+*/
+2022-09-18 01:03:35.133 INFO [SpringContextShutdownHook] com.netflix.discovery.DiscoveryClient 935 shutdown - Shutting down DiscoveryClient ...
+2022-09-18 01:03:38.135 INFO [SpringContextShutdownHook] com.netflix.discovery.DiscoveryClient 971 unregister - Unregistering ...
+2022-09-18 01:03:38.138 INFO [SpringContextShutdownHook] com.netflix.discovery.DiscoveryClient 973 unregister - DiscoveryClient_LINKIS-CG-ENGINECONN/bd210:linkis-cg-engineconn:43115 - deregister status: 200
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/linkis.properties b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/linkis.properties
new file mode 100644
index 000000000..56c5f05cf
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/linkis.properties
@@ -0,0 +1,22 @@
+#
+# 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.
+#
+
+#wds.linkis.test.mode=true
+wds.linkis.server.version=v1
+wds.linkis.storage.enable.io.proxy=true
+#linkis.workspace.filesystem.auto.create=true
+#test
+wds.linkis.test.mode=true
+wds.linkis.test.user=hadoop
\ No newline at end of file
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/query.sql b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/query.sql
new file mode 100644
index 000000000..95f334f41
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/resources/query.sql
@@ -0,0 +1,17 @@
+/*
+ * 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.
+*/
+show databases;
\ No newline at end of file
diff --git a/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/scala/org/apache/linkis/filesystem/entity/FSInfoTest.scala b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/scala/org/apache/linkis/filesystem/entity/FSInfoTest.scala
new file mode 100644
index 000000000..cb1b6bbcf
--- /dev/null
+++ b/linkis-public-enhancements/linkis-script-dev/linkis-storage-script-dev-server/src/test/scala/org/apache/linkis/filesystem/entity/FSInfoTest.scala
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+package org.apache.linkis.filesystem.entity
+
+import org.apache.linkis.storage.fs.impl.LocalFileSystem
+
+import org.junit.jupiter.api.{Assertions, DisplayName, Test}
+
+class FSInfoTest {
+
+ @Test
+ @DisplayName("timeoutTest")
+ def timeoutTest(): Unit = {
+
+ val info = new FSInfo("1", new LocalFileSystem(), System.currentTimeMillis())
+ val timeout = info.timeout
+ Assertions.assertFalse(timeout)
+
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@linkis.apache.org
For additional commands, e-mail: commits-help@linkis.apache.org