mirror of
https://github.com/didi/KnowStreaming.git
synced 2025-12-24 11:52:08 +08:00
monitor、openapi、account模块下的单元测试
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
package com.xiaojukeji.kafka.manager.service.service;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.config.expert.RegionTopicHotConfig;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.config.expert.TopicExpiredConfig;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.config.expert.TopicInsufficientPartitionConfig;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.expert.TopicInsufficientPartition;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.expert.TopicRegionHot;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.TopicExpiredDO;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.TopicMetricsDO;
|
||||
import com.xiaojukeji.kafka.manager.dao.TopicMetricsDao;
|
||||
import com.xiaojukeji.kafka.manager.service.config.BaseTest;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2021/12/27
|
||||
*/
|
||||
public class ExpertServiceTest extends BaseTest {
|
||||
private final static Long REAL_CLUSTER_ID_IN_MYSQL = 1L;
|
||||
|
||||
private final static String REAL_TOPIC_IN_ZK = "topic_a";
|
||||
|
||||
private final static String REAL_CLUSTER_NAME_IN_ZK = "cluster1";
|
||||
|
||||
private final static Set<Integer> REAL_BROKER_ID_SET = new HashSet<>();
|
||||
|
||||
private String metrics = "{\"TotalFetchRequestsPerSecFiveMinuteRate\":4.132236103122026,\"BytesRejectedPerSecFiveMinuteRate\":0.0,\"TotalFetchRequestsPerSecFifteenMinuteRate\":1.5799208507558833,\"ProduceTotalTimeMs98thPercentile\":0.0,\"MessagesInPerSecMeanRate\":0.0,\"ProduceTotalTimeMs75thPercentile\":0.0,\"ProduceTotalTimeMs99thPercentile\":0.0,\"TotalProduceRequestsPerSecOneMinuteRate\":0.0,\"FailedProduceRequestsPerSecFifteenMinuteRate\":0.0,\"BytesInPerSecMeanRate\":0.0,\"TotalProduceRequestsPerSecFiveMinuteRate\":0.0,\"FetchConsumerTotalTimeMs999thPercentile\":0.0,\"FetchConsumerTotalTimeMs98thPercentile\":0.0,\"FetchConsumerTotalTimeMsMean\":0.0,\"FetchConsumerTotalTimeMs99thPercentile\":0.0,\"FailedFetchRequestsPerSecFifteenMinuteRate\":0.0,\"MessagesInPerSecFiveMinuteRate\":0.0,\"RequestHandlerAvgIdlePercentOneMinuteRate\":0.999221766772746,\"ProduceTotalTimeMsMean\":0.0,\"BytesInPerSecFiveMinuteRate\":0.0,\"FailedProduceRequestsPerSecMeanRate\":0.0,\"FailedFetchRequestsPerSecMeanRate\":0.0,\"FailedProduceRequestsPerSecFiveMinuteRate\":0.0,\"BytesOutPerSecFifteenMinuteRate\":0.0,\"BytesInPerSecOneMinuteRate\":100.0,\"BytesOutPerSecFiveMinuteRate\":0.0,\"HealthScore\":90,\"FailedFetchRequestsPerSecOneMinuteRate\":0.0,\"MessagesInPerSecOneMinuteRate\":0.0,\"BytesRejectedPerSecFifteenMinuteRate\":0.0,\"FailedFetchRequestsPerSecFiveMinuteRate\":0.0,\"RequestHandlerAvgIdlePercentFiveMinuteRate\":0.999803118809842,\"BytesOutPerSecOneMinuteRate\":0.0,\"ResponseQueueSizeValue\":0,\"MessagesInPerSecFifteenMinuteRate\":0.0,\"TotalProduceRequestsPerSecMeanRate\":0.0,\"BytesRejectedPerSecMeanRate\":0.0,\"TotalFetchRequestsPerSecMeanRate\":1.2674449706628523,\"NetworkProcessorAvgIdlePercentValue\":1.0,\"TotalFetchRequestsPerSecOneMinuteRate\":10.457259856316893,\"BytesInPerSecFifteenMinuteRate\":0.0,\"BytesOutPerSecMeanRate\":0.0,\"TotalProduceRequestsPerSecFifteenMinuteRate\":0.0,\"FetchConsumerTotalTimeMs50thPercentile\":0.0,\"RequestHandlerAvgIdlePercentFifteenMinuteRate\":0.9999287809186348,\"FetchConsumerTotalTimeMs95thPercentile\":0.0,\"FailedProduceRequestsPerSecOneMinuteRate\":0.0,\"CreateTime\":1638792321071,\"FetchConsumerTotalTimeMs75thPercentile\":0.0,\"ProduceTotalTimeMs999thPercentile\":0.0,\"RequestQueueSizeValue\":0,\"ProduceTotalTimeMs50thPercentile\":0.0,\"BytesRejectedPerSecOneMinuteRate\":0.0,\"RequestHandlerAvgIdlePercentMeanRate\":0.9999649184090593,\"ProduceTotalTimeMs95thPercentile\":0.0}";
|
||||
static {
|
||||
REAL_BROKER_ID_SET.add(1);
|
||||
REAL_BROKER_ID_SET.add(2);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private ExpertService expertService;
|
||||
|
||||
@Mock
|
||||
private ConfigService configService;
|
||||
|
||||
@Mock
|
||||
private RegionService regionService;
|
||||
|
||||
@Mock
|
||||
private ClusterService clusterService;
|
||||
|
||||
@Mock
|
||||
private TopicManagerService topicManagerService;
|
||||
|
||||
@Autowired
|
||||
private TopicMetricsDao topicMetricsDao;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private ClusterDO getClusterDO() {
|
||||
ClusterDO clusterDO = new ClusterDO();
|
||||
clusterDO.setId(REAL_CLUSTER_ID_IN_MYSQL);
|
||||
|
||||
return clusterDO;
|
||||
}
|
||||
|
||||
private RegionTopicHotConfig getRegionTopicHotConfig() {
|
||||
RegionTopicHotConfig config = new RegionTopicHotConfig();
|
||||
config.setMaxDisPartitionNum(-1);// 为了通过检测
|
||||
// ignoreClusterIdList字段不用设置
|
||||
config.setMinTopicBytesInUnitB(-1L);// 为了通过检测
|
||||
return config;
|
||||
}
|
||||
private TopicRegionHot getTopicRegionHot() {
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
TopicRegionHot hotTopic = new TopicRegionHot(clusterDO, REAL_TOPIC_IN_ZK, null, new HashMap<>());
|
||||
return hotTopic;
|
||||
}
|
||||
|
||||
private Map<String, Set<Integer>> getTopicNameRegionBrokerIdMap() {
|
||||
Map<String, Set<Integer>> map = new HashMap<>();
|
||||
map.put(REAL_TOPIC_IN_ZK, REAL_BROKER_ID_SET);
|
||||
return map;
|
||||
}
|
||||
|
||||
private Map<String, List<Double>> getMaxAvgBytesInMap() {
|
||||
Map<String, List<Double>> map = new HashMap<>();
|
||||
map.put(REAL_TOPIC_IN_ZK, new ArrayList<>());
|
||||
return map;
|
||||
}
|
||||
|
||||
private TopicInsufficientPartitionConfig getTopicInsufficientPartitionConfig() {
|
||||
TopicInsufficientPartitionConfig config = new TopicInsufficientPartitionConfig();
|
||||
config.setMinTopicBytesInUnitB(-1L);// 为了通过测试
|
||||
config.setMaxBytesInPerPartitionUnitB(10L);// 为了通过测试
|
||||
return config;
|
||||
}
|
||||
|
||||
private TopicExpiredDO getTopicExpiredDO() {
|
||||
TopicExpiredDO topicExpiredDO = new TopicExpiredDO();
|
||||
topicExpiredDO.setTopicName(REAL_TOPIC_IN_ZK);
|
||||
topicExpiredDO.setClusterId(REAL_CLUSTER_ID_IN_MYSQL);
|
||||
return topicExpiredDO;
|
||||
}
|
||||
|
||||
private TopicExpiredConfig getTopicExpiredConfig() {
|
||||
TopicExpiredConfig config = new TopicExpiredConfig();
|
||||
config.setIgnoreClusterIdList(new ArrayList<>());
|
||||
return config;
|
||||
}
|
||||
|
||||
private TopicMetricsDO getTopicMetricsDO() {
|
||||
TopicMetricsDO topicMetricsDO = new TopicMetricsDO();
|
||||
topicMetricsDO.setClusterId(REAL_CLUSTER_ID_IN_MYSQL);
|
||||
topicMetricsDO.setTopicName(REAL_TOPIC_IN_ZK);
|
||||
topicMetricsDO.setMetrics(metrics);
|
||||
return topicMetricsDO;
|
||||
}
|
||||
|
||||
private TopicInsufficientPartition getTopicInsufficientPartition() {
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
|
||||
return new TopicInsufficientPartition(
|
||||
clusterDO,
|
||||
REAL_TOPIC_IN_ZK,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
new ArrayList<>(REAL_BROKER_ID_SET)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRegionHotTopicsTest() {
|
||||
// 返回空集合测试
|
||||
getRegionHotTopics2EmptyTest();
|
||||
|
||||
getRegionHotTopics2SuccessTest();
|
||||
}
|
||||
|
||||
private void getRegionHotTopics2EmptyTest() {
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(null);
|
||||
Assert.assertTrue(expertService.getRegionHotTopics().isEmpty());
|
||||
}
|
||||
|
||||
private void getRegionHotTopics2SuccessTest() {
|
||||
RegionTopicHotConfig config = getRegionTopicHotConfig();
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(config);
|
||||
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
List<ClusterDO> clusterDOList = new ArrayList<>();
|
||||
clusterDOList.add(clusterDO);
|
||||
Mockito.when(clusterService.list()).thenReturn(clusterDOList);
|
||||
|
||||
Map<String, Set<Integer>> map = getTopicNameRegionBrokerIdMap();
|
||||
Mockito.when(regionService.getTopicNameRegionBrokerIdMap(Mockito.anyLong())).thenReturn(map);
|
||||
|
||||
Assert.assertTrue(expertService.getRegionHotTopics().stream().allMatch(hotTopic -> hotTopic.getClusterDO().getId().equals(clusterDO.getId())));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void getPartitionInsufficientTopicsTest() {
|
||||
// 返回空集合测试
|
||||
getPartitionInsufficientTopic2EmptyTest();
|
||||
|
||||
// 成功测试
|
||||
getPartitionInsufficientTopicsSuccessTest();
|
||||
}
|
||||
|
||||
private void getPartitionInsufficientTopic2EmptyTest() {
|
||||
TopicInsufficientPartitionConfig config = getTopicInsufficientPartitionConfig();
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(config);
|
||||
Mockito.when(clusterService.list()).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(expertService.getPartitionInsufficientTopics().isEmpty());
|
||||
}
|
||||
|
||||
private void getPartitionInsufficientTopicsSuccessTest() {
|
||||
// 先向数据库中插入
|
||||
List<TopicMetricsDO> topicMetricsDOList = new ArrayList<>();
|
||||
topicMetricsDOList.add(getTopicMetricsDO());
|
||||
topicMetricsDao.batchAdd(topicMetricsDOList);
|
||||
|
||||
TopicInsufficientPartitionConfig config = getTopicInsufficientPartitionConfig();
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(config);
|
||||
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
List<ClusterDO> clusterDOList = new ArrayList<>();
|
||||
clusterDOList.add(clusterDO);
|
||||
Mockito.when(clusterService.list()).thenReturn(clusterDOList);
|
||||
|
||||
Map<String, Set<Integer>> map = getTopicNameRegionBrokerIdMap();
|
||||
Mockito.when(regionService.getTopicNameRegionBrokerIdMap(Mockito.anyLong())).thenReturn(map);
|
||||
|
||||
Map<String, List<Double>> maxAvgBytesInMap = getMaxAvgBytesInMap();
|
||||
Mockito.when(topicManagerService.getTopicMaxAvgBytesIn(Mockito.anyLong(), Mockito.anyInt(), Mockito.anyDouble())).thenReturn(maxAvgBytesInMap);
|
||||
|
||||
TopicInsufficientPartition expectResult = getTopicInsufficientPartition();
|
||||
Assert.assertTrue(expertService.getPartitionInsufficientTopics().stream().allMatch(topic -> topic.getClusterDO().getId().equals(expectResult.getClusterDO().getId()) &&
|
||||
topic.getTopicName().equals(expectResult.getTopicName())));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getExpiredTopicsTest() {
|
||||
// 返回空集合测试
|
||||
getExpiredTopics2EmptyTest();
|
||||
|
||||
// 成功测试
|
||||
getExpiredTopics2SuccessTest();
|
||||
}
|
||||
|
||||
private void getExpiredTopics2EmptyTest() {
|
||||
TopicExpiredConfig topicExpiredConfig = getTopicExpiredConfig();
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(topicExpiredConfig);
|
||||
|
||||
Mockito.when(topicManagerService.getExpiredTopics(Mockito.anyInt())).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(expertService.getExpiredTopics().isEmpty());
|
||||
}
|
||||
|
||||
public void getExpiredTopics2SuccessTest() {
|
||||
TopicExpiredConfig topicExpiredConfig = getTopicExpiredConfig();
|
||||
Mockito.when(configService.getByKey(Mockito.anyString(), Mockito.any())).thenReturn(topicExpiredConfig);
|
||||
|
||||
TopicExpiredDO topicExpiredDO = getTopicExpiredDO();
|
||||
List<TopicExpiredDO> topicExpiredDOList = new ArrayList<>();
|
||||
topicExpiredDOList.add(topicExpiredDO);
|
||||
Mockito.when(topicManagerService.getExpiredTopics(Mockito.anyInt())).thenReturn(topicExpiredDOList);
|
||||
|
||||
Assert.assertTrue(expertService.getExpiredTopics().stream().allMatch(expiredDO -> expiredDO.getClusterId().equals(topicExpiredDO.getClusterId()) &&
|
||||
expiredDO.getTopicName().equals(topicExpiredDO.getTopicName())));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,9 +13,9 @@ spring:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://116.85.6.115:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: Work2019
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.xiaojukeji.kafka.manager.account;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.account.common.EnterpriseStaff;
|
||||
import com.xiaojukeji.kafka.manager.account.component.AbstractEnterpriseStaffService;
|
||||
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
|
||||
import com.xiaojukeji.kafka.manager.dao.AccountDao;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2021/12/30
|
||||
*/
|
||||
public class AbstractEnterpriseStaffServiceTest extends BaseTest {
|
||||
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private AbstractEnterpriseStaffService abstractEnterpriseStaffService;
|
||||
|
||||
@Mock
|
||||
private AccountDao accountDao;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
|
||||
private EnterpriseStaff getEnterpriseStaff() {
|
||||
EnterpriseStaff staff = new EnterpriseStaff("username", "username", "department");
|
||||
return staff;
|
||||
}
|
||||
|
||||
private AccountDO getAccountDO() {
|
||||
AccountDO accountDO = new AccountDO();
|
||||
accountDO.setUsername("username");
|
||||
return accountDO;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getEnterpriseStaffByNameTest() {
|
||||
// 返回null测试
|
||||
getEnterpriseStaffByName2NullTest();
|
||||
|
||||
// 成功测试
|
||||
getEnterpriseStaffByName2SuccessTest();
|
||||
}
|
||||
|
||||
private void getEnterpriseStaffByName2NullTest() {
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(null);
|
||||
Assert.assertNull(abstractEnterpriseStaffService.getEnterpriseStaffByName("username"));
|
||||
}
|
||||
|
||||
private void getEnterpriseStaffByName2SuccessTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
EnterpriseStaff staff = getEnterpriseStaff();
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
|
||||
EnterpriseStaff result = abstractEnterpriseStaffService.getEnterpriseStaffByName("username");
|
||||
Assert.assertTrue(result.getUsername().equals(staff.getUsername()) && result.getChineseName().equals(staff.getChineseName()));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void searchEnterpriseStaffByKeyWordTest() {
|
||||
// 返回空集合测试
|
||||
searchEnterpriseStaffByKeyWord2EmptyTest();
|
||||
|
||||
// 返回非空集合测试
|
||||
searchEnterpriseStaffByKeyWord2AllTest();
|
||||
}
|
||||
|
||||
private void searchEnterpriseStaffByKeyWord2EmptyTest() {
|
||||
Mockito.when(accountDao.searchByNamePrefix(Mockito.anyString())).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(abstractEnterpriseStaffService.searchEnterpriseStaffByKeyWord("username").isEmpty());
|
||||
}
|
||||
|
||||
private void searchEnterpriseStaffByKeyWord2AllTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Mockito.when(accountDao.searchByNamePrefix(Mockito.anyString())).thenReturn(Arrays.asList(accountDO));
|
||||
|
||||
EnterpriseStaff staff = getEnterpriseStaff();
|
||||
List<EnterpriseStaff> result = abstractEnterpriseStaffService.searchEnterpriseStaffByKeyWord("username");
|
||||
Assert.assertTrue(!result.isEmpty() && result.stream().allMatch(enterpriseStaff -> enterpriseStaff.getChineseName().equals(staff.getChineseName()) &&
|
||||
enterpriseStaff.getUsername().equals(staff.getUsername())));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,244 @@
|
||||
package com.xiaojukeji.kafka.manager.account;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.account.component.AbstractSingleSignOn;
|
||||
import com.xiaojukeji.kafka.manager.account.component.ldap.LdapAuthentication;
|
||||
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
|
||||
import com.xiaojukeji.kafka.manager.common.constant.LoginConstant;
|
||||
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.LoginDTO;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
|
||||
import com.xiaojukeji.kafka.manager.common.utils.EncryptUtil;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.internal.util.reflection.FieldSetter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2021/12/30
|
||||
*/
|
||||
public class AbstractSingleSignOnTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private AbstractSingleSignOn abstractSingleSignOn;
|
||||
|
||||
@Mock
|
||||
private AccountService accountService;
|
||||
|
||||
@Mock
|
||||
private LdapAuthentication ldapAuthentication;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private HttpServletRequest getHttpServletRequest() {
|
||||
HttpServletRequest request = new MockHttpServletRequest();
|
||||
return request;
|
||||
}
|
||||
|
||||
private HttpServletResponse getHttpServletResponse() {
|
||||
HttpServletResponse response = new MockHttpServletResponse();
|
||||
return response;
|
||||
}
|
||||
|
||||
private LoginDTO getLoginDTO() {
|
||||
LoginDTO dto = new LoginDTO();
|
||||
dto.setUsername("username");
|
||||
dto.setPassword("password");
|
||||
return dto;
|
||||
}
|
||||
|
||||
private AccountDO getAccountDO() {
|
||||
AccountDO accountDO = new AccountDO();
|
||||
accountDO.setUsername("username");
|
||||
accountDO.setPassword("password");
|
||||
|
||||
return accountDO;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loginAndGetLdapTest() throws NoSuchFieldException {
|
||||
// username为null测试
|
||||
loginAndGetLdap2ParamNullTest();
|
||||
|
||||
// LDAP未激活测试,从最后的return返回
|
||||
loginAndGetLdap2LdapDisabledTest();
|
||||
|
||||
// LDAP激活,返回false测试
|
||||
loginAndGetLdap2LdapEnabledReturnFalseTest();
|
||||
|
||||
// LDAP激活,返回true测试
|
||||
loginAndGetLdap2LdapEnabledReturnTrueTest();
|
||||
|
||||
loginAndGetLdap2FailureTest();
|
||||
|
||||
// name illegal 测试
|
||||
loginAndGetLdap2NameIllegalTest();
|
||||
|
||||
// password illegal 测试
|
||||
loginAndGetLdap2PasswordIllegalTest();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void resetAbstractSingleSignOn() throws NoSuchFieldException {
|
||||
// 通过反射将abstractSingleSignOn内属性的值置于初始状态,因为每个private测试中会通过反射改变abstractSingleSignOn成员变量的值
|
||||
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
|
||||
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, null);
|
||||
|
||||
Field authUserRegistrationRole = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistrationRole");
|
||||
FieldSetter.setField(abstractSingleSignOn, authUserRegistrationRole, null);
|
||||
|
||||
Field authUserRegistration = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistration");
|
||||
FieldSetter.setField(abstractSingleSignOn, authUserRegistration, false);
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2ParamNullTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO loginDTO = getLoginDTO();
|
||||
loginDTO.setUsername(null);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, loginDTO).toString(), Result.buildFailure("Missing parameters").toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2LdapDisabledTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
|
||||
LoginDTO loginDTO = getLoginDTO();
|
||||
String pass = EncryptUtil.md5(loginDTO.getPassword());
|
||||
|
||||
AccountDO accountDO1 = getAccountDO();
|
||||
accountDO1.setPassword(pass);
|
||||
|
||||
Result<AccountDO> result = Result.buildSuc(accountDO1);
|
||||
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, loginDTO).toString(), Result.buildSuc(result.getData().getUsername()).toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2LdapEnabledReturnFalseTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO dto = getLoginDTO();
|
||||
// 通过反射将abstractSingleSignOn对象中accountLdapEnabled属性设置为true
|
||||
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
|
||||
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, true);
|
||||
|
||||
Mockito.when(ldapAuthentication.authenticate(Mockito.anyString(), Mockito.anyString())).thenReturn(false);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFrom(ResultStatus.LDAP_AUTHENTICATION_FAILED).toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2LdapEnabledReturnTrueTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO dto = getLoginDTO();
|
||||
|
||||
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(null);
|
||||
|
||||
// 通过反射将abstractSingleSignOn对象中accountLdapEnabled属性设置为true
|
||||
Field accountLdapEnabled = abstractSingleSignOn.getClass().getDeclaredField("accountLdapEnabled");
|
||||
FieldSetter.setField(abstractSingleSignOn, accountLdapEnabled, true);
|
||||
|
||||
Mockito.when(ldapAuthentication.authenticate(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
|
||||
|
||||
// 通过反射初始化成员变量,防止出现空指针异常
|
||||
Field authUserRegistrationRole = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistrationRole");
|
||||
FieldSetter.setField(abstractSingleSignOn, authUserRegistrationRole, AccountRoleEnum.NORMAL.getMessage());
|
||||
|
||||
Field authUserRegistration = abstractSingleSignOn.getClass().getDeclaredField("authUserRegistration");
|
||||
FieldSetter.setField(abstractSingleSignOn, authUserRegistration, true);
|
||||
|
||||
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildSuc(dto.getUsername()).toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2FailureTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO dto = getLoginDTO();
|
||||
Result result = Result.buildFailure("fail");
|
||||
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), result.toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2NameIllegalTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO dto = getLoginDTO();
|
||||
|
||||
Result result = Result.buildSuc();
|
||||
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFailure("username illegal").toString());
|
||||
}
|
||||
|
||||
private void loginAndGetLdap2PasswordIllegalTest() throws NoSuchFieldException {
|
||||
resetAbstractSingleSignOn();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
LoginDTO dto = getLoginDTO();
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Result<AccountDO> result = Result.buildSuc(accountDO);
|
||||
Mockito.when(accountService.getAccountDO(Mockito.any())).thenReturn(result);
|
||||
Assert.assertEquals(abstractSingleSignOn.loginAndGetLdap(request, response, dto).toString(), Result.buildFailure("password illegal").toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void logoutTest() {
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
abstractSingleSignOn.logout(request, response, true);
|
||||
Assert.assertEquals(response.getStatus(), 401);
|
||||
Assert.assertEquals(response.getHeader("location"), "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkLoginAndGetLdapTest() {
|
||||
// 返回null测试
|
||||
checkLoginAndGetLdap2NullTest();
|
||||
|
||||
// 成功测试
|
||||
checkLoginAndGetLdap2SuccessTest();
|
||||
}
|
||||
|
||||
private void checkLoginAndGetLdap2NullTest() {
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Assert.assertNull(abstractSingleSignOn.checkLoginAndGetLdap(request));
|
||||
}
|
||||
|
||||
private void checkLoginAndGetLdap2SuccessTest() {
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
request.getSession().setAttribute(LoginConstant.SESSION_USERNAME_KEY, "username");
|
||||
Assert.assertEquals(abstractSingleSignOn.checkLoginAndGetLdap(request), "username");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setRedirectToLoginPageTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
response.setStatus(401);
|
||||
response.setHeader("location", "");
|
||||
Assert.assertEquals(response.getStatus(), 401);
|
||||
Assert.assertEquals(response.getHeader("location"), "");
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,287 @@
|
||||
package com.xiaojukeji.kafka.manager.account;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.account.common.EnterpriseStaff;
|
||||
import com.xiaojukeji.kafka.manager.account.component.AbstractEnterpriseStaffService;
|
||||
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
|
||||
import com.xiaojukeji.kafka.manager.common.constant.Constant;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.Result;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.account.Account;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.AccountDO;
|
||||
import com.xiaojukeji.kafka.manager.dao.AccountDao;
|
||||
import com.xiaojukeji.kafka.manager.service.service.ConfigService;
|
||||
import com.xiaojukeji.kafka.manager.service.service.OperateRecordService;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xuguang
|
||||
* @Date 2021/12/25
|
||||
* @author wyc
|
||||
* @Date 2021/12/29
|
||||
*/
|
||||
public class AccountServiceTest {
|
||||
public class AccountServiceTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private AccountService accountService;
|
||||
|
||||
@Mock
|
||||
private AccountDao accountDao;
|
||||
|
||||
@Mock
|
||||
private OperateRecordService operateRecordService;
|
||||
|
||||
@Mock
|
||||
private AbstractEnterpriseStaffService enterpriseStaffService;
|
||||
|
||||
@Mock
|
||||
private ConfigService configService;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private AccountDO getAccountDO() {
|
||||
AccountDO accountDO = new AccountDO();
|
||||
accountDO.setUsername("test_username");
|
||||
accountDO.setPassword("test_password");
|
||||
accountDO.setRole(0);
|
||||
return accountDO;
|
||||
}
|
||||
|
||||
private EnterpriseStaff getEnterpriseStaff() {
|
||||
EnterpriseStaff staff = new EnterpriseStaff("username", "ChineseName", "department");
|
||||
return staff;
|
||||
}
|
||||
|
||||
private Account getAccount() {
|
||||
Account account = new Account();
|
||||
return account;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createAccountTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
// 创建成功测试
|
||||
createAccount2SuccessTest(accountDO);
|
||||
|
||||
// 主键重复测试
|
||||
createAccount2DuplicateKeyExceptionTest(accountDO);
|
||||
}
|
||||
|
||||
private void createAccount2SuccessTest(AccountDO accountDO) {
|
||||
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenReturn(1);
|
||||
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void createAccount2DuplicateKeyExceptionTest(AccountDO accountDO) {
|
||||
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenThrow(DuplicateKeyException.class);
|
||||
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.RESOURCE_ALREADY_EXISTED);
|
||||
}
|
||||
|
||||
private void createAccount2MySQLErrorTest(AccountDO accountDO) {
|
||||
Mockito.when(accountDao.addNewAccount(Mockito.any())).thenReturn(-1);
|
||||
Assert.assertEquals(accountService.createAccount(accountDO), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void deleteByNameTest() {
|
||||
// 删除成功测试
|
||||
deleteName2SuccessTest();
|
||||
|
||||
// MySQL_ERROR错误测试
|
||||
deleteName2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void deleteName2SuccessTest() {
|
||||
Mockito.when(accountDao.deleteByName(Mockito.anyString())).thenReturn(1);
|
||||
Assert.assertEquals(accountService.deleteByName("username", "admin"), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void deleteName2MySQLErrorTest() {
|
||||
Mockito.when(accountDao.deleteByName(Mockito.anyString())).thenReturn(-1);
|
||||
Assert.assertEquals(accountService.deleteByName("username", "admin"), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateAccountTest() {
|
||||
// 账号不存在测试
|
||||
updateAccount2AccountNotExistTest();
|
||||
|
||||
// 更新成功测试
|
||||
updateAccount2SuccessTest();
|
||||
|
||||
// MySQL_ERROR测试
|
||||
updateAccount2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void updateAccount2AccountNotExistTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(null);
|
||||
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.ACCOUNT_NOT_EXIST);
|
||||
}
|
||||
|
||||
private void updateAccount2SuccessTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
|
||||
Mockito.when(accountDao.updateByName(Mockito.any())).thenReturn(1);
|
||||
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void updateAccount2MySQLErrorTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
|
||||
Mockito.when(accountDao.updateByName(Mockito.any())).thenReturn(-1);
|
||||
Assert.assertEquals(accountService.updateAccount(accountDO), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAccountDOTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
Result<AccountDO> expectedResult = Result.buildSuc(accountDO);
|
||||
|
||||
Mockito.when(accountDao.getByName(Mockito.anyString())).thenReturn(accountDO);
|
||||
Assert.assertEquals(accountService.getAccountDO(accountDO.getUsername()).toString(), expectedResult.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
List<AccountDO> list = new ArrayList<>();
|
||||
list.add(accountDO);
|
||||
Mockito.when(accountDao.list()).thenReturn(list);
|
||||
List<AccountDO> actualResult = accountService.list();
|
||||
Assert.assertTrue(!actualResult.isEmpty() && actualResult.stream().allMatch(account -> account.getUsername().equals(accountDO.getUsername()) &&
|
||||
account.getPassword().equals(accountDO.getPassword())));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchAccountByPrefixTest() {
|
||||
EnterpriseStaff staff = getEnterpriseStaff();
|
||||
List<EnterpriseStaff> expectedResult = new ArrayList<>();
|
||||
expectedResult.add(staff);
|
||||
Mockito.when(enterpriseStaffService.searchEnterpriseStaffByKeyWord(Mockito.anyString())).thenReturn(expectedResult);
|
||||
List<EnterpriseStaff> actualResult = accountService.searchAccountByPrefix("prefix");
|
||||
|
||||
Assert.assertTrue(!actualResult.isEmpty() && actualResult.stream().allMatch(enterpriseStaff -> enterpriseStaff.getUsername().equals(staff.getUsername())));
|
||||
}
|
||||
|
||||
// 因为flush只会执行一次,因此需要分开测试
|
||||
@Test(description = "普通角色测试")
|
||||
public void getAccountRoleFromCache2NormalTest() {
|
||||
Assert.assertEquals(accountService.getAccountRoleFromCache("username"), AccountRoleEnum.NORMAL);
|
||||
}
|
||||
|
||||
@Test(description = "op角色测试")
|
||||
public void getAccountRoleFromCache2OpTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
accountDO.setUsername("admin");
|
||||
accountDO.setRole(2);
|
||||
|
||||
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
|
||||
Assert.assertEquals(accountService.getAccountRoleFromCache("admin"), AccountRoleEnum.OP);
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "自动审批测试")
|
||||
public void getAccountFromCache2AutoHandleTest() {
|
||||
Account account = getAccount();
|
||||
account.setUsername(Constant.AUTO_HANDLE_USER_NAME);
|
||||
account.setChineseName(Constant.AUTO_HANDLE_CHINESE_NAME);
|
||||
account.setAccountRoleEnum(AccountRoleEnum.OP);
|
||||
Assert.assertEquals(accountService.getAccountFromCache(Constant.AUTO_HANDLE_USER_NAME).toString(), account.toString());
|
||||
}
|
||||
|
||||
@Test(description = "staff为null测试")
|
||||
public void getAccountFromCache2EnterpriseStaffIsNullTest() {
|
||||
Account account = getAccount();
|
||||
account.setUsername("username1");
|
||||
account.setChineseName("username1");
|
||||
account.setAccountRoleEnum(AccountRoleEnum.NORMAL);
|
||||
|
||||
Mockito.when(enterpriseStaffService.getEnterpriseStaffByName(Mockito.anyString())).thenReturn(null);
|
||||
Assert.assertEquals(accountService.getAccountFromCache("username1").toString(), account.toString());
|
||||
}
|
||||
|
||||
@Test(description = "staff不为null测试")
|
||||
public void getAccountFromCache2EnterpriseStaffIsNotNullTest() {
|
||||
Account account = getAccount();
|
||||
account.setUsername("username");
|
||||
account.setChineseName("ChineseName");
|
||||
account.setAccountRoleEnum(AccountRoleEnum.NORMAL);
|
||||
account.setDepartment("department");
|
||||
EnterpriseStaff enterpriseStaff = getEnterpriseStaff();
|
||||
|
||||
Mockito.when(enterpriseStaffService.getEnterpriseStaffByName(Mockito.any())).thenReturn(enterpriseStaff);
|
||||
Assert.assertEquals(accountService.getAccountFromCache("username").toString(), account.toString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test(description = "op角色测试")
|
||||
public void isAdminOrderHandler2OpTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
accountDO.setUsername("admin");
|
||||
accountDO.setRole(2);
|
||||
|
||||
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
|
||||
Assert.assertTrue(accountService.isAdminOrderHandler("admin"));
|
||||
}
|
||||
|
||||
@Test(description = "ADMIN_ORDER_HANDLER_CACHE包含用户名测试")
|
||||
public void isAdminOrderHandler2CacheContainsTest() {
|
||||
Mockito.when(configService.getArrayByKey(Mockito.anyString(), Mockito.any())).thenReturn(Arrays.asList("username"));
|
||||
Mockito.when(accountDao.list()).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(accountService.isAdminOrderHandler("username"));
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "普通角色测试")
|
||||
public void isAdminOrderHandler2NormalTest() {
|
||||
Mockito.when(accountDao.list()).thenReturn(new ArrayList<>());
|
||||
Assert.assertFalse(accountService.isAdminOrderHandler("username"));
|
||||
}
|
||||
|
||||
@Test(description = "op角色测试")
|
||||
public void isOpOrRd2OpTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
accountDO.setUsername("admin");
|
||||
accountDO.setRole(2);
|
||||
|
||||
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
|
||||
Assert.assertTrue(accountService.isOpOrRd("admin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isOpOrRdTest2RdTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
accountDO.setUsername("admin");
|
||||
accountDO.setRole(1);
|
||||
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
|
||||
Assert.assertTrue(accountService.isOpOrRd("admin"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAdminOrderHandlerFromCacheTest() {
|
||||
AccountDO accountDO = getAccountDO();
|
||||
accountDO.setUsername("username");
|
||||
accountDO.setRole(2);
|
||||
|
||||
Mockito.when(accountDao.list()).thenReturn(Arrays.asList(accountDO));
|
||||
List<Account> actualList = accountService.getAdminOrderHandlerFromCache();
|
||||
Assert.assertTrue(!actualList.isEmpty() && actualList.stream().allMatch(account -> account.getUsername().equals(accountDO.getUsername())));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,17 +1,198 @@
|
||||
package com.xiaojukeji.kafka.manager.account;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.account.component.AbstractSingleSignOn;
|
||||
import com.xiaojukeji.kafka.manager.account.component.login.trick.TrickLoginService;
|
||||
import com.xiaojukeji.kafka.manager.account.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.common.bizenum.AccountRoleEnum;
|
||||
import com.xiaojukeji.kafka.manager.common.constant.ApiPrefix;
|
||||
import com.xiaojukeji.kafka.manager.common.constant.LoginConstant;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.Result;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.account.Account;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import javax.servlet.http.*;
|
||||
|
||||
/**
|
||||
* @author xuguang
|
||||
* @Date 2021/12/25
|
||||
* @author wyc
|
||||
* @Date 2021/12/29
|
||||
*/
|
||||
public class LoginServiceTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private LoginService loginService;
|
||||
|
||||
@Mock
|
||||
private AbstractSingleSignOn singleSignOn;
|
||||
|
||||
@Mock
|
||||
private AccountService accountService;
|
||||
|
||||
@Mock
|
||||
private TrickLoginService trickLoginService;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private Account getAccount() {
|
||||
Account account = new Account();
|
||||
account.setUsername("username");
|
||||
return account;
|
||||
}
|
||||
|
||||
private HttpServletRequest getHttpServletRequest() {
|
||||
HttpServletRequest request = new MockHttpServletRequest();
|
||||
return request;
|
||||
}
|
||||
|
||||
private HttpServletResponse getHttpServletResponse() {
|
||||
HttpServletResponse response = new MockHttpServletResponse();
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
Assert.assertEquals("", "");
|
||||
public void loginTest() {
|
||||
// 失败测试
|
||||
login2FailureTest();
|
||||
|
||||
// 成功测试
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
login2SuccessTest(request, response);
|
||||
}
|
||||
|
||||
private void login2SuccessTest(HttpServletRequest request, HttpServletResponse response) {
|
||||
Account account = getAccount();
|
||||
Result<Account> expectResult = Result.buildSuc(account);
|
||||
Result<String> midResult = Result.buildSuc();
|
||||
Mockito.when(singleSignOn.loginAndGetLdap(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(midResult);
|
||||
Mockito.when(accountService.getAccountFromCache(Mockito.any())).thenReturn(account);
|
||||
Assert.assertEquals(loginService.login(request, response, null).toString(), expectResult.toString());
|
||||
}
|
||||
|
||||
private void login2FailureTest() {
|
||||
Result<String> result = new Result<>();
|
||||
result.setCode(ResultStatus.FAIL.getCode());
|
||||
result.setMessage(ResultStatus.FAIL.getMessage());
|
||||
Mockito.when(singleSignOn.loginAndGetLdap(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(result);
|
||||
Result<Account> actualResult = loginService.login(null, null, null);
|
||||
Assert.assertEquals(actualResult.toString(), result.toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void checkLoginTest() {
|
||||
// classRequestMappingValue为null测试
|
||||
checkLogin2ClassValueIsNullTest();
|
||||
|
||||
// 白名单接口测试
|
||||
checkLogin2SSOTest();
|
||||
|
||||
// trick登陆返回用户名为空
|
||||
checkLogin2TrickFalseTest();
|
||||
|
||||
// 权限检查normal接口测试
|
||||
checkLogin2NormalTest();
|
||||
|
||||
// 权限检查RD接口, 成功测试
|
||||
checkLogin2RDSuccessTest();
|
||||
|
||||
// 权限检查RD接口, 失败测试
|
||||
checkLogin2RDFailureTest();
|
||||
|
||||
// 权限检查OP接口, 成功测试
|
||||
checkLogin2OPSuccessTest();
|
||||
|
||||
// 权限检查OP接口,失败测试
|
||||
checkLogin2OPFailureTest();
|
||||
}
|
||||
|
||||
private void checkLogin2ClassValueIsNullTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.doNothing().when(singleSignOn).setRedirectToLoginPage(Mockito.any());
|
||||
Assert.assertFalse(loginService.checkLogin(request, response, null));
|
||||
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
private void checkLogin2SSOTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_SSO_PREFIX));
|
||||
}
|
||||
|
||||
private void checkLogin2TrickFalseTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("");
|
||||
Mockito.doNothing().when(singleSignOn).setRedirectToLoginPage(response);
|
||||
Assert.assertFalse(loginService.checkLogin(request, response, "string"));
|
||||
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
private void checkLogin2NormalTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
|
||||
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_NORMAL_PREFIX));
|
||||
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
|
||||
}
|
||||
|
||||
private void checkLogin2RDSuccessTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
|
||||
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.OP);
|
||||
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_RD_PREFIX));
|
||||
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
|
||||
}
|
||||
|
||||
private void checkLogin2RDFailureTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
|
||||
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.NORMAL);
|
||||
Assert.assertFalse(loginService.checkLogin(request, response, ApiPrefix.API_V1_RD_PREFIX));
|
||||
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_FORBIDDEN);
|
||||
}
|
||||
|
||||
private void checkLogin2OPSuccessTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
|
||||
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.OP);
|
||||
Assert.assertTrue(loginService.checkLogin(request, response, ApiPrefix.API_V1_OP_PREFIX));
|
||||
Assert.assertEquals(request.getSession().getAttribute(LoginConstant.SESSION_USERNAME_KEY), "username");
|
||||
}
|
||||
|
||||
private void checkLogin2OPFailureTest() {
|
||||
HttpServletResponse response = getHttpServletResponse();
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
Mockito.when(trickLoginService.isTrickLoginOn(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(trickLoginService.checkTrickLogin(Mockito.any())).thenReturn("username");
|
||||
Mockito.when(accountService.getAccountRoleFromCache(Mockito.any())).thenReturn(AccountRoleEnum.NORMAL);
|
||||
Assert.assertFalse(loginService.checkLogin(request, response, ApiPrefix.API_V1_OP_PREFIX));
|
||||
Assert.assertEquals(response.getStatus(), HttpServletResponse.SC_FORBIDDEN);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ spring:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://localhost:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.xiaojukeji.kafka.manager.bpm;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.bpm.component.AbstractOrderStorageService;
|
||||
import com.xiaojukeji.kafka.manager.bpm.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.OrderDO;
|
||||
import com.xiaojukeji.kafka.manager.dao.OrderDao;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2022/1/5
|
||||
*/
|
||||
public class AbstractOrderStorageServiceTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private AbstractOrderStorageService abstractOrderStorageService;
|
||||
|
||||
@Mock
|
||||
private OrderDao orderDao;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private OrderDO getOrderDO() {
|
||||
OrderDO orderDO = new OrderDO();
|
||||
orderDO.setApplicant("applicant");
|
||||
return orderDO;
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void cancelTest() {
|
||||
// 返回null测试
|
||||
cancel2ReturnNullTest();
|
||||
|
||||
// 无权限测试
|
||||
cancel2WithoutAuthority();
|
||||
|
||||
// 成功测试
|
||||
cancel2SuccessTest();
|
||||
|
||||
// 数据库错误测试
|
||||
cancel2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void cancel2ReturnNullTest() {
|
||||
Mockito.when(orderDao.getById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(abstractOrderStorageService.cancel(1L, "applicant"), ResultStatus.ORDER_NOT_EXIST);
|
||||
}
|
||||
|
||||
private void cancel2WithoutAuthority() {
|
||||
OrderDO orderDO = getOrderDO();
|
||||
Assert.assertEquals(abstractOrderStorageService.cancel(1L, "username"), ResultStatus.USER_WITHOUT_AUTHORITY);
|
||||
}
|
||||
|
||||
private void cancel2SuccessTest() {
|
||||
OrderDO orderDO = getOrderDO();
|
||||
Mockito.when(orderDao.getById(Mockito.anyLong())).thenReturn(orderDO);
|
||||
Mockito.when(orderDao.updateOrderStatusById(Mockito.anyLong(), Mockito.anyInt())).thenReturn(1);
|
||||
Assert.assertEquals(abstractOrderStorageService.cancel(1L, "applicant"), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void cancel2MySQLErrorTest() {
|
||||
OrderDO orderDO = getOrderDO();
|
||||
Mockito.when(orderDao.getById(Mockito.anyLong())).thenReturn(orderDO);
|
||||
Mockito.when(orderDao.updateOrderStatusById(Mockito.anyLong(), Mockito.anyInt())).thenReturn(0);
|
||||
Assert.assertEquals(abstractOrderStorageService.cancel(1L, "applicant"), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,9 +13,9 @@ spring:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://localhost:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.xiaojukeji.kafka.manager.monitor;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.Strategy;
|
||||
import com.xiaojukeji.kafka.manager.monitor.component.AbstractMonitorService;
|
||||
import com.xiaojukeji.kafka.manager.monitor.config.BaseTest;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2022/1/5
|
||||
*/
|
||||
public class AbstractMonitorServiceTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private AbstractMonitorService abstractMonitorService;
|
||||
|
||||
@Mock
|
||||
private HttpURLConnection conn;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private Strategy getStrategy() {
|
||||
Strategy strategy = new Strategy();
|
||||
strategy.setName("test_strategy");
|
||||
strategy.setId(1L);
|
||||
strategy.setPeriodDaysOfWeek("1");
|
||||
strategy.setPeriodHoursOfDay("24");
|
||||
strategy.setPriority(0);
|
||||
strategy.setStrategyFilterList(new ArrayList<>());
|
||||
strategy.setStrategyExpressionList(new ArrayList<>());
|
||||
strategy.setStrategyActionList(new ArrayList<>());
|
||||
return strategy;
|
||||
}
|
||||
@Test
|
||||
public void createStrategyTest() throws IOException {
|
||||
Strategy strategy = getStrategy();
|
||||
Integer i = abstractMonitorService.createStrategy(strategy);
|
||||
System.out.println(i);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,458 @@
|
||||
package com.xiaojukeji.kafka.manager.monitor;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.common.entity.Result;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.MonitorRuleDO;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.gateway.AppDO;
|
||||
import com.xiaojukeji.kafka.manager.dao.MonitorRuleDao;
|
||||
import com.xiaojukeji.kafka.manager.dao.gateway.AppDao;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.Alert;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.Metric;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.Silence;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.Strategy;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.dto.MonitorRuleDTO;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.entry.dto.MonitorSilenceDTO;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.monitor.MonitorAlertDetail;
|
||||
import com.xiaojukeji.kafka.manager.monitor.common.monitor.MonitorRuleSummary;
|
||||
import com.xiaojukeji.kafka.manager.monitor.component.AbstractMonitorService;
|
||||
import com.xiaojukeji.kafka.manager.monitor.config.BaseTest;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xuguang
|
||||
* @Date 2021/12/27
|
||||
* @author wyc
|
||||
* @Date 2022/01/05
|
||||
*/
|
||||
public class MonitorServiceTest {
|
||||
public class MonitorServiceTest extends BaseTest {
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private MonitorService monitorService;
|
||||
|
||||
@Mock
|
||||
private AbstractMonitorService abstractMonitorService;
|
||||
|
||||
@Mock
|
||||
private MonitorRuleDao monitorRuleDao;
|
||||
|
||||
@Mock
|
||||
private AppDao appDao;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
private MonitorRuleDTO getMonitorRuleDTO() {
|
||||
MonitorRuleDTO monitorRuleDTO = new MonitorRuleDTO();
|
||||
monitorRuleDTO.setAppId("appId");
|
||||
monitorRuleDTO.setName("name");
|
||||
monitorRuleDTO.setStrategyExpressionList(new ArrayList<>());
|
||||
monitorRuleDTO.setStrategyFilterList(new ArrayList<>());
|
||||
monitorRuleDTO.setStrategyActionList(new ArrayList<>());
|
||||
monitorRuleDTO.setId(1L);
|
||||
return monitorRuleDTO;
|
||||
}
|
||||
|
||||
private MonitorRuleDO getMonitorRuleDO() {
|
||||
MonitorRuleDO monitorRuleDO = new MonitorRuleDO();
|
||||
monitorRuleDO.setAppId("appId");
|
||||
monitorRuleDO.setName("name");
|
||||
monitorRuleDO.setCreateTime(new Date());
|
||||
monitorRuleDO.setStrategyId(1L);
|
||||
monitorRuleDO.setId(1L);
|
||||
return monitorRuleDO;
|
||||
}
|
||||
|
||||
private MonitorRuleSummary getMonitorRuleSummary() {
|
||||
MonitorRuleSummary summary = new MonitorRuleSummary();
|
||||
summary.setAppId("appId");
|
||||
summary.setAppName("appName");
|
||||
return summary;
|
||||
}
|
||||
|
||||
private AppDO getAppDO() {
|
||||
AppDO appDO = new AppDO();
|
||||
appDO.setAppId("appId");
|
||||
appDO.setName("appName");
|
||||
return appDO;
|
||||
}
|
||||
|
||||
private Strategy getStrategy() {
|
||||
Strategy strategy = new Strategy();
|
||||
strategy.setName("name");
|
||||
strategy.setStrategyActionList(new ArrayList<>());
|
||||
strategy.setStrategyExpressionList(new ArrayList<>());
|
||||
strategy.setStrategyFilterList(new ArrayList<>());
|
||||
return strategy;
|
||||
}
|
||||
|
||||
private Alert getAlert() {
|
||||
Alert alert = new Alert();
|
||||
alert.setId(1L);
|
||||
alert.setStartTime(3700L);
|
||||
alert.setEndTime(3800L);
|
||||
return alert;
|
||||
}
|
||||
|
||||
private MonitorAlertDetail getMonitorAlertDetail() {
|
||||
MonitorAlertDetail detail = new MonitorAlertDetail(null, null);
|
||||
return detail;
|
||||
}
|
||||
|
||||
private Metric getMetric() {
|
||||
Metric metric = new Metric();
|
||||
return metric;
|
||||
}
|
||||
|
||||
private MonitorSilenceDTO getMonitorSilenceDTO() {
|
||||
MonitorSilenceDTO dto = new MonitorSilenceDTO();
|
||||
dto.setId(1L);
|
||||
return dto;
|
||||
}
|
||||
|
||||
private Silence getSilence() {
|
||||
Silence silence = new Silence();
|
||||
silence.setSilenceId(1L);
|
||||
return silence;
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void createMonitorRuleTest() {
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
createMonitorRule2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
createMonitorRule2SuccessTest();
|
||||
|
||||
// MYSQL_ERROR
|
||||
createMonitorRule2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void createMonitorRule2CallMonitorSystemErrorTest() {
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(abstractMonitorService.createStrategy(Mockito.any())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.createMonitorRule(dto, "admin"), ResultStatus.CALL_MONITOR_SYSTEM_ERROR);
|
||||
}
|
||||
|
||||
private void createMonitorRule2SuccessTest() {
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(abstractMonitorService.createStrategy(Mockito.any())).thenReturn(1);
|
||||
Mockito.when(monitorRuleDao.insert(Mockito.any())).thenReturn(1);
|
||||
Assert.assertEquals(monitorService.createMonitorRule(dto, "admin"), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void createMonitorRule2MySQLErrorTest() {
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(abstractMonitorService.createStrategy(Mockito.any())).thenReturn(1);
|
||||
Mockito.when(monitorRuleDao.insert(Mockito.any())).thenReturn(-1);
|
||||
Assert.assertEquals(monitorService.createMonitorRule(dto, "admin"), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void deleteMonitorRuleTest() {
|
||||
// MONITOR_NOT_EXIST
|
||||
deleteMonitorRule2MonitorNotExistTest();
|
||||
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
deleteMonitorRule2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
deleteMonitorRule2SuccessTest();
|
||||
|
||||
// MYSQL_ERROR
|
||||
deleteMonitorRule2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void deleteMonitorRule2MonitorNotExistTest() {
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.deleteMonitorRule(1L, "admin"), ResultStatus.MONITOR_NOT_EXIST);
|
||||
}
|
||||
|
||||
private void deleteMonitorRule2CallMonitorSystemErrorTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.deleteStrategyById(Mockito.anyLong())).thenReturn(false);
|
||||
Assert.assertEquals(monitorService.deleteMonitorRule(1L, "admin"), ResultStatus.CALL_MONITOR_SYSTEM_ERROR);
|
||||
}
|
||||
|
||||
private void deleteMonitorRule2SuccessTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.deleteStrategyById(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(monitorRuleDao.deleteById(Mockito.any())).thenReturn(1);
|
||||
Assert.assertEquals(monitorService.deleteMonitorRule(1L, "admin"), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void deleteMonitorRule2MySQLErrorTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.deleteStrategyById(Mockito.anyLong())).thenReturn(true);
|
||||
Mockito.when(monitorRuleDao.deleteById(Mockito.any())).thenReturn(-1);
|
||||
Assert.assertEquals(monitorService.deleteMonitorRule(1L, "admin"), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void modifyMonitorRuleTest() {
|
||||
// MONITOR_NOT_EXIST
|
||||
modifyMonitorRule2MonitorNotExistTest();
|
||||
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
modifyMonitorRule2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
modifyMonitorRule2SuccessTest();
|
||||
|
||||
// MYSQL_ERROR
|
||||
modifyMonitorRule2MySQLErrorTest();
|
||||
}
|
||||
|
||||
private void modifyMonitorRule2MonitorNotExistTest() {
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.modifyMonitorRule(dto, "admin"), ResultStatus.MONITOR_NOT_EXIST);
|
||||
}
|
||||
|
||||
private void modifyMonitorRule2CallMonitorSystemErrorTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.modifyStrategy(Mockito.any())).thenReturn(false);
|
||||
Assert.assertEquals(monitorService.modifyMonitorRule(dto, "admin"), ResultStatus.CALL_MONITOR_SYSTEM_ERROR);
|
||||
}
|
||||
|
||||
private void modifyMonitorRule2SuccessTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.modifyStrategy(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(monitorRuleDao.updateById(Mockito.anyLong(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(1);
|
||||
Assert.assertEquals(monitorService.modifyMonitorRule(dto, "admin"), ResultStatus.SUCCESS);
|
||||
}
|
||||
|
||||
private void modifyMonitorRule2MySQLErrorTest() {
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
MonitorRuleDTO dto = getMonitorRuleDTO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.modifyStrategy(Mockito.any())).thenReturn(true);
|
||||
Mockito.when(monitorRuleDao.updateById(Mockito.anyLong(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(-1);
|
||||
Assert.assertEquals(monitorService.modifyMonitorRule(dto, "admin"), ResultStatus.MYSQL_ERROR);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getMonitorRulesTest() {
|
||||
// 返回空集合测试1
|
||||
getMonitorRules2EmptyListTest1();
|
||||
|
||||
// 返回空集合测试2
|
||||
getMonitorRules2EmptyListTest2();
|
||||
|
||||
// 成功测试
|
||||
getMonitorRules2SuccessTest();
|
||||
|
||||
}
|
||||
|
||||
private void getMonitorRules2EmptyListTest1() {
|
||||
Mockito.when(monitorRuleDao.listAll()).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(monitorService.getMonitorRules("admin").isEmpty());
|
||||
}
|
||||
|
||||
private void getMonitorRules2EmptyListTest2() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
List<MonitorRuleDO> monitorRuleDOList = new ArrayList<>(Arrays.asList(ruleDO));
|
||||
Mockito.when(monitorRuleDao.listAll()).thenReturn(monitorRuleDOList);
|
||||
Mockito.when(appDao.getByPrincipal(Mockito.anyString())).thenReturn(new ArrayList<>());
|
||||
Assert.assertTrue(monitorService.getMonitorRules("admin").isEmpty());
|
||||
}
|
||||
|
||||
private void getMonitorRules2SuccessTest() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
List<MonitorRuleDO> monitorRuleDOList = new ArrayList<>(Arrays.asList(ruleDO));
|
||||
Mockito.when(monitorRuleDao.listAll()).thenReturn(monitorRuleDOList);
|
||||
|
||||
AppDO appDO = getAppDO();
|
||||
List<AppDO> appDOList = new ArrayList<>(Arrays.asList(appDO));
|
||||
Mockito.when(appDao.getByPrincipal(Mockito.anyString())).thenReturn(appDOList);
|
||||
List<MonitorRuleSummary> result = monitorService.getMonitorRules("admin");
|
||||
Assert.assertTrue(!result.isEmpty() && result.stream().allMatch(monitorRuleSummary -> monitorRuleSummary.getAppId().equals(appDO.getAppId()) &&
|
||||
monitorRuleSummary.getAppName().equals(appDO.getName())));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getMonitorRuleDetailTest() {
|
||||
// MONITOR_NOT_EXIST
|
||||
getMonitorRuleDetail2MonitorNotExist();
|
||||
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
getMonitorRuleDetail2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
getMonitorRuleDetail2Success();
|
||||
}
|
||||
|
||||
private void getMonitorRuleDetail2MonitorNotExist() {
|
||||
Assert.assertEquals(monitorService.getMonitorRuleDetail(null).toString(), Result.buildFrom(ResultStatus.MONITOR_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
private void getMonitorRuleDetail2CallMonitorSystemErrorTest() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
Mockito.when(abstractMonitorService.getStrategyById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getMonitorRuleDetail(ruleDO).toString(), Result.buildFrom(ResultStatus.CALL_MONITOR_SYSTEM_ERROR).toString());
|
||||
}
|
||||
|
||||
private void getMonitorRuleDetail2Success() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
Strategy strategy = getStrategy();
|
||||
Mockito.when(abstractMonitorService.getStrategyById(Mockito.anyLong())).thenReturn(strategy);
|
||||
MonitorRuleDTO result = monitorService.getMonitorRuleDetail(ruleDO).getData();
|
||||
Assert.assertTrue(result.getAppId().equals(ruleDO.getAppId()) &&
|
||||
result.getName().equals(ruleDO.getName()));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getMonitorAlertHistoryTest() {
|
||||
// MONITOR_NOT_EXIST
|
||||
getMonitorAlertHistory2MonitorNotExistTest();
|
||||
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
getMonitorAlertHistory2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
getMonitorAlertHistory2SuccessTest();
|
||||
}
|
||||
|
||||
private void getMonitorAlertHistory2MonitorNotExistTest() {
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getMonitorAlertHistory(1L, 1L, 1L).toString(), Result.buildFrom(ResultStatus.MONITOR_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
private void getMonitorAlertHistory2CallMonitorSystemErrorTest() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(ruleDO);
|
||||
Mockito.when(abstractMonitorService.getAlerts(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getMonitorAlertHistory(1L, 1L, 1L).toString(), Result.buildFrom(ResultStatus.CALL_MONITOR_SYSTEM_ERROR).toString());
|
||||
}
|
||||
|
||||
private void getMonitorAlertHistory2SuccessTest() {
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.anyLong())).thenReturn(ruleDO);
|
||||
Alert alert = getAlert();
|
||||
List<Alert> alertList = new ArrayList<>(Arrays.asList(alert));
|
||||
Mockito.when(abstractMonitorService.getAlerts(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(alertList);
|
||||
List<Alert> result = monitorService.getMonitorAlertHistory(1L, 1L, 1L).getData();
|
||||
Assert.assertTrue(!result.isEmpty() && result.stream().allMatch(alert1 -> alert1.getId().equals(alert.getId())));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getMonitorAlertDetailTest() {
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
getMonitorAlertDetail2CallMonitorSystemErrorTest();
|
||||
|
||||
// MONITOR_NOT_EXIST
|
||||
getMonitorAlertDetail2MonitorNotExistTest();
|
||||
|
||||
// 成功测试
|
||||
getMonitorAlertDetail2SuccessTest();
|
||||
}
|
||||
|
||||
private void getMonitorAlertDetail2CallMonitorSystemErrorTest() {
|
||||
Mockito.when(abstractMonitorService.getAlertById(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getMonitorAlertDetail(1L).toString(), Result.buildFrom(ResultStatus.CALL_MONITOR_SYSTEM_ERROR).toString());
|
||||
}
|
||||
|
||||
private void getMonitorAlertDetail2MonitorNotExistTest() {
|
||||
Alert alert = getAlert();
|
||||
Mockito.when(abstractMonitorService.getAlertById(Mockito.anyLong())).thenReturn(alert);
|
||||
Mockito.when(monitorRuleDao.getByStrategyId(Mockito.anyLong())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getMonitorAlertDetail(1L).toString(), Result.buildFrom(ResultStatus.MONITOR_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
private void getMonitorAlertDetail2SuccessTest() {
|
||||
Alert alert = getAlert();
|
||||
Mockito.when(abstractMonitorService.getAlertById(Mockito.anyLong())).thenReturn(alert);
|
||||
MonitorRuleDO ruleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getByStrategyId(Mockito.any())).thenReturn(ruleDO);
|
||||
Metric metric = getMetric();
|
||||
Mockito.when(abstractMonitorService.getMetrics(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(metric);
|
||||
MonitorAlertDetail data = monitorService.getMonitorAlertDetail(1L).getData();
|
||||
MonitorAlertDetail detail = getMonitorAlertDetail();
|
||||
detail.setAlert(alert);
|
||||
detail.setMetric(metric);
|
||||
|
||||
Assert.assertEquals(data.toString(), detail.toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createSilenceTest() {
|
||||
// MONITOR_NOT_EXIST
|
||||
createSilence2MonitorNotExistTest();
|
||||
|
||||
// 未实现测试
|
||||
createSilence2EmptyTest();
|
||||
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
createSilence2CallMonitorSystemErrorTest();
|
||||
}
|
||||
|
||||
private void createSilence2MonitorNotExistTest() {
|
||||
MonitorSilenceDTO monitorSilenceDTO = getMonitorSilenceDTO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.any())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.createSilence(monitorSilenceDTO, "admin").toString(), Result.buildFrom(ResultStatus.MONITOR_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
private void createSilence2EmptyTest() {
|
||||
MonitorSilenceDTO monitorSilenceDTO = getMonitorSilenceDTO();
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.any())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.createSilence(Mockito.any())).thenReturn(true);
|
||||
Assert.assertNull(monitorService.createSilence(monitorSilenceDTO, "admin").getData());
|
||||
}
|
||||
|
||||
private void createSilence2CallMonitorSystemErrorTest() {
|
||||
MonitorSilenceDTO monitorSilenceDTO = getMonitorSilenceDTO();
|
||||
MonitorRuleDO monitorRuleDO = getMonitorRuleDO();
|
||||
Mockito.when(monitorRuleDao.getById(Mockito.any())).thenReturn(monitorRuleDO);
|
||||
Mockito.when(abstractMonitorService.createSilence(Mockito.any())).thenReturn(false);
|
||||
Assert.assertEquals(monitorService.createSilence(monitorSilenceDTO, "admin").toString(), Result.buildFrom(ResultStatus.CALL_MONITOR_SYSTEM_ERROR).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getSilencesTest() {
|
||||
// CALL_MONITOR_SYSTEM_ERROR
|
||||
getSilence2CallMonitorSystemErrorTest();
|
||||
|
||||
// 成功测试
|
||||
getSilence2SuccessTest();
|
||||
}
|
||||
|
||||
private void getSilence2CallMonitorSystemErrorTest() {
|
||||
Mockito.when(abstractMonitorService.getSilences(Mockito.any())).thenReturn(null);
|
||||
Assert.assertEquals(monitorService.getSilences(1L).toString(), Result.buildFrom(ResultStatus.CALL_MONITOR_SYSTEM_ERROR).toString());
|
||||
}
|
||||
|
||||
private void getSilence2SuccessTest() {
|
||||
Silence silence = getSilence();
|
||||
List<Silence> silenceList = new ArrayList<>(Arrays.asList(silence));
|
||||
Mockito.when(abstractMonitorService.getSilences(Mockito.any())).thenReturn(silenceList);
|
||||
List<Silence> data = monitorService.getSilences(1L).getData();
|
||||
Assert.assertTrue(!data.isEmpty() && data.stream().allMatch(silence1 -> silence1.getSilenceId().equals(silence.getSilenceId())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ spring:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://localhost:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
@@ -48,5 +48,23 @@
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>${spring-version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- testng -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
|
||||
<dependency>
|
||||
<groupId>org.testng</groupId>
|
||||
<artifactId>testng</artifactId>
|
||||
<version>6.9.10</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,148 @@
|
||||
package com.xiaojukeji.kafka.manager.openapi;
|
||||
|
||||
import com.xiaojukeji.kafka.manager.common.bizenum.ConsumeHealthEnum;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.Result;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.ao.PartitionOffsetDTO;
|
||||
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterDO;
|
||||
import com.xiaojukeji.kafka.manager.openapi.common.dto.OffsetResetDTO;
|
||||
import com.xiaojukeji.kafka.manager.openapi.config.BaseTest;
|
||||
import com.xiaojukeji.kafka.manager.service.service.ConsumerService;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wyc
|
||||
* @date 2022/1/6
|
||||
*/
|
||||
public class ThirdPartServiceTest extends BaseTest {
|
||||
|
||||
private final static Long REAL_CLUSTER_ID_IN_MYSQL = 1L;
|
||||
|
||||
private final static String REAL_TOPIC_IN_ZK = "topic_a";
|
||||
|
||||
private final static String REAL_PHYSICAL_CLUSTER_NAME = "cluster1";
|
||||
|
||||
private final static String ZOOKEEPER = "10.190.12.242:2181,10.190.25.160:2181,10.190.25.41:2181/wyc";
|
||||
|
||||
private final static String BOOTSTRAP_SERVERS = "10.190.12.242:9093,10.190.25.160:9093,10.190.25.41:9093";
|
||||
|
||||
private final static String SECURITY_PROPERTIES = "{ \t\"security.protocol\": \"SASL_PLAINTEXT\", \t\"sasl.mechanism\": \"PLAIN\", \t\"sasl.jaas.config\": \"org.apache.kafka.common.security.plain.PlainLoginModule required username=\\\"dkm_admin\\\" password=\\\"km_kMl4N8as1Kp0CCY\\\";\" }";
|
||||
|
||||
private final static String JMX_PROPERTIES = "{\n" + "\t\"maxConn\": 100000\n" + "}";
|
||||
private final static Integer STATUS = 1;
|
||||
|
||||
private final static String REAL_APP_ID = "dkm_admin";
|
||||
|
||||
// 要求消费topic_a这个topic的消费者所属的消费者组是group.demo
|
||||
private final static String REAL_CONSUMER_GROUP_ID = "group.demo";
|
||||
|
||||
@Autowired
|
||||
@InjectMocks
|
||||
private ThirdPartService thirdPartService;
|
||||
|
||||
@Mock
|
||||
private ConsumerService consumerService;
|
||||
|
||||
@BeforeMethod
|
||||
public void init() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
}
|
||||
|
||||
|
||||
private ClusterDO getClusterDO() {
|
||||
ClusterDO clusterDO = new ClusterDO();
|
||||
clusterDO.setId(REAL_CLUSTER_ID_IN_MYSQL);
|
||||
clusterDO.setClusterName(REAL_PHYSICAL_CLUSTER_NAME);
|
||||
clusterDO.setBootstrapServers(BOOTSTRAP_SERVERS);
|
||||
clusterDO.setJmxProperties(JMX_PROPERTIES);
|
||||
clusterDO.setSecurityProperties(SECURITY_PROPERTIES);
|
||||
clusterDO.setStatus(STATUS);
|
||||
clusterDO.setZookeeper(ZOOKEEPER);
|
||||
return clusterDO;
|
||||
}
|
||||
|
||||
private PartitionOffsetDTO getPartitionOffsetDTO() {
|
||||
PartitionOffsetDTO dto = new PartitionOffsetDTO();
|
||||
dto.setPartitionId(0);
|
||||
dto.setTimestamp(0L);
|
||||
dto.setOffset(0L);
|
||||
return dto;
|
||||
}
|
||||
|
||||
private OffsetResetDTO getOffsetResetDTO() {
|
||||
OffsetResetDTO dto = new OffsetResetDTO();
|
||||
dto.setAppId(REAL_APP_ID);
|
||||
dto.setClusterId(REAL_CLUSTER_ID_IN_MYSQL);
|
||||
dto.setConsumerGroup(REAL_CONSUMER_GROUP_ID);
|
||||
dto.setTopicName(REAL_TOPIC_IN_ZK);
|
||||
dto.setTimestamp(0L);
|
||||
dto.setPartitionOffsetDTOList(new ArrayList<>(Arrays.asList(getPartitionOffsetDTO())));
|
||||
dto.setLocation("broker");
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Test(description = "CLUSTER_NOT_EXIST")
|
||||
public void checkConsumeHealth2ClusterNotExistTest() {
|
||||
// maxDelayTime = 24h,也就是如果消费组当前的offset介于24小时前这一时间戳对应的offset之后,则认为消费者是健康的
|
||||
Assert.assertEquals(thirdPartService.checkConsumeHealth(-1L, REAL_TOPIC_IN_ZK, REAL_CONSUMER_GROUP_ID, 60 * 60 * 24 * 1000L).toString(), Result.buildFrom(ResultStatus.CLUSTER_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
@Test(description = "TOPIC_NOT_EXIST")
|
||||
public void checkConsumeHealth2TopicNotExistTest() {
|
||||
Assert.assertEquals(thirdPartService.checkConsumeHealth(1L, "topic_not_exist", REAL_CONSUMER_GROUP_ID, 60 * 60 * 24 * 1000L).toString(), Result.buildFrom(ResultStatus.TOPIC_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
@Test(description = "CONSUMER_GROUP_NOT_EXIST")
|
||||
public void checkConsumeHealth2ConsumerGroupNotExistTest() {
|
||||
Assert.assertEquals(thirdPartService.checkConsumeHealth(REAL_CLUSTER_ID_IN_MYSQL, REAL_TOPIC_IN_ZK, "group_not_exist", 60 * 60 * 24 * 1000L).toString(), Result.buildFrom(ResultStatus.CONSUMER_GROUP_NOT_EXIST).toString());
|
||||
}
|
||||
|
||||
@Test(description = "HEALTH")
|
||||
public void checkConsumeHealth2HealthTest() {
|
||||
// 要求生产者向topic_a发送消息,消费者的group.id=group.demo,生产者生产消息,消费者消费,之后让消费者停止,下面测试才能通过
|
||||
Assert.assertEquals(thirdPartService.checkConsumeHealth(REAL_CLUSTER_ID_IN_MYSQL, REAL_TOPIC_IN_ZK, REAL_CONSUMER_GROUP_ID, 60 * 60 * 24 * 1000L).toString(), new Result<>(ConsumeHealthEnum.HEALTH).toString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void resetOffsetsTest() {
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
OffsetResetDTO offsetResetDTO = getOffsetResetDTO();
|
||||
Mockito.when(consumerService.checkConsumerGroupExist(Mockito.any(), Mockito.any(), Mockito.anyString(),Mockito.anyString())).thenReturn(true);
|
||||
List<Result> results = thirdPartService.resetOffsets(clusterDO, offsetResetDTO);
|
||||
System.out.println(results);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resetOffset2NullTest1() {
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
Assert.assertNull(thirdPartService.resetOffsets(clusterDO, null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resetOffsetSuccessTest() {
|
||||
// 要求有消费组group.demo
|
||||
Result expectedResult = Result.buildSuc();
|
||||
ClusterDO clusterDO = getClusterDO();
|
||||
OffsetResetDTO offsetResetDTO = getOffsetResetDTO();
|
||||
Mockito.when(consumerService.checkConsumerGroupExist(Mockito.any(), Mockito.any(), Mockito.anyString(),Mockito.anyString())).thenReturn(true);
|
||||
Mockito.when(consumerService.resetConsumerOffset(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(new ArrayList<>(Arrays.asList(Result.buildSuc())));
|
||||
|
||||
List<Result> results = thirdPartService.resetOffsets(clusterDO, offsetResetDTO);
|
||||
Assert.assertTrue(!results.isEmpty() && results.stream().allMatch(result -> result.toString().equals(expectedResult.toString())));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.xiaojukeji.kafka.manager.openapi.config;
|
||||
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
|
||||
|
||||
@SpringBootTest(classes = CoreSpringBootStartUp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||
@ContextConfiguration(classes = CoreSpringBootStartUp.class)
|
||||
public class BaseTest extends AbstractTransactionalTestNGSpringContextTests {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.xiaojukeji.kafka.manager.openapi.config;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.web.servlet.ServletComponentScan;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@EnableAsync
|
||||
@EnableScheduling
|
||||
@ServletComponentScan
|
||||
@EnableAutoConfiguration
|
||||
@SpringBootApplication(scanBasePackages = {"com.xiaojukeji.kafka.manager"})
|
||||
public class CoreSpringBootStartUp {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication sa = new SpringApplication(CoreSpringBootStartUp.class);
|
||||
sa.run(args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.xiaojukeji.kafka.manager.openapi.config;
|
||||
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.mybatis.spring.SqlSessionFactoryBean;
|
||||
import org.mybatis.spring.SqlSessionTemplate;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* @author zengqiao
|
||||
* @date 20/3/17
|
||||
*/
|
||||
@Configuration
|
||||
public class DataSourceConfig {
|
||||
@Bean(name = "dataSource")
|
||||
@ConfigurationProperties(prefix = "spring.datasource.kafka-manager")
|
||||
@Primary
|
||||
public DataSource dataSource() {
|
||||
return DataSourceBuilder.create().build();
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSessionFactory")
|
||||
@Primary
|
||||
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
|
||||
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
|
||||
bean.setDataSource(dataSource);
|
||||
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
|
||||
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml"));
|
||||
return bean.getObject();
|
||||
}
|
||||
|
||||
@Bean(name = "transactionManager")
|
||||
@Primary
|
||||
public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
}
|
||||
|
||||
@Bean(name = "sqlSession")
|
||||
@Primary
|
||||
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
|
||||
return new SqlSessionTemplate(sqlSessionFactory);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
server:
|
||||
port: 8080
|
||||
tomcat:
|
||||
accept-count: 1000
|
||||
max-connections: 10000
|
||||
max-threads: 800
|
||||
min-spare-threads: 100
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: kafkamanager
|
||||
profiles:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 100MB
|
||||
max-request-size: 100MB
|
||||
|
||||
logging:
|
||||
config: classpath:logback-spring.xml
|
||||
|
||||
custom:
|
||||
idc: cn
|
||||
jmx:
|
||||
max-conn: 10 # 2.3版本配置不在这个地方生效
|
||||
store-metrics-task:
|
||||
community:
|
||||
broker-metrics-enabled: true
|
||||
topic-metrics-enabled: true
|
||||
didi:
|
||||
app-topic-metrics-enabled: false
|
||||
topic-request-time-metrics-enabled: false
|
||||
topic-throttled-metrics: false
|
||||
save-days: 7
|
||||
|
||||
# 任务相关的开关
|
||||
task:
|
||||
op:
|
||||
sync-topic-enabled: false # 未落盘的Topic定期同步到DB中
|
||||
order-auto-exec: # 工单自动化审批线程的开关
|
||||
topic-enabled: false # Topic工单自动化审批开关, false:关闭自动化审批, true:开启
|
||||
app-enabled: false # App工单自动化审批开关, false:关闭自动化审批, true:开启
|
||||
|
||||
account:
|
||||
ldap:
|
||||
enabled: false
|
||||
url: ldap://127.0.0.1:389/
|
||||
basedn: dc=tsign,dc=cn
|
||||
factory: com.sun.jndi.ldap.LdapCtxFactory
|
||||
filter: sAMAccountName
|
||||
security:
|
||||
authentication: simple
|
||||
principal: cn=admin,dc=tsign,dc=cn
|
||||
credentials: admin
|
||||
auth-user-registration: true
|
||||
auth-user-registration-role: normal
|
||||
|
||||
kcm:
|
||||
enabled: false
|
||||
s3:
|
||||
endpoint: s3.didiyunapi.com
|
||||
access-key: 1234567890
|
||||
secret-key: 0987654321
|
||||
bucket: logi-kafka
|
||||
n9e:
|
||||
base-url: http://127.0.0.1:8004
|
||||
user-token: 12345678
|
||||
timeout: 300
|
||||
account: root
|
||||
script-file: kcm_script.sh
|
||||
|
||||
monitor:
|
||||
enabled: false
|
||||
n9e:
|
||||
nid: 2
|
||||
user-token: 1234567890
|
||||
mon:
|
||||
base-url: http://127.0.0.1:8000 # 夜莺v4版本,默认端口统一调整为了8000
|
||||
sink:
|
||||
base-url: http://127.0.0.1:8000 # 夜莺v4版本,默认端口统一调整为了8000
|
||||
rdb:
|
||||
base-url: http://127.0.0.1:8000 # 夜莺v4版本,默认端口统一调整为了8000
|
||||
|
||||
notify:
|
||||
kafka:
|
||||
cluster-id: 95
|
||||
topic-name: didi-kafka-notify
|
||||
order:
|
||||
detail-url: http://127.0.0.1
|
||||
@@ -0,0 +1,63 @@
|
||||
<assembly>
|
||||
<id>assembly</id>
|
||||
<formats>
|
||||
<format>tar</format>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<fileSets>
|
||||
<fileSet>
|
||||
<directory>src/main/resources/bin</directory>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
<includes>
|
||||
<include>control.sh</include>
|
||||
<include>start.bat</include>
|
||||
</includes>
|
||||
<fileMode>0755</fileMode>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>src/main/resources</directory>
|
||||
<outputDirectory>config</outputDirectory>
|
||||
<includes>
|
||||
<include>*.properties</include>
|
||||
<include>*.xml</include>
|
||||
<include>*.yml</include>
|
||||
<include>env/dev/*</include>
|
||||
<include>env/qa/*</include>
|
||||
<include>env/uat/*</include>
|
||||
<include>env/prod/*</include>
|
||||
</includes>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>target</directory>
|
||||
<outputDirectory>lib</outputDirectory>
|
||||
<includes>
|
||||
<!--
|
||||
<include>*release*.jar</include>
|
||||
-->
|
||||
<include>kafka-manager-web*.jar</include>
|
||||
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>*sources.jar</exclude>
|
||||
</excludes>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>src/main/resources</directory>
|
||||
<outputDirectory>logs</outputDirectory>
|
||||
<fileMode>0755</fileMode>
|
||||
<excludes>
|
||||
<exclude>**/*</exclude>
|
||||
</excludes>
|
||||
</fileSet>
|
||||
<!-- <fileSet>
|
||||
<directory>${project.build.directory}/asciidoc</directory>
|
||||
<outputDirectory>docs</outputDirectory>
|
||||
<includes>
|
||||
<include>md/*</include>
|
||||
<include>html/*</include>
|
||||
<include>pdf/*</include>
|
||||
</includes>
|
||||
<fileMode>0755</fileMode>
|
||||
</fileSet>-->
|
||||
</fileSets>
|
||||
</assembly>
|
||||
@@ -0,0 +1,215 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
<contextName>logback</contextName>
|
||||
<property name="log.path" value="./logs" />
|
||||
|
||||
<!-- 彩色日志 -->
|
||||
<!-- 彩色日志依赖的渲染类 -->
|
||||
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
|
||||
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
|
||||
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
|
||||
<!-- 彩色日志格式 -->
|
||||
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
|
||||
|
||||
<!--输出到控制台-->
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>info</level>
|
||||
</filter>
|
||||
<encoder>
|
||||
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
|
||||
<!--输出到文件-->
|
||||
|
||||
<!-- 时间滚动输出 level为 DEBUG 日志 -->
|
||||
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/log_debug.log</file>
|
||||
<!--日志文件输出格式-->
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset> <!-- 设置字符集 -->
|
||||
</encoder>
|
||||
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 日志归档 -->
|
||||
<fileNamePattern>${log.path}/log_debug_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<!-- 此日志文件只记录debug级别的 -->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>debug</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 时间滚动输出 level为 INFO 日志 -->
|
||||
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<!-- 正在记录的日志文件的路径及文件名 -->
|
||||
<file>${log.path}/log_info.log</file>
|
||||
<!--日志文件输出格式-->
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 每天日志归档路径以及格式 -->
|
||||
<fileNamePattern>${log.path}/log_info_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<!-- 此日志文件只记录info级别的 -->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>info</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 时间滚动输出 level为 WARN 日志 -->
|
||||
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<!-- 正在记录的日志文件的路径及文件名 -->
|
||||
<file>${log.path}/log_warn.log</file>
|
||||
<!--日志文件输出格式-->
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
|
||||
</encoder>
|
||||
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/log_warn_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<!-- 此日志文件只记录warn级别的 -->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>warn</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
|
||||
<!-- 时间滚动输出 level为 ERROR 日志 -->
|
||||
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<!-- 正在记录的日志文件的路径及文件名 -->
|
||||
<file>${log.path}/log_error.log</file>
|
||||
<!--日志文件输出格式-->
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
|
||||
</encoder>
|
||||
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/log_error_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<!--日志文件保留天数-->
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<!-- 此日志文件只记录ERROR级别的 -->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- Metrics信息收集日志 -->
|
||||
<appender name="COLLECTOR_METRICS_LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/metrics/collector_metrics.log</file>
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/metrics/collector_metrics_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<maxHistory>3</maxHistory>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<!-- Metrics信息收集日志 -->
|
||||
<appender name="API_METRICS_LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/metrics/api_metrics.log</file>
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/metrics/api_metrics_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<maxHistory>3</maxHistory>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<!-- Metrics信息收集日志 -->
|
||||
<appender name="SCHEDULED_TASK_LOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/metrics/scheduled_tasks.log</file>
|
||||
<encoder>
|
||||
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${log.path}/metrics/scheduled_tasks_%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
||||
<maxFileSize>100MB</maxFileSize>
|
||||
</timeBasedFileNamingAndTriggeringPolicy>
|
||||
<maxHistory>5</maxHistory>
|
||||
</rollingPolicy>
|
||||
</appender>
|
||||
|
||||
<logger name="COLLECTOR_METRICS_LOGGER" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="COLLECTOR_METRICS_LOGGER"/>
|
||||
</logger>
|
||||
<logger name="API_METRICS_LOGGER" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="API_METRICS_LOGGER"/>
|
||||
</logger>
|
||||
<logger name="SCHEDULED_TASK_LOGGER" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="SCHEDULED_TASK_LOGGER"/>
|
||||
</logger>
|
||||
|
||||
<logger name="org.apache.ibatis" level="INFO" additivity="false" />
|
||||
<logger name="org.mybatis.spring" level="INFO" additivity="false" />
|
||||
<logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false" />
|
||||
|
||||
<root level="info">
|
||||
<appender-ref ref="CONSOLE" />
|
||||
<appender-ref ref="DEBUG_FILE" />
|
||||
<appender-ref ref="INFO_FILE" />
|
||||
<appender-ref ref="WARN_FILE" />
|
||||
<appender-ref ref="ERROR_FILE" />
|
||||
<!--<appender-ref ref="METRICS_LOG" />-->
|
||||
</root>
|
||||
|
||||
<!--生产环境:输出到文件-->
|
||||
<!--<springProfile name="pro">-->
|
||||
<!--<root level="info">-->
|
||||
<!--<appender-ref ref="CONSOLE" />-->
|
||||
<!--<appender-ref ref="DEBUG_FILE" />-->
|
||||
<!--<appender-ref ref="INFO_FILE" />-->
|
||||
<!--<appender-ref ref="ERROR_FILE" />-->
|
||||
<!--<appender-ref ref="WARN_FILE" />-->
|
||||
<!--</root>-->
|
||||
<!--</springProfile>-->
|
||||
</configuration>
|
||||
@@ -13,9 +13,9 @@ spring:
|
||||
active: dev
|
||||
datasource:
|
||||
kafka-manager:
|
||||
jdbc-url: jdbc:mysql://localhost:3306/logi_kafka_manager?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
jdbc-url: jdbc:mysql://10.190.7.220:3306/user_test?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||
username: root
|
||||
password: 123456
|
||||
password: 2PHCnL6RRM
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
|
||||
Reference in New Issue
Block a user