From 39a6302c187d45478e80f6d6bf6fd6773835ebe4 Mon Sep 17 00:00:00 2001 From: xuguang Date: Mon, 21 Feb 2022 10:43:54 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86controller=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=9B=86=E6=88=90=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GatewayHeartbeatControllerTest.java | 37 +++ .../gateway/GatewayReportControllerTest.java | 31 ++ .../GatewaySecurityControllerTest.java | 60 ++++ ...GatewayServiceDiscoveryControllerTest.java | 93 ++++++ .../normal/NormalAccountControllerTest.java | 44 +++ .../normal/NormalAppControllerTest.java | 195 ++++++++----- .../normal/NormalBillControllerTest.java | 46 +++ .../normal/NormalClusterControllerTest.java | 143 ++++++++- .../normal/NormalConfigControllerTest.java | 74 +++++ .../normal/NormalOrderControllerTest.java | 22 ++ .../normal/NormalTopicControllerTest.java | 274 +++++++++++++++++ .../op/OpAuthorityControllerTest.java | 145 ++++----- .../op/OpClusterControllerTest.java | 132 ++++----- .../versionone/op/OpExpertControllerTest.java | 65 +++++ .../versionone/op/OpTopicControllerTest.java | 276 ++++++++++++++++++ .../versionone/op/opTopicControllerTest.java | 201 ------------- .../versionone/rd/RdConfigControllerTest.java | 129 ++++++++ .../rd/RdLogicalClusterControllerTest.java | 207 +++++++++++++ .../versionone/rd/RdRegionControllerTest.java | 145 +++++++++ .../thirdpart/ThirdPartAppControllerTest.java | 39 +++ .../ThirdPartBrokerControllerTest.java | 50 ++++ .../ThirdPartClusterControllerTest.java | 39 +++ .../ThirdPartTopicControllerTest.java | 147 ++++++++++ .../kafka/manager/web/config/BaseTest.java | 33 +++ .../kafka/manager/web/config/CommonUtils.java | 49 ++++ .../manager/web/config/ConfigConstant.java | 87 ++++++ .../kafka/manager/web/config/Constant.java | 74 ----- .../manager/web/config/CustomDataSource.java | 86 ++++++ .../kafka/manager/web/config/HttpUtils.java | 18 -- .../integrationTest-settings.properties | 33 +++ 30 files changed, 2441 insertions(+), 533 deletions(-) create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayHeartbeatControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayReportControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewaySecurityControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayServiceDiscoveryControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAccountControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalBillControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalConfigControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalOrderControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalTopicControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpExpertControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpTopicControllerTest.java delete mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/opTopicControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdConfigControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdLogicalClusterControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdRegionControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartAppControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartBrokerControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartClusterControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartTopicControllerTest.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CommonUtils.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/ConfigConstant.java delete mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/Constant.java create mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CustomDataSource.java delete mode 100644 kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/HttpUtils.java create mode 100644 kafka-manager-web/src/test/resources/integrationTest-settings.properties diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayHeartbeatControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayHeartbeatControllerTest.java new file mode 100644 index 00000000..f80bbd73 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayHeartbeatControllerTest.java @@ -0,0 +1,37 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.gateway; + +import com.alibaba.fastjson.JSONObject; +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class GatewayHeartbeatControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试连接信息上报") + public void getSecurityAcls() { + String url = baseUrl + "/gateway/api/v1/heartbeat/survive-user?clusterId=" + physicalClusterId + + "&brokerId=" + configMap.get(ConfigConstant.ALIVE_BROKER_ID); + + JSONObject jsonObject = new JSONObject(); + HttpEntity httpEntity = new HttpEntity<>(jsonObject, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayReportControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayReportControllerTest.java new file mode 100644 index 00000000..be907386 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayReportControllerTest.java @@ -0,0 +1,31 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.gateway; + +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class GatewayReportControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试查询开启JMX采集的Topic") + public void getDiscoveryAddress() { + String url = baseUrl + "/gateway/api/v1/report/jmx/topics?clusterId=" + physicalClusterId; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewaySecurityControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewaySecurityControllerTest.java new file mode 100644 index 00000000..78def727 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewaySecurityControllerTest.java @@ -0,0 +1,60 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.gateway; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.dto.gateway.KafkaAclSearchDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.gateway.KafkaUserSearchDTO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class GatewaySecurityControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + private KafkaAclSearchDTO getKafkaAclSearchDTO() { + KafkaAclSearchDTO kafkaAclSearchDTO = new KafkaAclSearchDTO(); + kafkaAclSearchDTO.setClusterId(physicalClusterId); + kafkaAclSearchDTO.setStart(0L); + long now = System.currentTimeMillis(); + kafkaAclSearchDTO.setEnd(now); + return kafkaAclSearchDTO; + } + + private KafkaUserSearchDTO getKafkaUserSearchDTO() { + KafkaUserSearchDTO kafkaUserSearchDTO = new KafkaUserSearchDTO(); + kafkaUserSearchDTO.setStart(0L); + long now = System.currentTimeMillis(); + kafkaUserSearchDTO.setEnd(now); + return kafkaUserSearchDTO; + } + + @Test(description = "测试查询Kafka用户权限查询") + public void getSecurityAcls() { + String url = baseUrl + "/gateway/api/v1/security/acls"; + HttpEntity httpEntity = new HttpEntity<>(getKafkaAclSearchDTO(), httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + } + + @Test(description = "测试查询Kafka用户查询") + public void getSecurityUsers() { + String url = baseUrl + "/gateway/api/v1/security/users"; + HttpEntity httpEntity = new HttpEntity<>(getKafkaUserSearchDTO(), httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayServiceDiscoveryControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayServiceDiscoveryControllerTest.java new file mode 100644 index 00000000..a2c8a110 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/gateway/GatewayServiceDiscoveryControllerTest.java @@ -0,0 +1,93 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.gateway; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class GatewayServiceDiscoveryControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试获取指定集群服务地址") + public void getDiscoveryAddress() { + String url = baseUrl + "/gateway/api/v1/discovery/address?clusterId=" + physicalClusterId; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + } + + @Test(description = "测试获取最大App请求速率") + public void getDiscoveryAppIdRate() { + String url = baseUrl + "/gateway/api/v1/discovery/appId-rate?versionNumber=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取集群服务地址") + public void getDiscoveryInit() { + String url = baseUrl + "/gateway/api/v1/discovery/init"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取最大IP请求速率") + public void getDiscoveryIpRate() { + String url = baseUrl + "/gateway/api/v1/discovery/ip-rate?versionNumber=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取最大并发请求数") + public void getDiscoveryMaxRequestNum() { + String url = baseUrl + "/gateway/api/v1/discovery/max-request-num?versionNumber=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试最大SP请求速率") + public void getDiscoverySpLimit() { + String url = baseUrl + "/gateway/api/v1/discovery/sp-limit?versionNumber=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取集群服务地址") + public void getDiscoveryUpdate() { + String url = baseUrl + "/gateway/api/v1/discovery/update?versionNumber=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAccountControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAccountControllerTest.java new file mode 100644 index 00000000..ed9ca96b --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAccountControllerTest.java @@ -0,0 +1,44 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.normal; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class NormalAccountControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试账号搜索") + public void getAccountsTest() { + String url = baseUrl + "/api/v1/normal/accounts?keyWord=admin"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试查询角色") + public void getAccountTest() { + String url = baseUrl + "/api/v1/normal/accounts/account"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAppControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAppControllerTest.java index 1e203587..03abc706 100644 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAppControllerTest.java +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalAppControllerTest.java @@ -3,15 +3,19 @@ package com.xiaojukeji.kafka.manager.web.api.versionone.normal; import com.xiaojukeji.kafka.manager.common.entity.Result; import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; import com.xiaojukeji.kafka.manager.common.entity.dto.normal.AppDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; import com.xiaojukeji.kafka.manager.web.config.BaseTest; -import com.xiaojukeji.kafka.manager.web.config.Constant; -import com.xiaojukeji.kafka.manager.web.config.HttpUtils; -import org.springframework.boot.test.web.client.TestRestTemplate; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; import org.springframework.http.*; import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -19,22 +23,82 @@ import java.util.Map; * @Date 2022/1/7 */ public class NormalAppControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + // 成功创建Topic + String url = baseUrl + "/api/v1/op/topics"; + createCommonTopic(url); + } - private final TestRestTemplate testRestTemplate = new TestRestTemplate(); + @AfterClass + public void afterTest() { + // 删除Topic成功 + String url = baseUrl + "/api/v1/op/topics"; + deleteTopic(url); + } + + private TopicCreationDTO getTopicCreationDTO() { + // 在broker1上创建1分区,1副本的createTopicTest + TopicCreationDTO creationDTO = new TopicCreationDTO(); + creationDTO.setAppId(configMap.get(ConfigConstant.APPID)); + // 在broker1上创建 + Integer brokerId = Integer.parseInt(configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + creationDTO.setBrokerIdList(Arrays.asList(brokerId)); + creationDTO.setPartitionNum(1); + creationDTO.setReplicaNum(1); + creationDTO.setRetentionTime(1000L * 60 * 60 * 168); + creationDTO.setPeakBytesIn(10L * 1024 * 1024); + // 物理集群id + + creationDTO.setClusterId(physicalClusterId); + creationDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + return creationDTO; + } + + private void createCommonTopic(String url) { + // 创建Topic + TopicCreationDTO creationDTO = getTopicCreationDTO(); + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void deleteTopic(String url) { + // 删除创建的topic + TopicDeletionDTO topicDeletionDTO = getTopicDeletionDTO(); + HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); + Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result2.getBody()); + Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private TopicDeletionDTO getTopicDeletionDTO() { + TopicDeletionDTO deletionDTO = new TopicDeletionDTO(); + + deletionDTO.setClusterId(physicalClusterId); + deletionDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + deletionDTO.setUnForce(true); + return deletionDTO; + } private AppDTO getAppDTO() { AppDTO appDTO = new AppDTO(); - appDTO.setAppId(Constant.APPID_IN_MYSQL); + appDTO.setAppId(configMap.get(ConfigConstant.APPID)); appDTO.setName("KM管理员"); - appDTO.setPrincipals("admin"); + appDTO.setPrincipals(configMap.get(ConfigConstant.ADMIN_USER)); appDTO.setDescription("KM管理员应用-谨慎对外提供"); return appDTO; } @Test(description = "测试获取App列表") public void getAppsTest() { - String url = Constant.BASE_URL + "/api/v1/normal/apps"; + String url = baseUrl + "/api/v1/normal/apps"; // 有headers登陆 getAppsWithHeadersTest(url); @@ -43,7 +107,6 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppsWithHeadersTest(String url) { - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -59,7 +122,7 @@ public class NormalAppControllerTest extends BaseTest { @Test(description = "测试由appId获取app") public void getAppBasicInfoTest() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/basic-info"; + String url = baseUrl + "/api/v1/normal/apps/{appId}/basic-info"; // 查询结果不为空 getAppBasicInfo2ResultNotEmptyTest(url); @@ -68,9 +131,9 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppBasicInfo2ResultNotEmptyTest(String url) { - HttpEntity httpEntity = new HttpEntity<>("", HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -80,9 +143,9 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppBasicInfo2ResultEmptyTest(String url) { - HttpEntity httpEntity = new HttpEntity<>("", HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.INVALID_APPID); + urlVariables.put("appId", ConfigConstant.INVALID_STRING); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -93,7 +156,7 @@ public class NormalAppControllerTest extends BaseTest { @Test(description = "测试修改app") public void modifyApp() { - String url = Constant.BASE_URL + "/api/v1/normal/apps"; + String url = baseUrl + "/api/v1/normal/apps"; // 修改成功 modifyApp2SuccessTest(url); // 传的dto为空, 修改不成功 @@ -102,7 +165,6 @@ public class NormalAppControllerTest extends BaseTest { private void modifyApp2SuccessTest(String url) { AppDTO appDTO = getAppDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(appDTO, httpHeaders); @@ -115,7 +177,6 @@ public class NormalAppControllerTest extends BaseTest { private void modifyApp2FailureTest(String url) { AppDTO appDTO = new AppDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(appDTO, httpHeaders); @@ -128,7 +189,7 @@ public class NormalAppControllerTest extends BaseTest { @Test(description = "测试获取有权限的Topic信息") public void getAppTopicsTest() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/topics"; + String url = baseUrl + "/api/v1/normal/apps/{appId}/topics"; // 参数appId getAppTopics1Test(url); // 参数有appId,mine=true @@ -140,9 +201,9 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppTopics1Test(String url) { - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -153,9 +214,9 @@ public class NormalAppControllerTest extends BaseTest { private void getAppTopics2Test(String url) { url = url + "?mine=true"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -165,9 +226,9 @@ public class NormalAppControllerTest extends BaseTest { private void getAppTopics3Test(String url) { url = url + "?mine=false"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -177,9 +238,9 @@ public class NormalAppControllerTest extends BaseTest { private void getAppTopics4Test(String url) { url = url + "?mine=false"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.INVALID_APPID); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -189,7 +250,7 @@ public class NormalAppControllerTest extends BaseTest { @Test(description = "测试Quota查询") public void getAppIdQuotaTest() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/quotas"; + String url = baseUrl + "/api/v1/normal/apps/{appId}/quotas"; // appId不为空,clusterId和topicName在数据库中真实存在,isPhysicalClusterId=true getAppIdQuota1Test(url); // appId无效 @@ -201,11 +262,11 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdQuota1Test(String url) { - url = url + "?clusterId=" + Constant.PHYSICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL + "&isPhysicalClusterId=true"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + url = url + "?clusterId=" + physicalClusterId + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME) + "&isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -214,11 +275,11 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdQuota2Test(String url) { - url = url + "?clusterId=" + Constant.PHYSICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL + "&isPhysicalClusterId=true"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + url = url + "?clusterId=" + physicalClusterId + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME) + "&isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.INVALID_APPID); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -227,11 +288,11 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdQuota3Test(String url) { - url = url + "?clusterId=" + Constant.PHYSICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.INVALID_TOPIC_NAME + "&isPhysicalClusterId=true"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + url = url + "?clusterId=" + physicalClusterId + "&topicName=" + + ConfigConstant.INVALID_STRING + "&isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -240,11 +301,11 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdQuota4Test(String url) { - url = url + "?clusterId=" + Constant.INVALID_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL + "&isPhysicalClusterId=false"; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + url = url + "?clusterId=" + ConfigConstant.INVALID_CLUSTER_ID + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME) + "&isPhysicalClusterId=false"; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -254,7 +315,7 @@ public class NormalAppControllerTest extends BaseTest { @Test(description = "测试获取应用连接信息") public void getAppIdConnectionsTest() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/connections"; + String url = baseUrl + "/api/v1/normal/apps/{appId}/connections"; // appId存在数据库 getAppIdConnections1Test(url); // appId不存在数据库 @@ -262,9 +323,9 @@ public class NormalAppControllerTest extends BaseTest { } public void getAppIdConnections1Test(String url) { - HttpEntity httpEntity = new HttpEntity<>("", HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -274,9 +335,9 @@ public class NormalAppControllerTest extends BaseTest { } public void getAppIdConnections2Test(String url) { - HttpEntity httpEntity = new HttpEntity<>("", HttpUtils.getHttpHeaders()); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.INVALID_APPID); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -298,12 +359,12 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdAuthority1Test() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/authorities"; - url = url + "?clusterId=" + Constant.LOGICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + String url = baseUrl + "/api/v1/normal/apps/{appId}/authorities"; + url = url + "?clusterId=" + configMap.get(ConfigConstant.LOGICAL_CLUSTER_ID) + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -312,12 +373,12 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdAuthority2Test() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/authorities"; - url = url + "?clusterId=" + Constant.LOGICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + String url = baseUrl + "/api/v1/normal/apps/{appId}/authorities"; + url = url + "?clusterId=" + configMap.get(ConfigConstant.LOGICAL_CLUSTER_ID) + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.INVALID_APPID); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -326,12 +387,12 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdAuthority3Test() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/authorities"; - url = url + "?clusterId=" + Constant.INVALID_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.TOPIC_NAME_IN_MYSQL; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + String url = baseUrl + "/api/v1/normal/apps/{appId}/authorities"; + url = url + "?clusterId=" +ConfigConstant.INVALID_CLUSTER_ID + "&topicName=" + + configMap.get(ConfigConstant.TOPIC_NAME); + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -340,12 +401,12 @@ public class NormalAppControllerTest extends BaseTest { } private void getAppIdAuthority4Test() { - String url = Constant.BASE_URL + "/api/v1/normal/apps/{appId}/authorities"; - url = url + "?clusterId=" + Constant.LOGICAL_CLUSTER_ID_IN_MYSQL + "&topicName=" + - Constant.INVALID_TOPIC_NAME; - HttpEntity httpEntity = new HttpEntity<>(null, HttpUtils.getHttpHeaders()); + String url = baseUrl + "/api/v1/normal/apps/{appId}/authorities"; + url = url + "?clusterId=" + configMap.get(ConfigConstant.LOGICAL_CLUSTER_ID) + "&topicName=" + + ConfigConstant.INVALID_STRING; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("appId", Constant.APPID_IN_MYSQL); + urlVariables.put("appId", configMap.get(ConfigConstant.APPID)); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalBillControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalBillControllerTest.java new file mode 100644 index 00000000..80784fa4 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalBillControllerTest.java @@ -0,0 +1,46 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.normal; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class NormalBillControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试用户账单概览") + public void getBillStaffSummaryTest() { + Long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/bills/staff-summary?startTime=0&endTime=" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试用户账单详情") + public void getBillStaffDetailTest() { + Long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/bills/staff-detail?timestamp=0" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalClusterControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalClusterControllerTest.java index 3a50e6ff..ea750286 100644 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalClusterControllerTest.java +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalClusterControllerTest.java @@ -3,26 +3,37 @@ package com.xiaojukeji.kafka.manager.web.api.versionone.normal; import com.xiaojukeji.kafka.manager.common.entity.Result; import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; import com.xiaojukeji.kafka.manager.web.config.BaseTest; -import com.xiaojukeji.kafka.manager.web.config.Constant; -import com.xiaojukeji.kafka.manager.web.config.HttpUtils; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.*; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.testng.Assert; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.HashMap; +import java.util.Map; + /** * @author xuguang * @Date 2022/1/14 */ public class NormalClusterControllerTest extends BaseTest { - private final TestRestTemplate testRestTemplate = new TestRestTemplate(); + private Long logicalClusterId; + + @BeforeClass + public void init() { + super.init(); + + logicalClusterId = Long.parseLong(configMap.get(ConfigConstant.LOGICAL_CLUSTER_ID)); + } @Test(description = "测试获取集群列表") public void getLogicClusterVOListTest() { - String url = Constant.BASE_URL + "/api/v1/normal/clusters/basic-info"; + String url = baseUrl + "/api/v1/normal/clusters/basic-info"; - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -33,11 +44,123 @@ public class NormalClusterControllerTest extends BaseTest { @Test(description = "测试由逻辑集群id获取集群") public void getLogicClusterVOByIdTest() { - String url = Constant.BASE_URL + "/api/v1/normal/clusters/{logicalClusterId}/basic-info"; + // 获取成功 + getLogicClusterVOById1(); + // 集群不存在 + getLogicClusterVOById2(); + } - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + private void getLogicClusterVOById1() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/basic-info"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void getLogicClusterVOById2() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/basic-info"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", ConfigConstant.INVALID_CLUSTER_ID); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.CLUSTER_NOT_EXIST.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群元信息列表") + public void getBrokerMetadataTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/broker-metadata"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群") + public void getBrokersTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/brokers"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群实时流量") + public void getMetricsTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/metrics"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群历史流量") + public void getMetricsHistoryTest() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/metrics-history?startTime=0&endTime=" + now; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群限流信息") + public void getThrottlesTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/throttles"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群topic元信息列表") + public void getTopicMetadataTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/topic-metadata"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群id获取集群列表") + public void getTopicsTest() { + String url = baseUrl + "/api/v1/normal/clusters/{logicalClusterId}/topics"; + + Map urlVariables = new HashMap<>(); + urlVariables.put("logicalClusterId", logicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); Assert.assertNotNull(result.getBody()); Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalConfigControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalConfigControllerTest.java new file mode 100644 index 00000000..75d3d2f5 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalConfigControllerTest.java @@ -0,0 +1,74 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.normal; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class NormalConfigControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试获取集群套餐") + public void getClusterCombos() { + String url = baseUrl + "/api/v1/normal/configs/cluster-combos"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取集群套餐") + public void getClusterModes() { + String url = baseUrl + "/api/v1/normal/configs/cluster-combos"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取数据中心") + public void getIdc() { + String url = baseUrl + "/api/v1/normal/configs/idc"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取峰值状态") + public void getPeakFlowStatus() { + String url = baseUrl + "/api/v1/normal/configs/peak-flow-status"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取峰值状态") + public void getTaskStatus() { + String url = baseUrl + "/api/v1/normal/configs/task-status"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalOrderControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalOrderControllerTest.java new file mode 100644 index 00000000..0c5d5193 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalOrderControllerTest.java @@ -0,0 +1,22 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.normal; + +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.testng.annotations.BeforeClass; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class NormalOrderControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + + + } + + private void createOrderSuccess() { + + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalTopicControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalTopicControllerTest.java new file mode 100644 index 00000000..01b105c2 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/normal/NormalTopicControllerTest.java @@ -0,0 +1,274 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.normal; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.normal.TopicDataSampleDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class NormalTopicControllerTest extends BaseTest { + + private String topicName; + + @BeforeClass + public void init() { + super.init(); + + // 成功创建Topic + String url = baseUrl + "/api/v1/op/topics"; + createCommonTopic(url); + + topicName = configMap.get(ConfigConstant.TOPIC_NAME); + } + + @AfterClass + public void afterTest() { + // 删除Topic成功 + String url = baseUrl + "/api/v1/op/topics"; + deleteTopics(url); + } + + private void createCommonTopic(String url) { + // 创建Topic + + TopicCreationDTO creationDTO = CustomDataSource.getTopicCreationDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void deleteTopics(String url) { + // 删除创建的topic + TopicDeletionDTO topicDeletionDTO = CustomDataSource.getTopicDeletionDTO(configMap); + HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); + Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result2.getBody()); + Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试Topic有权限的应用信息") + public void getApps() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/apps?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic基本信息") + public void getBasicInfo() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/basic-info?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic账单信息") + public void getTopicBills() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/basic-info?" + + "isPhysicalClusterId=true&startTime=0&endTime=" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic业务信息") + public void getBusiness() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/business?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic连接信息") + public void getConnection() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/connections?isPhysicalClusterId=true" + + "&appId=" + configMap.get(ConfigConstant.APPID); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic实时流量信息") + public void getMetrics() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/metrics?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic历史流量信息") + public void getMetricsHistory() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/metrics-history?isPhysicalClusterId=true" + + "&startTime=0&endTime=" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic历史流量信息") + public void getMyApps() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/my-apps?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic分区信息") + public void getPartitions() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/partitions?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic实时请求耗时信息") + public void getRequestTime() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/request-time?isPhysicalClusterId=true"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic历史流量信息") + public void getRequestTimeHistory() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/request-time-history?isPhysicalClusterId=true" + + "&startTime=0&endTime=" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic历史流量信息") + public void getSample() { + + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/sample"; + HttpEntity httpEntity = new HttpEntity<>(getTopicDataSampleDTO(), httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private TopicDataSampleDTO getTopicDataSampleDTO() { + TopicDataSampleDTO topicDataSampleDTO = new TopicDataSampleDTO(); + topicDataSampleDTO.setIsPhysicalClusterId(true); + topicDataSampleDTO.setOffset(0L); + topicDataSampleDTO.setTimeout(0); + topicDataSampleDTO.setMaxMsgNum(0); + topicDataSampleDTO.setTruncate(false); + topicDataSampleDTO.setPartitionId(0); + return topicDataSampleDTO; + } + + @Test(description = "测试获取Topic流量统计信息") + public void getStatisticMetrics() { + String url = baseUrl + "/api/v1/normal/{clusterId}/topics/{topicName}/statistic-metrics?isPhysicalClusterId=true" + + "&latest-day=1"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", topicName); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpAuthorityControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpAuthorityControllerTest.java index bb517189..67315adc 100644 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpAuthorityControllerTest.java +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpAuthorityControllerTest.java @@ -2,53 +2,89 @@ package com.xiaojukeji.kafka.manager.web.api.versionone.op; import com.xiaojukeji.kafka.manager.common.entity.Result; import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; import com.xiaojukeji.kafka.manager.openapi.common.dto.TopicAuthorityDTO; import com.xiaojukeji.kafka.manager.web.config.BaseTest; -import com.xiaojukeji.kafka.manager.web.config.Constant; -import com.xiaojukeji.kafka.manager.web.config.HttpUtils; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import java.util.Arrays; +import java.util.List; + /** * @author xuguang * @Date 2022/1/11 */ public class OpAuthorityControllerTest extends BaseTest { + @BeforeClass + public void init() { + super.init(); + + // 成功创建Topic + String url = baseUrl + "/api/v1/op/topics"; + createCommonTopic3Test(url); + } + + @AfterClass + public void afterTest() { + // 删除Topic成功 + String url = baseUrl + "/api/v1/op/topics"; + deleteTopics3Test(url); + } + + private void createCommonTopic3Test(String url) { + // 创建Topic + + TopicCreationDTO creationDTO = CustomDataSource.getTopicCreationDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void deleteTopics3Test(String url) { + // 删除创建的topic + TopicDeletionDTO topicDeletionDTO = CustomDataSource.getTopicDeletionDTO(configMap); + HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); + Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result2.getBody()); + Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + private final TestRestTemplate testRestTemplate = new TestRestTemplate(); private TopicAuthorityDTO getTopicAuthorityDTO() { TopicAuthorityDTO topicAuthorityDTO = new TopicAuthorityDTO(); - topicAuthorityDTO.setClusterId(Constant.LOGICAL_CLUSTER_ID_IN_MYSQL); - topicAuthorityDTO.setTopicName(Constant.TOPIC_NAME_IN_MYSQL); - topicAuthorityDTO.setAppId(Constant.APPID_IN_MYSQL); - topicAuthorityDTO.setAccess(Constant.ACCESS); + long logicalClusterId = Long.parseLong(configMap.get(ConfigConstant.LOGICAL_CLUSTER_ID)); + topicAuthorityDTO.setClusterId(logicalClusterId); + topicAuthorityDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + topicAuthorityDTO.setAppId(configMap.get(ConfigConstant.APPID)); + topicAuthorityDTO.setAccess(ConfigConstant.ACCESS); return topicAuthorityDTO; } @Test(description = "测试权限调整") public void addAuthorityTest() { - String url = Constant.BASE_URL + "/topic-authorities"; + String url = baseUrl + "/topic-authorities"; addAuthority1Test(url); - // cluster not exist - addAuthority2Test(url); - // param illegal - addAuthority3Test(url); - // app not exist - addAuthority4Test(url); - // topic not exist - addAuthority5Test(url); - // mysqlError, 权限一致,无法插入 - addAuthority6Test(url); } private void addAuthority1Test(String url) { TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(topicAuthorityDTO, httpHeaders); ResponseEntity result = testRestTemplate.exchange( @@ -57,73 +93,4 @@ public class OpAuthorityControllerTest extends BaseTest { Assert.assertNotNull(result.getBody()); Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); } - - private void addAuthority2Test(String url) { - TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - topicAuthorityDTO.setClusterId(Constant.INVALID_CLUSTER_ID_IN_MYSQL); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = - new HttpEntity<>(topicAuthorityDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange( - url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.CLUSTER_NOT_EXIST.getCode()); - } - - private void addAuthority3Test(String url) { - TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - topicAuthorityDTO.setClusterId(Constant.INVALID_ID); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = - new HttpEntity<>(topicAuthorityDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange( - url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); - } - - private void addAuthority4Test(String url) { - TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - topicAuthorityDTO.setAppId(Constant.INVALID_APPID); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = - new HttpEntity<>(topicAuthorityDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange( - url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.APP_NOT_EXIST.getCode()); - } - - private void addAuthority5Test(String url) { - TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - topicAuthorityDTO.setTopicName(Constant.INVALID_TOPIC_NAME); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = - new HttpEntity<>(topicAuthorityDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange( - url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.TOPIC_NOT_EXIST.getCode()); - } - - private void addAuthority6Test(String url) { - TopicAuthorityDTO topicAuthorityDTO = getTopicAuthorityDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = - new HttpEntity<>(topicAuthorityDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange( - url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.MYSQL_ERROR.getCode()); - } } diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpClusterControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpClusterControllerTest.java index a3b72fb4..070185f8 100644 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpClusterControllerTest.java +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpClusterControllerTest.java @@ -7,13 +7,11 @@ import com.xiaojukeji.kafka.manager.common.entity.dto.op.ControllerPreferredCand import com.xiaojukeji.kafka.manager.common.entity.dto.rd.ClusterDTO; import com.xiaojukeji.kafka.manager.common.entity.vo.rd.cluster.ClusterDetailVO; import com.xiaojukeji.kafka.manager.web.config.BaseTest; -import com.xiaojukeji.kafka.manager.web.config.Constant; -import com.xiaojukeji.kafka.manager.web.config.HttpUtils; -import org.springframework.boot.test.web.client.TestRestTemplate; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; import org.springframework.http.*; import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.Arrays; @@ -27,26 +25,26 @@ import java.util.Map; */ public class OpClusterControllerTest extends BaseTest { - private final TestRestTemplate testRestTemplate = new TestRestTemplate(); + @BeforeClass + public void init() { + super.init(); - @BeforeMethod - public void addNewCluster() { - String url = Constant.BASE_URL + "/api/v1/op/clusters"; + String url = baseUrl + "/api/v1/op/clusters"; // 接入成功 - addnewCluster1Test(url); + addNewCluter1Test(url); } - @AfterMethod + @AfterClass public void deleteCluster() { - String url = Constant.BASE_URL + "/api/v1/op/clusters"; + String url = baseUrl + "/api/v1/op/clusters"; // 删除集群成功 deleteCluster1Test(url); } private Long getPhysicalClusterId() { - String url = Constant.BASE_URL + "/api/v1/rd/clusters/basic-info?need-detail=true"; - - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + String url = baseUrl + "/api/v1/rd/clusters/basic-info?need-detail=true"; + String clusterName = configMap.get(ConfigConstant.CLUSTER_NAME); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); @@ -54,7 +52,7 @@ public class OpClusterControllerTest extends BaseTest { String s = JSON.toJSONString(result.getBody().getData()); List clusterDetailVOS = JSON.parseArray(s, ClusterDetailVO.class); for (ClusterDetailVO clusterDetailVO : clusterDetailVOS) { - if (clusterDetailVO.getClusterName().equals(Constant.CLUSTER_NAME)) { + if (clusterDetailVO.getClusterName().equals(clusterName)) { return clusterDetailVO.getClusterId(); } } @@ -65,28 +63,27 @@ public class OpClusterControllerTest extends BaseTest { ClusterDTO clusterDTO = new ClusterDTO(); Long physicalClusterId = getPhysicalClusterId(); clusterDTO.setClusterId(physicalClusterId); - clusterDTO.setClusterName(Constant.CLUSTER_NAME); - clusterDTO.setZookeeper(Constant.ZK_ADDRESS); - clusterDTO.setBootstrapServers(Constant.BOOTSTRAP_SERVERS); - clusterDTO.setIdc(Constant.IDC); + clusterDTO.setClusterName(configMap.get(ConfigConstant.CLUSTER_NAME)); + clusterDTO.setZookeeper(configMap.get(ConfigConstant.ZOOKEEPER_ADDRESS)); + clusterDTO.setBootstrapServers(configMap.get(ConfigConstant.BOOTSTRAP_ADDRESS)); + clusterDTO.setIdc(ConfigConstant.IDC); return clusterDTO; } @Test(description = "测试接入集群") public void addNewClusterTest() { - String url = Constant.BASE_URL + "/api/v1/op/clusters"; + String url = baseUrl + "/api/v1/op/clusters"; // 参数无效 - addnewCluster2Test(url); + addNewCluster2Test(url); // 无效的zk地址 - addnewCluster3Test(url); + addNewCluster3Test(url); // 重复创建 - addnewCluster4Test(url); + addNewCluster4Test(url); } - private void addnewCluster1Test(String url) { + private void addNewCluter1Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -97,10 +94,9 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); } - private void addnewCluster2Test(String url) { + private void addNewCluster2Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); clusterDTO.setZookeeper(null); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -111,10 +107,9 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); } - private void addnewCluster3Test(String url) { + private void addNewCluster3Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - clusterDTO.setZookeeper(Constant.INVALID); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + clusterDTO.setZookeeper(ConfigConstant.INVALID_STRING); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -125,9 +120,8 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.ZOOKEEPER_CONNECT_FAILED.getCode()); } - private void addnewCluster4Test(String url) { + private void addNewCluster4Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -140,7 +134,7 @@ public class OpClusterControllerTest extends BaseTest { @Test(description = "测试修改物理集群") public void modifyClusterTest() { - String url = Constant.BASE_URL + "/api/v1/op/clusters"; + String url = baseUrl + "/api/v1/op/clusters"; // 修改成功 modifyCluster1Test(url); // 参数错误 @@ -153,7 +147,6 @@ public class OpClusterControllerTest extends BaseTest { private void modifyCluster1Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -167,7 +160,6 @@ public class OpClusterControllerTest extends BaseTest { private void modifyCluster2Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); clusterDTO.setClusterId(null); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -180,8 +172,7 @@ public class OpClusterControllerTest extends BaseTest { private void modifyCluster3Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - clusterDTO.setClusterId(Constant.INVALID_CLUSTER_ID_IN_MYSQL); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + clusterDTO.setClusterId(ConfigConstant.INVALID_CLUSTER_ID); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -194,8 +185,7 @@ public class OpClusterControllerTest extends BaseTest { private void modifyCluster4Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); - clusterDTO.setZookeeper(Constant.INVALID); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + clusterDTO.setZookeeper(ConfigConstant.INVALID_STRING); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(clusterDTO, httpHeaders); @@ -208,7 +198,7 @@ public class OpClusterControllerTest extends BaseTest { @Test(description = "测试开启|关闭集群监控") public void clusterMonitorTest() { - String url = Constant.BASE_URL + "/api/v1/op/clusters/{clusterId}/monitor"; + String url = baseUrl + "/api/v1/op/clusters/{clusterId}/monitor"; // 监控关闭成功 clusterMonitor1Test(url); // 监控开启成功 @@ -219,7 +209,6 @@ public class OpClusterControllerTest extends BaseTest { private void clusterMonitor1Test(String url) { url = url + "?status=0"; - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); @@ -234,7 +223,6 @@ public class OpClusterControllerTest extends BaseTest { private void clusterMonitor2Test(String url) { url = url + "?status=1"; - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); @@ -249,11 +237,10 @@ public class OpClusterControllerTest extends BaseTest { private void clusterMonitor3Test(String url) { url = url + "?status=1"; - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); Map urlVariables = new HashMap<>(); - urlVariables.put("clusterId", Constant.INVALID_ID); + urlVariables.put("clusterId", ConfigConstant.INVALID_CLUSTER_ID); ResponseEntity result = testRestTemplate.exchange( url, HttpMethod.PUT, httpEntity, Result.class, urlVariables); @@ -264,21 +251,22 @@ public class OpClusterControllerTest extends BaseTest { @Test(description = "测试增加Controller优先候选的Broker") public void addControllerPreferredCandidatesTest() { - String url = Constant.BASE_URL + "/api/v1/op/cluster-controller/preferred-candidates"; + String url = baseUrl + "/api/v1/op/cluster-controller/preferred-candidates"; + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); // 增加成功 - addControllerPreferredCandidates1Test(url); + addControllerPreferredCandidates1Test(url, physicalClusterId); // broker不存在 - addControllerPreferredCandidates2Test(url); + addControllerPreferredCandidates2Test(url, physicalClusterId); // 参数错误 - addControllerPreferredCandidates3Test(url); + addControllerPreferredCandidates3Test(url, physicalClusterId); } - private void addControllerPreferredCandidates1Test(String url) { + private void addControllerPreferredCandidates1Test(String url, Long physicalClusterId) { ControllerPreferredCandidateDTO dto = new ControllerPreferredCandidateDTO(); - dto.setClusterId(getPhysicalClusterId()); - dto.setBrokerIdList(Arrays.asList(Constant.ALIVE_BROKER_ID)); + dto.setClusterId(physicalClusterId); + String aliveBrokerId = configMap.get(ConfigConstant.ALIVE_BROKER_ID); + dto.setBrokerIdList(Arrays.asList(Integer.parseInt(aliveBrokerId))); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(dto, httpHeaders); @@ -289,12 +277,11 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); } - private void addControllerPreferredCandidates2Test(String url) { + private void addControllerPreferredCandidates2Test(String url, Long physicalClusterId) { ControllerPreferredCandidateDTO dto = new ControllerPreferredCandidateDTO(); - dto.setClusterId(getPhysicalClusterId()); - dto.setBrokerIdList(Arrays.asList(-1)); + dto.setClusterId(physicalClusterId); + dto.setBrokerIdList(Arrays.asList(ConfigConstant.INVALID_BROKER_ID)); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(dto, httpHeaders); @@ -305,11 +292,10 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.BROKER_NOT_EXIST.getCode()); } - private void addControllerPreferredCandidates3Test(String url) { + private void addControllerPreferredCandidates3Test(String url, Long physicalClusterId) { ControllerPreferredCandidateDTO dto = new ControllerPreferredCandidateDTO(); - dto.setClusterId(getPhysicalClusterId()); + dto.setClusterId(physicalClusterId); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(dto, httpHeaders); @@ -323,19 +309,20 @@ public class OpClusterControllerTest extends BaseTest { @Test(description = "测试删除Controller优先候选的Broker") public void deleteControllerPreferredCandidatesTest() { - String url = Constant.BASE_URL + "/api/v1/op/cluster-controller/preferred-candidates"; + String url = baseUrl + "/api/v1/op/cluster-controller/preferred-candidates"; + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); // 删除成功 - deleteControllerPreferredCandidates1Test(url); + deleteControllerPreferredCandidates1Test(url, physicalClusterId); // 参数错误 - deleteControllerPreferredCandidates2Test(url); + deleteControllerPreferredCandidates2Test(url, physicalClusterId); } - private void deleteControllerPreferredCandidates1Test(String url) { + private void deleteControllerPreferredCandidates1Test(String url, Long physicalClusterId) { ControllerPreferredCandidateDTO dto = new ControllerPreferredCandidateDTO(); - dto.setClusterId(getPhysicalClusterId()); - dto.setBrokerIdList(Arrays.asList(Constant.ALIVE_BROKER_ID)); + dto.setClusterId(physicalClusterId); + String aliveBrokerId = configMap.get(ConfigConstant.ALIVE_BROKER_ID); + dto.setBrokerIdList(Arrays.asList(Integer.parseInt(aliveBrokerId))); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(dto, httpHeaders); @@ -346,11 +333,10 @@ public class OpClusterControllerTest extends BaseTest { Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); } - private void deleteControllerPreferredCandidates2Test(String url) { + private void deleteControllerPreferredCandidates2Test(String url, Long physicalClusterId) { ControllerPreferredCandidateDTO dto = new ControllerPreferredCandidateDTO(); - dto.setClusterId(getPhysicalClusterId()); + dto.setClusterId(physicalClusterId); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); HttpEntity httpEntity = new HttpEntity<>(dto, httpHeaders); @@ -363,7 +349,7 @@ public class OpClusterControllerTest extends BaseTest { @Test(description = "测试删除物理集群") public void deleteClusterTest() { - String url = Constant.BASE_URL + "/api/v1/op/clusters"; + String url = baseUrl + "/api/v1/op/clusters"; // 集群不存在 deleteCluster2Test(url); } @@ -371,7 +357,6 @@ public class OpClusterControllerTest extends BaseTest { private void deleteCluster1Test(String url) { ClusterDTO clusterDTO = getClusterDTO(); url = url + "?clusterId=" + clusterDTO.getClusterId(); - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); ResponseEntity result = testRestTemplate.exchange( @@ -382,8 +367,7 @@ public class OpClusterControllerTest extends BaseTest { } private void deleteCluster2Test(String url) { - url = url + "?clusterId=" + Constant.INVALID_CLUSTER_ID_IN_MYSQL; - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); + url = url + "?clusterId=" + ConfigConstant.INVALID_CLUSTER_ID; HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpExpertControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpExpertControllerTest.java new file mode 100644 index 00000000..9362d687 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpExpertControllerTest.java @@ -0,0 +1,65 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.op; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class OpExpertControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试查询热点Topic") + public void getHotTopics() { + String url = baseUrl + "/api/v1/op/expert/regions/hot-topics"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试Topic流量异常诊断") + public void getAnomalyFlow() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/op/expert/topics/anomaly-flow?timestamp=" + now; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取过期Topic") + public void getExpiredTopic() { + String url = baseUrl + "/api/v1/op/expert/topics/expired"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic分区不足") + public void getInsufficientPartitions() { + String url = baseUrl + "/api/v1/op/expert/topics/insufficient-partitions"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpTopicControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpTopicControllerTest.java new file mode 100644 index 00000000..5926bceb --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/OpTopicControllerTest.java @@ -0,0 +1,276 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.op; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicExpansionDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicModificationDTO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.*; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author wyc + * @date 2022/1/20 + */ +public class OpTopicControllerTest extends BaseTest { + + /** + * Topic保存时间 + */ + private static final Long RETENTION_TIME = 1000L * 60 * 60 * 168; + + @BeforeClass + public void init() { + super.init(); + + // 成功创建Topic + String url = baseUrl + "/api/v1/op/topics"; + createCommonTopic(url); + } + + @AfterClass + public void afterTest() { + // 删除Topic成功 + String url = baseUrl + "/api/v1/op/topics"; + deleteTopics(url); + } + + private TopicCreationDTO getTopicCreationDTO() { + // 在broker1上创建1分区,1副本的createTopicTest + TopicCreationDTO creationDTO = new TopicCreationDTO(); + creationDTO.setAppId(configMap.get(ConfigConstant.APPID)); + // 在broker1上创建 + Integer brokerId = Integer.parseInt(configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + creationDTO.setBrokerIdList(Arrays.asList(brokerId)); + creationDTO.setPartitionNum(1); + creationDTO.setReplicaNum(1); + creationDTO.setRetentionTime(RETENTION_TIME); + creationDTO.setPeakBytesIn(10L * 1024 * 1024); + // 物理集群id + creationDTO.setClusterId(physicalClusterId); + creationDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + return creationDTO; + } + + private TopicDeletionDTO getTopicDeletionDTO() { + TopicDeletionDTO deletionDTO = new TopicDeletionDTO(); + deletionDTO.setClusterId(physicalClusterId); + deletionDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + deletionDTO.setUnForce(true); + return deletionDTO; + } + + @Test + public void createCommonTopicTest() { + String url = baseUrl + "/api/v1/op/topics"; + + // PARAM_ILLEGAL + createCommonTopic1Test(url); + // CLUSTER_NOT_EXIST + createCommonTopic2Test(url); + } + + private void createCommonTopic1Test(String url) { + TopicCreationDTO creationDTO = getTopicCreationDTO(); + creationDTO.setClusterId(null); + + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void createCommonTopic2Test(String url) { + TopicCreationDTO creationDTO = getTopicCreationDTO(); + creationDTO.setClusterId(-1L); + + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.CLUSTER_NOT_EXIST.getCode()); + } + + private void createCommonTopic(String url) { + // 创建Topic + + TopicCreationDTO creationDTO = CustomDataSource.getTopicCreationDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test + public void deleteTopicsTest() { + String url = baseUrl + "/api/v1/op/topics"; + // PARAM_ILLEGAL + deleteTopics1Test(url); + // OPERATION_FAILED + deleteTopics2Test(url); + } + + private void deleteTopics1Test(String url) { + ArrayList deletionDTOArrayList = new ArrayList<>(); + for (int i = 0; i < 11; i++) { + deletionDTOArrayList.add(getTopicDeletionDTO()); + } + + HttpEntity> httpEntity = new HttpEntity<>(deletionDTOArrayList, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void deleteTopics2Test(String url) { + TopicDeletionDTO topicDeletionDTO = getTopicDeletionDTO(); + topicDeletionDTO.setClusterId(ConfigConstant.INVALID_CLUSTER_ID); + HttpEntity> httpEntity = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.OPERATION_FAILED.getCode()); + } + + private void deleteTopics(String url) { + // 删除创建的topic + TopicDeletionDTO topicDeletionDTO = CustomDataSource.getTopicDeletionDTO(configMap); + HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); + Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result2.getBody()); + Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + + private TopicModificationDTO getTopicModificationDTO() { + TopicModificationDTO modificationDTO = new TopicModificationDTO(); + modificationDTO.setAppId(configMap.get(ConfigConstant.APPID)); + modificationDTO.setClusterId(physicalClusterId); + modificationDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + modificationDTO.setRetentionTime(RETENTION_TIME); + modificationDTO.setDescription(""); + return modificationDTO; + } + + @Test(description = "测试修改Topic") + public void modifyTopicTest() { + String url = baseUrl + "/api/v1/op/topics"; + + // paramIllegal + modifyTopic1Test(url); + // cluster not exist + modifyTopic2Test(url); + // topic未知 + modifyTopic3Test(url); + // 修改成功 + modifyTopic4Test(url); + } + + public void modifyTopic1Test(String url) { + // 修改topic + TopicModificationDTO topicModificationDTO = getTopicModificationDTO(); + topicModificationDTO.setTopicName(null); + HttpEntity httpEntity = new HttpEntity<>(topicModificationDTO, httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + public void modifyTopic2Test(String url) { + // 修改topic + TopicModificationDTO topicModificationDTO = getTopicModificationDTO(); + topicModificationDTO.setClusterId(ConfigConstant.INVALID_CLUSTER_ID); + HttpEntity httpEntity = new HttpEntity<>(topicModificationDTO, httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.CLUSTER_NOT_EXIST.getCode()); + } + + public void modifyTopic3Test(String url) { + // 修改topic + TopicModificationDTO topicModificationDTO = getTopicModificationDTO(); + topicModificationDTO.setTopicName(ConfigConstant.INVALID_STRING); + HttpEntity httpEntity = new HttpEntity<>(topicModificationDTO, httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.TOPIC_OPERATION_UNKNOWN_TOPIC_PARTITION.getCode()); + } + + public void modifyTopic4Test(String url) { + // 修改topic + TopicModificationDTO topicModificationDTO = getTopicModificationDTO(); + HttpEntity httpEntity = new HttpEntity<>(topicModificationDTO, httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private TopicExpansionDTO getTopicExpansionDTO() { + TopicExpansionDTO topicExpansionDTO= new TopicExpansionDTO(); + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + topicExpansionDTO.setClusterId(physicalClusterId); + topicExpansionDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + topicExpansionDTO.setPartitionNum(2); + Integer brokerId = Integer.parseInt(configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + topicExpansionDTO.setBrokerIdList(Arrays.asList(brokerId)); + return topicExpansionDTO; + } + + @Test(description = "测试Topic扩分区") + public void expandTopicPartitionTest() { + String url = baseUrl + "/api/v1/op/topics/expand-partitions"; + + // operation failed + expandTopicPartition1Test(url); + // success + expandTopicPartition2Test(url); + } + + private void expandTopicPartition1Test(String url) { + // topic扩分区 + TopicExpansionDTO topicExpansionDTO = getTopicExpansionDTO(); + topicExpansionDTO.setClusterId(null); + HttpEntity> httpEntity = new HttpEntity<>(Arrays.asList(topicExpansionDTO), httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.OPERATION_FAILED.getCode()); + } + + private void expandTopicPartition2Test(String url) { + // topic扩分区 + TopicExpansionDTO topicExpansionDTO = getTopicExpansionDTO(); + HttpEntity> httpEntity = new HttpEntity<>(Arrays.asList(topicExpansionDTO), httpHeaders); + + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/opTopicControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/opTopicControllerTest.java deleted file mode 100644 index bb615a69..00000000 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/op/opTopicControllerTest.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.xiaojukeji.kafka.manager.web.api.versionone.op; - -import com.xiaojukeji.kafka.manager.common.entity.Result; -import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; -import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; -import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; -import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicModificationDTO; -import com.xiaojukeji.kafka.manager.web.config.BaseTest; -import com.xiaojukeji.kafka.manager.web.config.Constant; -import com.xiaojukeji.kafka.manager.web.config.HttpUtils; -import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.http.*; -import org.testng.Assert; -import org.testng.annotations.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * @author wyc - * @date 2022/1/20 - */ -public class opTopicControllerTest extends BaseTest { - private final TestRestTemplate testRestTemplate = new TestRestTemplate(); - - - private TopicCreationDTO getTopicCreationDTO() { - // 在broker1上创建1分区,1副本的createTopicTest - TopicCreationDTO creationDTO = new TopicCreationDTO(); - creationDTO.setAppId(Constant.APPID_IN_MYSQL); - // 在broker1上创建 - creationDTO.setBrokerIdList(Arrays.asList(1)); - creationDTO.setPartitionNum(1); - creationDTO.setReplicaNum(1); - creationDTO.setRetentionTime(1000L * 60 * 60 * 168); - creationDTO.setPeakBytesIn(10L * 1024 * 1024); - // 物理集群id - creationDTO.setClusterId(Constant.PHYSICAL_CLUSTER_ID_IN_MYSQL); - creationDTO.setTopicName("createTopicTest"); - return creationDTO; - } - - private TopicDeletionDTO getTopicDeletionDTO() { - TopicDeletionDTO deletionDTO = new TopicDeletionDTO(); - deletionDTO.setClusterId(1L); - deletionDTO.setTopicName("createTopicTest"); - deletionDTO.setUnForce(true); - return deletionDTO; - } - - @Test - public void createCommonTopicTest() { - String url = Constant.BASE_URL + "/api/v1/op/topics"; - - // PARAM_ILLEGAL - createCommonTopic1Test(url); - // CLUSTER_NOT_EXIST - createCommonTopic2Test(url); - // SUCCESS - createCommonTopic3Test(url); - } - - private void createCommonTopic1Test(String url) { - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - TopicCreationDTO creationDTO = getTopicCreationDTO(); - creationDTO.setClusterId(null); - - HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); - } - - private void createCommonTopic2Test(String url) { - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - TopicCreationDTO creationDTO = getTopicCreationDTO(); - creationDTO.setClusterId(-1L); - - HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.CLUSTER_NOT_EXIST.getCode()); - } - - private void createCommonTopic3Test(String url) { - // 创建Topic - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - - TopicCreationDTO creationDTO = getTopicCreationDTO(); - HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); - - // 删除创建的topic - TopicDeletionDTO topicDeletionDTO = getTopicDeletionDTO(); - HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); - ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); - Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result2.getBody()); - Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); - } - - @Test - public void deleteTopicsTest() { - String url = Constant.BASE_URL + "/api/v1/op/topics"; - // PARAM_ILLEGAL - deleteTopics1Test(url); - // OPERATION_FAILED - deleteTopics2Test(url); - // SUCCESS - deleteTopics3Test(url); - } - - private void deleteTopics1Test(String url) { - ArrayList deletionDTOArrayList = new ArrayList<>(); - for (int i = 0; i < 11; i++) { - deletionDTOArrayList.add(getTopicDeletionDTO()); - } - - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - HttpEntity> httpEntity = new HttpEntity<>(deletionDTOArrayList, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); - } - - private void deleteTopics2Test(String url) { - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - TopicDeletionDTO topicDeletionDTO = getTopicDeletionDTO(); - topicDeletionDTO.setClusterId(-1L); - HttpEntity> httpEntity = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.OPERATION_FAILED.getCode()); - } - - private void deleteTopics3Test(String url) { - // 创建Topic - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - - TopicCreationDTO creationDTO = getTopicCreationDTO(); - HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); - - // 删除创建的topic - TopicDeletionDTO topicDeletionDTO = getTopicDeletionDTO(); - HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); - ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); - Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result2.getBody()); - Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); - } - - - private TopicModificationDTO getTopicModificationDTO() { - TopicModificationDTO modificationDTO = new TopicModificationDTO(); - modificationDTO.setAppId(Constant.APPID_IN_MYSQL); - modificationDTO.setClusterId(Constant.PHYSICAL_CLUSTER_ID_IN_MYSQL); - modificationDTO.setTopicName("createTopicName"); - return modificationDTO; - } - - public void modifyTopicTest() { - String url = Constant.BASE_URL + "/api/v1/op/topics"; - - } - - public void modifyTopic1Test(String url) { - // 创建Topic - HttpHeaders httpHeaders = HttpUtils.getHttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - - TopicCreationDTO creationDTO = getTopicCreationDTO(); - HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); - ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); - Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); - Assert.assertNotNull(result.getBody()); - Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); - - // 修改topic - TopicModificationDTO topicModificationDTO = getTopicModificationDTO(); - HttpEntity httpEntity2 = new HttpEntity<>(topicModificationDTO, httpHeaders); - } - -} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdConfigControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdConfigControllerTest.java new file mode 100644 index 00000000..5e15c174 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdConfigControllerTest.java @@ -0,0 +1,129 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.rd; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.config.ConfigDTO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class RdConfigControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + + // 创建config + createConfigSuccess(); + } + + @AfterClass + public void destroy() { + // 删除config + deleteConfig(); + } + + @Test(description = "测试新增配置") + public void createConfigTest() { + // 参数错误 + createConfig1(); + } + + private void createConfig1() { + String url = baseUrl + "/api/v1/rd/configs"; + ConfigDTO configDTO = CustomDataSource.getConfigDTO(); + configDTO.setConfigKey(null); + HttpEntity httpEntity = new HttpEntity<>(configDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void createConfigSuccess() { + String url = baseUrl + "/api/v1/rd/configs"; + ConfigDTO configDTO = CustomDataSource.getConfigDTO(); + HttpEntity httpEntity = new HttpEntity<>(configDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "删除配置") + public void deleteConfigTest() { + + } + + private void deleteConfig() { + String url = baseUrl + "/api/v1/rd/configs?config-key=" + ConfigConstant.CONFIG_KEY; + HttpEntity httpEntity = new HttpEntity<>(null, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试修改配置") + public void modifyConfigTest() { + // 参数错误 + modifyConfig1(); + // 修改成功 + modifyConfig2(); + } + + private void modifyConfig1() { + String url = baseUrl + "/api/v1/rd/configs"; + ConfigDTO configDTO = CustomDataSource.getConfigDTO(); + configDTO.setConfigKey(null); + HttpEntity httpEntity = new HttpEntity<>(configDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void modifyConfig2() { + String url = baseUrl + "/api/v1/rd/configs"; + ConfigDTO configDTO = CustomDataSource.getConfigDTO(); + HttpEntity httpEntity = new HttpEntity<>(configDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取配置列表") + public void getConfigList() { + String url = baseUrl + "/api/v1/rd/configs"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获Kafka的角色列表") + public void getKafkaRoles() { + String url = baseUrl + "/api/v1/rd/configs/kafka-roles"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdLogicalClusterControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdLogicalClusterControllerTest.java new file mode 100644 index 00000000..0a71abe4 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdLogicalClusterControllerTest.java @@ -0,0 +1,207 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.rd; + +import com.alibaba.fastjson.JSON; +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.rd.LogicalClusterDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.rd.RegionDTO; +import com.xiaojukeji.kafka.manager.common.entity.vo.rd.RegionVO; +import com.xiaojukeji.kafka.manager.common.entity.vo.rd.cluster.LogicalClusterVO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author xuguang + * @Date 2022/2/17 + */ +public class RdLogicalClusterControllerTest extends BaseTest { + + private Long regionId; + + private Long logicalClusterId; + + @BeforeClass + public void init() { + super.init(); + + // 创建region + createRegionSuccess(); + // 获取regionId + regionId = getRegionId(); + // 创建逻辑集群 + createLogicalClusterSuccess(); + logicalClusterId = getLogicalClusterId(); + } + + @AfterClass + public void destroy() { + deleteLogicalClusterSuccess(); + deleteRegionSuccess(); + } + + @Test(description = "测试增加逻辑集群") + public void createLogicalClusterTest() { + String url = baseUrl + "/api/v1/rd/logical-clusters"; + // 参数错误 + createLogicalCluster1(url); + } + + private void createLogicalCluster1(String url) { + LogicalClusterDTO logicalClusterDTO = CustomDataSource.getLogicalClusterDTO(configMap); + logicalClusterDTO.setRegionIdList(null); + HttpEntity httpEntity = new HttpEntity<>(logicalClusterDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void createLogicalClusterSuccess() { + String url = baseUrl + "/api/v1/rd/logical-clusters"; + LogicalClusterDTO logicalClusterDTO = CustomDataSource.getLogicalClusterDTO(configMap); + logicalClusterDTO.setRegionIdList(Arrays.asList(regionId)); + HttpEntity httpEntity = new HttpEntity<>(logicalClusterDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void createRegionSuccess() { + String url = baseUrl + "/api/v1/rd/regions"; + RegionDTO regionDTO = CustomDataSource.getRegionDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(regionDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private Long getRegionId() { + String url = baseUrl + "/api/v1/rd/{clusterId}/regions"; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + String s = JSON.toJSONString(result.getBody().getData()); + List regions = JSON.parseArray(s, RegionVO.class); + for (RegionVO region : regions) { + if (region.getName().equals(configMap.get(ConfigConstant.REGION_NAME))) { + return region.getId(); + } + } + return null; + } + + private Long getLogicalClusterId() { + String url = baseUrl + "/api/v1/rd/{physicalClusterId}/logical-clusters"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + String s = JSON.toJSONString(result.getBody().getData()); + List logicalClusters = JSON.parseArray(s, LogicalClusterVO.class); + for (LogicalClusterVO logicalCLuster : logicalClusters) { + if (logicalCLuster.getLogicalClusterName().equals(configMap.get(ConfigConstant.LOGICAL_CLUSTER_NAME))) { + return logicalCLuster.getLogicalClusterId(); + } + } + return null; + } + + @Test(description = "测试修改逻辑集群") + public void modifyLogicalClusterTest() { + // 参数失败 + modifyLogicalCluster1(); + // 修改成功 + modifyLogicalCluster2(); + } + + private void modifyLogicalCluster1() { + String url = baseUrl + "/api/v1/rd/logical-clusters"; + LogicalClusterDTO logicalClusterDTO = CustomDataSource.getLogicalClusterDTO(configMap); + logicalClusterDTO.setRegionIdList(Arrays.asList(regionId)); + logicalClusterDTO.setId(null); + HttpEntity httpEntity = new HttpEntity<>(logicalClusterDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void modifyLogicalCluster2() { + String url = baseUrl + "/api/v1/rd/logical-clusters"; + LogicalClusterDTO logicalClusterDTO = CustomDataSource.getLogicalClusterDTO(configMap); + logicalClusterDTO.setRegionIdList(Arrays.asList(regionId)); + logicalClusterDTO.setId(getLogicalClusterId()); + HttpEntity httpEntity = new HttpEntity<>(logicalClusterDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试删除逻辑集群") + public void deleteLogicalClusterTest() { + + } + + private void deleteLogicalClusterSuccess() { + String url = baseUrl + "/api/v1/rd/logical-clusters?id=" + logicalClusterId; + HttpEntity httpEntity = + new HttpEntity<>(null, httpHeaders); + ResponseEntity result = testRestTemplate.exchange( + url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void deleteRegionSuccess() { + Long regionId = getRegionId(); + String url = baseUrl + "/api/v1/rd/regions?id=" + regionId; + HttpEntity httpEntity = + new HttpEntity<>(null, httpHeaders); + ResponseEntity result = testRestTemplate.exchange( + url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取逻辑集群列表") + public void getLogicalClustersTest() { + String url = baseUrl + "/api/v1/rd/{physicalClusterId}/logical-clusters"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试由逻辑集群Id获取逻辑集群") + public void getLogicalClusterTest() { + String url = baseUrl + "/api/v1/rd/logical-clusters?id=" + getLogicalClusterId(); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdRegionControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdRegionControllerTest.java new file mode 100644 index 00000000..e694a5b9 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/rd/RdRegionControllerTest.java @@ -0,0 +1,145 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.rd; + +import com.alibaba.fastjson.JSON; +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.rd.RegionDTO; +import com.xiaojukeji.kafka.manager.common.entity.vo.rd.RegionVO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * + */ +public class RdRegionControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + + // 创建region + createRegionSuccess(); + } + + @AfterClass + public void deleteRegion() { + // 删除region + deleteRegionSuccess(); + } + + private Long getRegionId() { + String url = baseUrl + "/api/v1/rd/{clusterId}/regions"; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + String s = JSON.toJSONString(result.getBody().getData()); + List regions = JSON.parseArray(s, RegionVO.class); + for (RegionVO region : regions) { + if (region.getName().equals(configMap.get(ConfigConstant.REGION_NAME))) { + return region.getId(); + } + } + return null; + } + + @Test(description = "测试创建region") + public void createRegion() { + String url = baseUrl + "/api/v1/op/topics"; + // 参数错误 + createRegion1Test(url); + } + + private void createRegion1Test(String url) { + RegionDTO regionDTO = CustomDataSource.getRegionDTO(configMap); + regionDTO.setClusterId(null); + HttpEntity httpEntity = new HttpEntity<>(regionDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void createRegionSuccess() { + String url = baseUrl + "/api/v1/rd/regions"; + RegionDTO regionDTO = CustomDataSource.getRegionDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(regionDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试删除region") + public void deleteRegionTest() { + + } + + private void deleteRegionSuccess() { + Long regionId = getRegionId(); + String url = baseUrl + "/api/v1/rd/regions?id=" + regionId; + HttpEntity httpEntity = + new HttpEntity<>(null, httpHeaders); + ResponseEntity result = testRestTemplate.exchange( + url, HttpMethod.DELETE, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + + } + + @Test(description = "测试修改region") + public void modifyRegionTest() { + String url = baseUrl + "/api/v1/rd/regions"; + // 参数错误 + modifyRegion1(url); + // 修改成功 + modifyRegion2(url); + } + + private void modifyRegion1(String url) { + RegionDTO regionDTO = CustomDataSource.getRegionDTO(configMap); + regionDTO.setId(null); + HttpEntity httpEntity = new HttpEntity<>(regionDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.PARAM_ILLEGAL.getCode()); + } + + private void modifyRegion2(String url) { + RegionDTO regionDTO = CustomDataSource.getRegionDTO(configMap); + regionDTO.setId(getRegionId()); + HttpEntity httpEntity = new HttpEntity<>(regionDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.PUT, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "获取region列表") + public void getRegionListTest() { + + String url = baseUrl + "/api/v1/rd/{clusterId}/regions"; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartAppControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartAppControllerTest.java new file mode 100644 index 00000000..96d9b10d --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartAppControllerTest.java @@ -0,0 +1,39 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.thirdpart; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * + */ +public class ThirdPartAppControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试查询负责的应用") + public void getPrincipalAppsTest() { + String url = baseUrl + "/api/v1/third-part/principal-apps/{principal}/basic-info?system-code=" + ConfigConstant.KAFKA_MANAGER; + Map urlVariables = new HashMap<>(); + urlVariables.put("principal", "admin"); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartBrokerControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartBrokerControllerTest.java new file mode 100644 index 00000000..9c57df14 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartBrokerControllerTest.java @@ -0,0 +1,50 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.thirdpart; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * + */ +public class ThirdPartBrokerControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试获取BrokerRegion信息") + public void getBrokerRegionsTest() { + String url = baseUrl + "/api/v1/third-part/op/broker-regions"; + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Broker信息概览") + public void getBrokerOverviewTest() { + String url = baseUrl + "/api/v1/third-part/op/{clusterId}/brokers/{brokerId}/overview"; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("brokerId", configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartClusterControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartClusterControllerTest.java new file mode 100644 index 00000000..86fa7cbd --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartClusterControllerTest.java @@ -0,0 +1,39 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.thirdpart; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * + */ +public class ThirdPartClusterControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + } + + @Test(description = "测试Broker信息概览") + public void getBrokerRegionsTest() { + String url = baseUrl + "/api/v1/third-part/{clusterId}/broker-stabled?hostname=" + ConfigConstant.INVALID_STRING; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.BROKER_NOT_EXIST.getCode()); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartTopicControllerTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartTopicControllerTest.java new file mode 100644 index 00000000..e06dde82 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/api/versionone/thirdpart/ThirdPartTopicControllerTest.java @@ -0,0 +1,147 @@ +package com.xiaojukeji.kafka.manager.web.api.versionone.thirdpart; + +import com.xiaojukeji.kafka.manager.common.entity.Result; +import com.xiaojukeji.kafka.manager.common.entity.ResultStatus; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; +import com.xiaojukeji.kafka.manager.web.config.BaseTest; +import com.xiaojukeji.kafka.manager.web.config.ConfigConstant; +import com.xiaojukeji.kafka.manager.web.config.CustomDataSource; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author xuguang + * @Date 2022/2/18 + */ +public class ThirdPartTopicControllerTest extends BaseTest { + + @BeforeClass + public void init() { + super.init(); + + // 成功创建Topic + String url = baseUrl + "/api/v1/op/topics"; + createCommonTopic3Test(url); + } + + + @AfterClass + public void afterTest() { + // 删除Topic成功 + String url = baseUrl + "/api/v1/op/topics"; + deleteTopics3Test(url); + } + + private void createCommonTopic3Test(String url) { + // 创建Topic + + TopicCreationDTO creationDTO = CustomDataSource.getTopicCreationDTO(configMap); + HttpEntity httpEntity = new HttpEntity<>(creationDTO, httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.POST, httpEntity, Result.class); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + private void deleteTopics3Test(String url) { + // 删除创建的topic + TopicDeletionDTO topicDeletionDTO = CustomDataSource.getTopicDeletionDTO(configMap); + HttpEntity> httpEntity2 = new HttpEntity<>(Arrays.asList(topicDeletionDTO), httpHeaders); + ResponseEntity result2 = testRestTemplate.exchange(url, HttpMethod.DELETE, httpEntity2, Result.class); + Assert.assertEquals(result2.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result2.getBody()); + Assert.assertEquals(result2.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic元信息") + public void getTopicMetadataTest() { + String url = baseUrl + "/api/v1/third-part/clusters/{clusterId}/topics/{topicName}/metadata"; + Map urlVariables = new HashMap<>(); + urlVariables.put("clusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试获取Topic应用信息") + public void getTopicAppsTest() { + String url = baseUrl + "/api/v1/third-part/{physicalClusterId}/topics/{topicName}/apps"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试查询Topic的消费组列表") + public void getTopicConsumerGroupsTest() { + String url = baseUrl + "/api/v1/third-part/{physicalClusterId}/topics/{topicName}/consumer-groups"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试查询Topic实时流量信息") + public void getTopicMetricsTest() { + String url = baseUrl + "/api/v1/third-part/{physicalClusterId}/topics/{topicName}/metrics"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试查询Topic是否有流量") + public void getTopicOffsetChangedTest() { + long now = System.currentTimeMillis(); + String url = baseUrl + "/api/v1/third-part/{physicalClusterId}/topics/{topicName}/offset-changed?latest-time=" + now; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + + @Test(description = "测试查询Topic实时请求耗时信息") + public void getTopicRequestTimeTest() { + String url = baseUrl + "/api/v1/third-part/{physicalClusterId}/topics/{topicName}/request-time"; + Map urlVariables = new HashMap<>(); + urlVariables.put("physicalClusterId", physicalClusterId); + urlVariables.put("topicName", configMap.get(ConfigConstant.TOPIC_NAME)); + HttpEntity httpEntity = new HttpEntity<>("", httpHeaders); + ResponseEntity result = testRestTemplate.exchange(url, HttpMethod.GET, httpEntity, Result.class, urlVariables); + Assert.assertEquals(result.getStatusCodeValue(), HttpStatus.OK.value()); + Assert.assertNotNull(result.getBody()); + Assert.assertEquals(result.getBody().getCode(), ResultStatus.SUCCESS.getCode()); + } + +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/BaseTest.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/BaseTest.java index 703a5b9c..d240d2e5 100644 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/BaseTest.java +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/BaseTest.java @@ -1,7 +1,40 @@ package com.xiaojukeji.kafka.manager.web.config; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; +import java.io.IOException; +import java.util.Map; + public class BaseTest extends AbstractTestNGSpringContextTests { + protected final TestRestTemplate testRestTemplate = new TestRestTemplate(); + + protected Map configMap; + + protected HttpHeaders httpHeaders; + + protected String baseUrl = "http://localhost:8080"; + + // 默认物理集群Id为1 + protected Long physicalClusterId = 1L; + + public void init() { + // 加载本地配置 + try { + configMap = CommonUtils.readSettings(); + + httpHeaders = CommonUtils.getHttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + + baseUrl = configMap.get(ConfigConstant.BASE_URL); + physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + } catch (IOException e) { + e.printStackTrace(); + } + + } + } diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CommonUtils.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CommonUtils.java new file mode 100644 index 00000000..4c08f3eb --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CommonUtils.java @@ -0,0 +1,49 @@ +package com.xiaojukeji.kafka.manager.web.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpHeaders; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +/** + * @author xuguang + * @Date 2022/1/11 + */ +public class CommonUtils { + + private static final Logger LOGGER = LoggerFactory.getLogger(CommonUtils.class.getName()); + + private static String settingsFile = "integrationTest-settings.properties"; + + public static HttpHeaders getHttpHeaders() { + // 需要在管控平台上配置,教程见docs -> user_guide -> call_api_bypass_login + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add(ConfigConstant.TRICK_LOGIN_SWITCH, ConfigConstant.OPEN_TRICK_LOGIN); + httpHeaders.add(ConfigConstant.TRICK_LOGIN_USER, ConfigConstant.ADMIN_USER); + return httpHeaders; + } + + /** + * 读取本地配置 + * + * @return + * @throws IOException + */ + public static Map readSettings() throws IOException { + InputStream is = CommonUtils.class.getClassLoader().getResourceAsStream(settingsFile); + Properties prop = new Properties(); + try { + prop.load(is); + } catch (IOException e) { + LOGGER.error("CommonUtil error!", "load " + settingsFile + " error, {}", e.getMessage()); + } finally { + is.close(); + } + return new HashMap((Map) prop); + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/ConfigConstant.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/ConfigConstant.java new file mode 100644 index 00000000..daef277a --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/ConfigConstant.java @@ -0,0 +1,87 @@ +package com.xiaojukeji.kafka.manager.web.config; + +/** + * 集成测试配置变量 + * @author xuguang + * @Date 2022/1/11 + */ +public interface ConfigConstant { + /** + * 本地配置属性 + */ + String BASE_URL = "base-url"; + + String CLUSTER_NAME = "cluster.name"; + + String ZOOKEEPER_ADDRESS = "cluster.zookeeper.address"; + + String BOOTSTRAP_ADDRESS = "cluster.bootstrap.address"; + + String ALIVE_BROKER_ID = "alive-brokerId"; + + String PHYSICAL_CLUSTER_ID = "physicalCluster.id.in.mysql"; + + String LOGICAL_CLUSTER_ID = "logicalCluster.id.in.mysql"; + + String LOGICAL_CLUSTER_NAME = "logicalCluster.name"; + + String TOPIC_NAME = "topic.name"; + + String APPID = "appId"; + + String REGION_NAME = "region.name"; + + String GATEWAY_TYPE = "gateway.config.type"; + + String GATEWAY_NAME = "gateway.config.name"; + + String GATEWAY_VALUE = "gateway.config.value"; + + String GATEWAY_DESCRIPTION = "gateway.config.description"; + + + /** + * 登陆参数 + */ + String TRICK_LOGIN_SWITCH = "Trick-Login-Switch"; + + String TRICK_LOGIN_USER = "Trick-Login-User"; + + String OPEN_TRICK_LOGIN = "on"; + + /** + * 管理员用户 + */ + String ADMIN_USER = "admin"; + + /** + * 无效字符串 + */ + String INVALID_STRING = "%_"; + + /** + * 无效集群id + */ + Long INVALID_CLUSTER_ID = Long.MAX_VALUE; + + /** + * 无效broker id + */ + Integer INVALID_BROKER_ID = -1; + + /** + * 数据中心 + */ + String IDC = "cn"; + + String CONFIG_KEY = "key"; + + String CONFIG_VALUE = "value"; + + String KAFKA_MANAGER = "kafka-manager"; + + /** + * 操作权限 + */ + Integer ACCESS = 100; +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/Constant.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/Constant.java deleted file mode 100644 index 01940681..00000000 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/Constant.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.xiaojukeji.kafka.manager.web.config; - -/** - * @author xuguang - * @Date 2022/1/11 - */ -public class Constant { - public static final String BASE_URL = "http://localhost:8080"; - - public static final String TRICK_LOGIN_SWITCH = "Trick-Login-Switch"; - - public static final String TRICK_LOGIN_USER = "Trick-Login-User"; - - /** - * on表示开启trick_login - */ - public static final String ON = "on"; - - /** - * 数据库中实际存在的user - */ - public static final String USER_ADMIN = "admin"; - - /** - * 数据库中实际存在的APPID - */ - public static final String APPID_IN_MYSQL = "dkm_admin"; - - /** - * 无效字符串 - */ - public static final String INVALID = "xxxx"; - - public static final String INVALID_APPID = INVALID; - - /** - * 数据库中实际存在的物理集群Id - */ - public static final Long PHYSICAL_CLUSTER_ID_IN_MYSQL = 1L; - - /** - * 数据库中实际存在的逻辑集群Id - */ - public static final Long LOGICAL_CLUSTER_ID_IN_MYSQL = 7L; - - public static final Integer ALIVE_BROKER_ID = 3; - - /** - * 无效的集群Id - */ - public static final Long INVALID_CLUSTER_ID_IN_MYSQL = Long.MAX_VALUE; - - public static final Long INVALID_ID = -1L; - - /** - * 数据库中实际存在的TopicName - */ - public static final String TOPIC_NAME_IN_MYSQL = "moduleTest"; - - public static final String INVALID_TOPIC_NAME = INVALID; - - /** - * 操作权限 - */ - public static final Integer ACCESS = 100; - - public static final String ZK_ADDRESS = "10.190.46.198:2181,10.190.14.237:2181,10.190.50.65:2181/xg"; - - public static final String BOOTSTRAP_SERVERS = "10.190.46.198:9093,10.190.14.237:9093,10.190.50.65:9093"; - - public static final String CLUSTER_NAME = "clusterTest"; - - public static final String IDC = "China"; -} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CustomDataSource.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CustomDataSource.java new file mode 100644 index 00000000..63b4ad08 --- /dev/null +++ b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/CustomDataSource.java @@ -0,0 +1,86 @@ +package com.xiaojukeji.kafka.manager.web.config; + +import com.xiaojukeji.kafka.manager.bpm.common.entry.apply.gateway.OrderExtensionAddGatewayConfigDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.config.ConfigDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicCreationDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.op.topic.TopicDeletionDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.rd.LogicalClusterDTO; +import com.xiaojukeji.kafka.manager.common.entity.dto.rd.RegionDTO; + +import java.util.Arrays; +import java.util.Map; + +/** + * @author xuguang + * @Date 2022/2/17 + */ +public class CustomDataSource { + + public static RegionDTO getRegionDTO(Map configMap) { + RegionDTO regionDTO = new RegionDTO(); + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + regionDTO.setClusterId(physicalClusterId); + Integer brokerId = Integer.parseInt(configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + regionDTO.setBrokerIdList(Arrays.asList(brokerId)); + regionDTO.setDescription(""); + regionDTO.setName(configMap.get(ConfigConstant.REGION_NAME)); + regionDTO.setStatus(0); + return regionDTO; + } + + public static LogicalClusterDTO getLogicalClusterDTO(Map configMap) { + LogicalClusterDTO logicalClusterDTO = new LogicalClusterDTO(); + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + logicalClusterDTO.setClusterId(physicalClusterId); + logicalClusterDTO.setName(configMap.get(ConfigConstant.LOGICAL_CLUSTER_NAME)); + logicalClusterDTO.setAppId(configMap.get(ConfigConstant.APPID)); + logicalClusterDTO.setIdentification(configMap.get(ConfigConstant.LOGICAL_CLUSTER_NAME)); + logicalClusterDTO.setDescription(""); + logicalClusterDTO.setMode(0); + return logicalClusterDTO; + } + + public static ConfigDTO getConfigDTO() { + ConfigDTO configDTO = new ConfigDTO(); + configDTO.setConfigKey(ConfigConstant.CONFIG_KEY); + configDTO.setConfigValue(ConfigConstant.CONFIG_VALUE); + configDTO.setConfigDescription("测试config"); + return configDTO; + } + + public static TopicDeletionDTO getTopicDeletionDTO(Map configMap) { + TopicDeletionDTO deletionDTO = new TopicDeletionDTO(); + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + deletionDTO.setClusterId(physicalClusterId); + deletionDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + deletionDTO.setUnForce(true); + return deletionDTO; + } + + public static TopicCreationDTO getTopicCreationDTO(Map configMap) { + // 在broker1上创建1分区,1副本的createTopicTest + TopicCreationDTO creationDTO = new TopicCreationDTO(); + creationDTO.setAppId(configMap.get(ConfigConstant.APPID)); + // 在broker1上创建 + Integer brokerId = Integer.parseInt(configMap.get(ConfigConstant.ALIVE_BROKER_ID)); + creationDTO.setBrokerIdList(Arrays.asList(brokerId)); + creationDTO.setPartitionNum(1); + creationDTO.setReplicaNum(1); + creationDTO.setRetentionTime(1000L * 60 * 60 * 168); + creationDTO.setPeakBytesIn(10L * 1024 * 1024); + // 物理集群id + Long physicalClusterId = Long.parseLong(configMap.get(ConfigConstant.PHYSICAL_CLUSTER_ID)); + creationDTO.setClusterId(physicalClusterId); + creationDTO.setTopicName(configMap.get(ConfigConstant.TOPIC_NAME)); + return creationDTO; + } + + public static OrderExtensionAddGatewayConfigDTO getOrderExtensionAddGatewayConfigDTO(Map configMap) { + OrderExtensionAddGatewayConfigDTO orderExtensionAddGatewayConfigDTO = new OrderExtensionAddGatewayConfigDTO(); + orderExtensionAddGatewayConfigDTO.setName(configMap.get(ConfigConstant.GATEWAY_NAME)); + orderExtensionAddGatewayConfigDTO.setType(configMap.get(ConfigConstant.GATEWAY_TYPE)); + orderExtensionAddGatewayConfigDTO.setValue(configMap.get(ConfigConstant.GATEWAY_VALUE)); + orderExtensionAddGatewayConfigDTO.setValue(configMap.get(ConfigConstant.GATEWAY_DESCRIPTION)); + return orderExtensionAddGatewayConfigDTO; + } +} diff --git a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/HttpUtils.java b/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/HttpUtils.java deleted file mode 100644 index 826a784e..00000000 --- a/kafka-manager-web/src/test/java/com/xiaojukeji/kafka/manager/web/config/HttpUtils.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.xiaojukeji.kafka.manager.web.config; - -import org.springframework.http.HttpHeaders; - -/** - * @author xuguang - * @Date 2022/1/11 - */ -public class HttpUtils { - - public static HttpHeaders getHttpHeaders() { - // 需要在管控平台上配置,教程见docs -> user_guide -> call_api_bypass_login - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add(Constant.TRICK_LOGIN_SWITCH, Constant.ON); - httpHeaders.add(Constant.TRICK_LOGIN_USER, Constant.USER_ADMIN); - return httpHeaders; - } -} diff --git a/kafka-manager-web/src/test/resources/integrationTest-settings.properties b/kafka-manager-web/src/test/resources/integrationTest-settings.properties new file mode 100644 index 00000000..09998986 --- /dev/null +++ b/kafka-manager-web/src/test/resources/integrationTest-settings.properties @@ -0,0 +1,33 @@ +# 接口基本地址 +base-url = http://localhost:8080 +# appId +appId = dkm_admin +# 存活的brokerId +alive-brokerId = 1 + +# 集群名称 +cluster.name = integrationTestCluster +# 集群地址 +cluster.bootstrap.address = 10.190.46.198:9093,10.190.14.237:9093,10.190.50.65:9093 +# zk地址 +cluster.zookeeper.address = 10.190.46.198:2181,10.190.14.237:2181,10.190.50.65:2181/xg +# 物理集群在数据库中的Id +physicalCluster.id.in.mysql = 1 +# 逻辑集群在数据库中的Id(新创建的逻辑集群并不能立即加载到缓存中,所以需要用已创建好的) +logicalCluster.id.in.mysql = 7 +logicalCluster.name = integrationTestLogicalCluster + +# 集成测试用的Topic +topic.name = integrationTestTopic +# 集成测试用的region +region.name = integrationTestRegion + +# gateway相关配置 +gateway.config.type = SD_CLUSTER_ID +gateway.config.name = integrationTest_SD +gateway.config.value = 127.0.0.1 +gateway.config.description = integrationTest + + + +