This is an automated email from the ASF dual-hosted git repository.
healchow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new b73b15eff [INLONG-4709][Manager] Add AnnoController unit test (#4722)
b73b15eff is described below
commit b73b15efff3e8428c57dcba28df4c304ca1fa03b
Author: leosanqing <[email protected]>
AuthorDate: Tue Jun 21 17:10:05 2022 +0800
[INLONG-4709][Manager] Add AnnoController unit test (#4722)
---
.../inlong/manager/common/pojo/user/UserInfo.java | 10 ++
.../transform/StreamTransformServiceTest.java | 3 -
.../service/workflow/WorkflowServiceImplTest.java | 3 -
.../resources/application-unit-test.properties | 3 +-
.../src/main/resources/h2/data.sql} | 14 +--
.../org/apache/inlong/manager/web/WebBaseTest.java | 89 +++++++++++++++
.../manager/web/controller/AnnoControllerTest.java | 121 +++++++++++++++++++++
.../web/controller/openapi/SortControllerTest.java | 58 +++++-----
8 files changed, 255 insertions(+), 46 deletions(-)
diff --git
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
index 18c9b8b29..10b6eacbb 100644
---
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
+++
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/pojo/user/UserInfo.java
@@ -19,7 +19,10 @@ package org.apache.inlong.manager.common.pojo.user;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
import org.apache.inlong.manager.common.enums.UserTypeEnum;
import org.apache.inlong.manager.common.util.Preconditions;
@@ -27,11 +30,18 @@ import org.apache.inlong.manager.common.util.Preconditions;
* User info, including username, password, etc.
*/
@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
@ApiModel("User info")
public class UserInfo {
private Integer id;
+ /**
+ * user type
+ * {@link UserTypeEnum}
+ */
@ApiModelProperty("type: 0 - manager, 1 - operator")
private Integer type;
diff --git
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/transform/StreamTransformServiceTest.java
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/transform/StreamTransformServiceTest.java
index a24920a5b..adf467981 100644
---
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/transform/StreamTransformServiceTest.java
+++
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/transform/StreamTransformServiceTest.java
@@ -27,8 +27,6 @@ import org.apache.inlong.manager.service.ServiceBaseTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import springfox.boot.starter.autoconfigure.OpenApiAutoConfiguration;
import java.util.Date;
import java.util.List;
@@ -36,7 +34,6 @@ import java.util.List;
/**
* Test class for save stream transform.
*/
-@EnableAutoConfiguration(exclude = OpenApiAutoConfiguration.class)
public class StreamTransformServiceTest extends ServiceBaseTest {
public static final String TRANSFORM_NAME = "test_transform";
diff --git
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowServiceImplTest.java
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowServiceImplTest.java
index cce93a2a4..1dacb4c1e 100644
---
a/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowServiceImplTest.java
+++
b/inlong-manager/manager-service/src/test/java/org/apache/inlong/manager/service/workflow/WorkflowServiceImplTest.java
@@ -61,8 +61,6 @@ import
org.apache.inlong.manager.workflow.util.WorkflowBeanUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import springfox.boot.starter.autoconfigure.OpenApiAutoConfiguration;
import java.util.ArrayList;
import java.util.Collections;
@@ -76,7 +74,6 @@ import static org.mockito.Mockito.when;
/**
* Test class for workflow service.
*/
-@EnableAutoConfiguration(exclude = OpenApiAutoConfiguration.class)
public class WorkflowServiceImplTest extends ServiceBaseTest {
public static final String OPERATOR = "admin";
diff --git
a/inlong-manager/manager-test/src/main/resources/application-unit-test.properties
b/inlong-manager/manager-test/src/main/resources/application-unit-test.properties
index 650a6dc36..679a0176b 100644
---
a/inlong-manager/manager-test/src/main/resources/application-unit-test.properties
+++
b/inlong-manager/manager-test/src/main/resources/application-unit-test.properties
@@ -21,12 +21,13 @@
logging.level.root=INFO
logging.level.org.apache.inlong.manager=debug
-spring.datasource.druid.url=jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;
+spring.datasource.druid.url=jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;NON_KEYWORDS=USER
spring.datasource.druid.username=root
spring.datasource.druid.password=""
spring.datasource.druid.driver-class-name=org.h2.Driver
spring.sql.init.schema-locations=classpath:h2/apache_inlong_manager.sql
+spring.sql.init.data-locations=classpath:h2/data.sql
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.validationQuery=SELECT 'x'
diff --git
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
b/inlong-manager/manager-test/src/main/resources/h2/data.sql
similarity index 71%
copy from
inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
copy to inlong-manager/manager-test/src/main/resources/h2/data.sql
index 72a0be0c6..1ab768789 100644
---
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
+++ b/inlong-manager/manager-test/src/main/resources/h2/data.sql
@@ -14,13 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-package org.apache.inlong.manager.web;
-
-import org.apache.inlong.manager.test.BaseTest;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest(classes = InLongWebApplication.class)
-public abstract class WebBaseTest extends BaseTest {
-
-}
+INSERT INTO `user` (`id`, `name`, `password`, `account_type`, `due_date`,
`create_time`,
+ `update_time`, `create_by`, `update_by`)
+VALUES (1, 'admin', '628ed559bff5ae36bd2184d4216973cf', 0, '2099-12-31
23:59:59', '2022-06-05 08:58:06',
+ '2022-06-05 08:58:06', 'inlong_init', 'inlong_init');
\ No newline at end of file
diff --git
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
index 72a0be0c6..9b87dcb18 100644
---
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
+++
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/WebBaseTest.java
@@ -17,10 +17,99 @@
package org.apache.inlong.manager.web;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.inlong.manager.common.beans.Response;
import org.apache.inlong.manager.test.BaseTest;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.SecurityManager;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+import javax.annotation.Resource;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static
org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+
+@TestInstance(Lifecycle.PER_CLASS)
@SpringBootTest(classes = InLongWebApplication.class)
public abstract class WebBaseTest extends BaseTest {
+ public MockMvc mockMvc;
+
+ @Resource
+ private WebApplicationContext context;
+ @Resource
+ ObjectMapper objectMapper;
+
+ @BeforeAll
+ void setup() {
+
SecurityUtils.setSecurityManager(context.getBean(SecurityManager.class));
+
+ mockMvc = MockMvcBuilders
+ .webAppContextSetup(context)
+ .alwaysDo(print())
+ .build();
+ }
+
+ public <T> Response<T> getResBody(MvcResult mvcResult, Class<T> t) throws
Exception {
+ return objectMapper
+ .readValue(
+
mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8),
+
objectMapper.getTypeFactory().constructParametricType(Response.class, t)
+ );
+ }
+
+ public <T> T getResBodyObj(MvcResult mvcResult, Class<T> t) throws
Exception {
+ Response<T> resBody = getResBody(mvcResult, t);
+ Assertions.assertTrue(resBody.isSuccess());
+ return resBody.getData();
+ }
+
+ public <T> List<T> getResBodyList(MvcResult mvcResult, Class<T> t) throws
Exception {
+ JsonNode jsonNode =
objectMapper.readTree(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8));
+ return objectMapper
+ .readValue(
+ jsonNode.get("data").toString(),
+
objectMapper.getTypeFactory().constructParametricType(List.class, t)
+ );
+ }
+
+ public <T, R> Map<T, R> getResBodyMap(MvcResult mvcResult, Class<T>
keyType, Class<R> valueType) throws Exception {
+ JsonNode jsonNode =
objectMapper.readTree(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8));
+ return objectMapper
+ .readValue(
+ jsonNode.get("data").toString(),
+
this.objectMapper.getTypeFactory().constructParametricType(HashMap.class,
keyType, valueType)
+ );
+ }
+
+ public <T, R> Map<T, R> getResBodyListMap(MvcResult mvcResult, Class<T>
keyType, Class<R> valueType)
+ throws Exception {
+ JsonNode jsonNode =
objectMapper.readTree(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8));
+ return objectMapper
+ .readValue(
+ jsonNode.get("data").toString(),
+
this.objectMapper.getTypeFactory().constructParametricType(HashMap.class,
keyType, valueType)
+ );
+ }
+
+ public <T> List<T> getResBodyPageList(MvcResult mvcResult, Class<T> t)
throws Exception {
+ JsonNode jsonNode =
objectMapper.readTree(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8));
+ return objectMapper
+ .readValue(
+ jsonNode.get("data").get("records").toString(),
+
objectMapper.getTypeFactory().constructParametricType(List.class, t)
+ );
+ }
}
diff --git
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
new file mode 100644
index 000000000..32b996033
--- /dev/null
+++
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/AnnoControllerTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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.inlong.manager.web.controller;
+
+import org.apache.inlong.manager.common.beans.Response;
+import org.apache.inlong.manager.common.enums.UserTypeEnum;
+import org.apache.inlong.manager.common.pojo.user.LoginUser;
+import org.apache.inlong.manager.common.pojo.user.UserInfo;
+import org.apache.inlong.manager.common.util.JsonUtils;
+import org.apache.inlong.manager.web.WebBaseTest;
+import org.apache.shiro.SecurityUtils;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MvcResult;
+
+import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+class AnnoControllerTest extends WebBaseTest {
+
+ @Test
+ void testLogin() throws Exception {
+ LoginUser loginUser = new LoginUser();
+ loginUser.setUsername("admin");
+ loginUser.setPassword("inlong");
+
+ MvcResult mvcResult = mockMvc.perform(
+ post("/anno/login")
+ .content(JsonUtils.toJsonString(loginUser))
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ String resBodyObj = getResBodyObj(mvcResult, String.class);
+ Assertions.assertNotNull(resBodyObj);
+
+ Assertions.assertTrue(SecurityUtils.getSubject().isAuthenticated());
+ }
+
+ @Test
+ void testRegister() throws Exception {
+ UserInfo userInfo = UserInfo.builder()
+ .username("test_name")
+ .password("test!!!!2343434")
+ .type(UserTypeEnum.Admin.getCode())
+ .validDays(88888)
+ .build();
+
+ MvcResult mvcResult = mockMvc.perform(
+ post("/anno/doRegister")
+ .content(JsonUtils.toJsonString(userInfo))
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Response<Boolean> resBody = getResBody(mvcResult, Boolean.class);
+ Assertions.assertTrue(resBody.isSuccess() && resBody.getData());
+ }
+
+ @Test
+ void testRegisterFailByExistName() throws Exception {
+ UserInfo userInfo = UserInfo.builder()
+ .username("admin")
+ .password("test!!!!2343434")
+ .type(UserTypeEnum.Admin.getCode())
+ .validDays(88888)
+ .build();
+
+ MvcResult mvcResult = mockMvc.perform(
+ post("/anno/doRegister")
+ .content(JsonUtils.toJsonString(userInfo))
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Response<Boolean> resBody = getResBody(mvcResult, Boolean.class);
+ Assertions.assertFalse(resBody.isSuccess());
+ Assertions.assertEquals("User [admin] already exists",
resBody.getErrMsg());
+ }
+
+ @Test
+ void testLogout() throws Exception {
+ testLogin();
+
+ MvcResult mvcResult = mockMvc.perform(
+ get("/anno/logout")
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .accept(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Response<String> resBody = getResBody(mvcResult, String.class);
+ Assertions.assertTrue(resBody.isSuccess());
+ Assertions.assertFalse(SecurityUtils.getSubject().isAuthenticated());
+ }
+
+}
diff --git
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/openapi/SortControllerTest.java
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/openapi/SortControllerTest.java
index f68a99b98..305289377 100644
---
a/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/openapi/SortControllerTest.java
+++
b/inlong-manager/manager-web/src/test/java/org/apache/inlong/manager/web/controller/openapi/SortControllerTest.java
@@ -17,6 +17,9 @@
package org.apache.inlong.manager.web.controller.openapi;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.inlong.common.pojo.sortstandalone.SortClusterResponse;
+import org.apache.inlong.manager.common.util.JsonUtils;
import org.apache.inlong.manager.dao.entity.SortClusterConfigEntity;
import org.apache.inlong.manager.dao.entity.SortTaskIdParamEntity;
import org.apache.inlong.manager.dao.entity.SortTaskSinkParamEntity;
@@ -24,14 +27,15 @@ import
org.apache.inlong.manager.dao.mapper.SortClusterConfgiEntityMapper;
import org.apache.inlong.manager.dao.mapper.SortTaskIdParamEntityMapper;
import org.apache.inlong.manager.dao.mapper.SortTaskSinkParamEntityMapper;
import org.apache.inlong.manager.web.WebBaseTest;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-import org.springframework.web.context.WebApplicationContext;
+import org.springframework.transaction.annotation.Transactional;
import static
org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static
org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@@ -40,14 +44,9 @@ import static
org.springframework.test.web.servlet.result.MockMvcResultMatchers.
/**
* Test class for sort controller.
*/
-public class SortControllerTest extends WebBaseTest {
-
- private static final Logger logger =
LoggerFactory.getLogger(SortControllerTest.class);
-
- private MockMvc mockMvc;
-
- @Autowired
- private WebApplicationContext webApplicationContext;
+@Slf4j
+@TestInstance(Lifecycle.PER_CLASS)
+class SortControllerTest extends WebBaseTest {
// todo Service do not support insert method now, use mappers to insert
data.
@Autowired
@@ -59,9 +58,8 @@ public class SortControllerTest extends WebBaseTest {
@Autowired
private SortClusterConfgiEntityMapper sortClusterConfgiEntityMapper;
- // @Before
- public void setUp() {
- mockMvc =
MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
+ @BeforeAll
+ void setUp() {
taskIdParamEntityMapper.insert(this.prepareIdParamsEntity("testTask1",
1));
taskIdParamEntityMapper.insert(this.prepareIdParamsEntity("testTask1",
2));
taskIdParamEntityMapper.insert(this.prepareIdParamsEntity("testTask2",
1));
@@ -78,14 +76,21 @@ public class SortControllerTest extends WebBaseTest {
*
* @throws Exception Exceptions to request generating.
*/
- // @Test
- // @Transactional
- public void testGetSortClusterConfig() throws Exception {
- RequestBuilder request =
- get("/openapi/sort/getClusterConfig")
- .param("clusterName", "testCluster")
- .param("md5", "testMd5");
- mockMvc.perform(request).andExpect(status().isOk()).andDo(print());
+ @Test
+ @Transactional
+ void testGetSortClusterConfig() throws Exception {
+ MvcResult mvcResult = mockMvc.perform(
+ get("/openapi/sort/getClusterConfig")
+ .param("clusterName", "testCluster")
+ .param("md5", "testMd5")
+ )
+ .andExpect(status().isOk())
+ .andReturn();
+
+ SortClusterResponse sortClusterResponse =
JsonUtils.parseObject(mvcResult.getResponse().getContentAsString(),
+ SortClusterResponse.class);
+ Assertions.assertNotNull(sortClusterResponse);
+ Assertions.assertEquals("testCluster",
sortClusterResponse.getData().getClusterName());
}
// @Test
@@ -137,9 +142,4 @@ public class SortControllerTest extends WebBaseTest {
.build();
}
- @Test
- public void defaultTest() {
- logger.info("Online exception druid connection timeout cannot create
transaction, "
- + "add default test method.");
- }
}