单元测试:ClusterHostTaskServiceTest,ClusterRoleTaskServiceTest,ClusterTaskServiceTest,KafkaFileServiceTest,TopicCommandsTest,TopicReassignUtilsTest

This commit is contained in:
xuguang
2022-01-06 20:00:25 +08:00
parent 86c1faa40f
commit 37aa526404
10 changed files with 1589 additions and 12 deletions

View File

@@ -0,0 +1,80 @@
package com.xiaojukeji.kafka.manager.kcm;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.kcm.common.entry.ao.CreationTaskData;
import com.xiaojukeji.kafka.manager.kcm.common.entry.dto.ClusterHostTaskDTO;
import com.xiaojukeji.kafka.manager.kcm.config.BaseTest;
import com.xiaojukeji.kafka.manager.kcm.tasks.ClusterHostTaskService;
import org.junit.Assert;
import org.mockito.InjectMocks;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.util.Arrays;
/**
* @author xuguang
* @Date 2022/1/5
*/
public class ClusterHostTaskServiceTest extends BaseTest {
@Autowired
@InjectMocks
private ClusterHostTaskService clusterHostTaskService;
private ClusterHostTaskDTO getClusterHostTaskDTO() {
ClusterHostTaskDTO clusterHostTaskDTO = new ClusterHostTaskDTO();
clusterHostTaskDTO.setClusterId(-1L);
clusterHostTaskDTO.setHostList(Arrays.asList("127.0.0.1"));
clusterHostTaskDTO.setTaskType("");
clusterHostTaskDTO.setKafkaFileBaseUrl("");
clusterHostTaskDTO.setKafkaPackageMd5("");
clusterHostTaskDTO.setKafkaPackageName("");
clusterHostTaskDTO.setServerPropertiesMd5("");
clusterHostTaskDTO.setServerPropertiesName("");
return clusterHostTaskDTO;
}
@Test
public void getOperationHostsTest() {
// cluster task host list illegal
getOperationHosts2HostListIllegalTest();
// success
getOperationHosts2SuccessTest();
}
private void getOperationHosts2HostListIllegalTest() {
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
clusterHostTaskDTO.setHostList(Arrays.asList(""));
Result<CreationTaskData> result = clusterHostTaskService.getOperationHosts(clusterHostTaskDTO);
Assert.assertEquals(result.getCode(), ResultStatus.CLUSTER_TASK_HOST_LIST_ILLEGAL.getCode());
}
private void getOperationHosts2SuccessTest() {
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
Result<CreationTaskData> result = clusterHostTaskService.getOperationHosts(clusterHostTaskDTO);
Assert.assertEquals(result.getCode(), ResultStatus.SUCCESS.getCode());
}
@Test
public void getCreateTaskParamDTOTest() {
// not success
getCreateTaskParamDTO2NotSuccessTest();
// success
getCreateTaskParamDTO2SuccessTest();
}
private void getCreateTaskParamDTO2NotSuccessTest() {
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
clusterHostTaskDTO.setHostList(Arrays.asList(""));
Result<CreationTaskData> dto = clusterHostTaskService.getCreateTaskParamDTO(clusterHostTaskDTO);
Assert.assertEquals(dto.getCode(), ResultStatus.CLUSTER_TASK_HOST_LIST_ILLEGAL.getCode());
}
private void getCreateTaskParamDTO2SuccessTest() {
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
Result<CreationTaskData> dto = clusterHostTaskService.getCreateTaskParamDTO(clusterHostTaskDTO);
Assert.assertEquals(dto.getCode(), ResultStatus.SUCCESS.getCode());
}
}

View File

@@ -0,0 +1,74 @@
package com.xiaojukeji.kafka.manager.kcm;
import com.xiaojukeji.kafka.manager.common.bizenum.KafkaBrokerRoleEnum;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.kcm.common.entry.ao.CreationTaskData;
import com.xiaojukeji.kafka.manager.kcm.common.entry.dto.ClusterRoleTaskDTO;
import com.xiaojukeji.kafka.manager.kcm.config.BaseTest;
import com.xiaojukeji.kafka.manager.kcm.tasks.ClusterRoleTaskService;
import org.junit.Assert;
import org.mockito.InjectMocks;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.Test;
import java.util.*;
/**
* @author xuguang
* @Date 2022/1/5
*/
public class ClusterRoleTaskServiceTest extends BaseTest {
@Autowired
@InjectMocks
private ClusterRoleTaskService clusterRoleTaskService;
private ClusterRoleTaskDTO getClusterRoleTaskDTO() {
ClusterRoleTaskDTO clusterRoleTaskDTO = new ClusterRoleTaskDTO();
clusterRoleTaskDTO.setClusterId(-1L);
clusterRoleTaskDTO.setTaskType("");
return clusterRoleTaskDTO;
}
@Test
public void getOperationHostsTest() {
// controller not alive
getOperationHosts2ControllerNotAliveTest();
// success
getOperationHosts2SuccessTest();
}
private void getOperationHosts2ControllerNotAliveTest() {
ClusterRoleTaskDTO dto = getClusterRoleTaskDTO();
List<String> upgradeSequenceList = new ArrayList<>();
upgradeSequenceList.add(KafkaBrokerRoleEnum.CONTROLLER.getRole());
dto.setUpgradeSequenceList(upgradeSequenceList);
dto.setKafkaRoleBrokerHostMap(new HashMap<>(0));
Result<CreationTaskData> result = clusterRoleTaskService.getOperationHosts(dto);
Assert.assertEquals(result.getCode(), ResultStatus.CONTROLLER_NOT_ALIVE.getCode());
}
private void getOperationHosts2SuccessTest() {
ClusterRoleTaskDTO dto = getClusterRoleTaskDTO();
List<String> upgradeSequenceList = new ArrayList<>();
upgradeSequenceList.add(KafkaBrokerRoleEnum.CONTROLLER.getRole());
upgradeSequenceList.add(KafkaBrokerRoleEnum.NORMAL.getRole());
upgradeSequenceList.add(KafkaBrokerRoleEnum.COORDINATOR.getRole());
dto.setUpgradeSequenceList(upgradeSequenceList);
Map<String, List<String>> map = new HashMap<>();
List<String> controllerList = new ArrayList<>();
controllerList.add("127.0.0.1");
controllerList.add("localhost");
List<String> coordinatorList = new ArrayList<>();
coordinatorList.add("127.0.0.1");
coordinatorList.add("localhost");
map.put(KafkaBrokerRoleEnum.CONTROLLER.getRole(), controllerList);
map.put(KafkaBrokerRoleEnum.COORDINATOR.getRole(), coordinatorList);
dto.setKafkaRoleBrokerHostMap(map);
Result<CreationTaskData> result = clusterRoleTaskService.getOperationHosts(dto);
Assert.assertEquals(result.getCode(), ResultStatus.SUCCESS.getCode());
}
}

View File

@@ -1,8 +1,354 @@
package com.xiaojukeji.kafka.manager.kcm;
import com.xiaojukeji.kafka.manager.common.entity.Result;
import com.xiaojukeji.kafka.manager.common.entity.ResultStatus;
import com.xiaojukeji.kafka.manager.common.entity.pojo.ClusterTaskDO;
import com.xiaojukeji.kafka.manager.dao.ClusterTaskDao;
import com.xiaojukeji.kafka.manager.kcm.common.bizenum.ClusterTaskActionEnum;
import com.xiaojukeji.kafka.manager.kcm.common.bizenum.ClusterTaskStateEnum;
import com.xiaojukeji.kafka.manager.kcm.common.bizenum.ClusterTaskTypeEnum;
import com.xiaojukeji.kafka.manager.kcm.common.entry.ao.ClusterTaskLog;
import com.xiaojukeji.kafka.manager.kcm.common.entry.ao.ClusterTaskStatus;
import com.xiaojukeji.kafka.manager.kcm.common.entry.dto.AbstractClusterTaskDTO;
import com.xiaojukeji.kafka.manager.kcm.common.entry.dto.ClusterHostTaskDTO;
import com.xiaojukeji.kafka.manager.kcm.component.agent.AbstractAgent;
import com.xiaojukeji.kafka.manager.kcm.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.Arrays;
/**
* @author xuguang
* @Date 2021/12/27
*/
public class ClusterTaskServiceTest {
public class ClusterTaskServiceTest extends BaseTest {
private static final Long REAL_CLUSTER_ID_IN_MYSQL = 1L;
private static final String ADMIN = "admin";
private static final String BASEURL = "127.0.0.1";
private static final String MD5 = "md5";
private static final Long REAL_TASK_ID_IN_MYSQL = 1L;
private static final Long INVALID_TASK_ID = -1L;
@Autowired
@InjectMocks
private ClusterTaskService clusterTaskService;
@Mock
private AbstractAgent abstractAgent;
@Mock
private ClusterTaskDao clusterTaskDao;
private ClusterHostTaskDTO getClusterHostTaskDTO() {
ClusterHostTaskDTO clusterHostTaskDTO = new ClusterHostTaskDTO();
clusterHostTaskDTO.setClusterId(-1L);
clusterHostTaskDTO.setHostList(Arrays.asList(BASEURL));
clusterHostTaskDTO.setTaskType(ClusterTaskTypeEnum.HOST_UPGRADE.getName());
clusterHostTaskDTO.setKafkaFileBaseUrl(BASEURL);
clusterHostTaskDTO.setKafkaPackageMd5(MD5);
clusterHostTaskDTO.setKafkaPackageName("name");
clusterHostTaskDTO.setServerPropertiesMd5(MD5);
clusterHostTaskDTO.setServerPropertiesName("name");
return clusterHostTaskDTO;
}
private ClusterTaskDO getClusterTaskDO() {
ClusterTaskDO clusterTaskDO = new ClusterTaskDO();
clusterTaskDO.setClusterId(REAL_CLUSTER_ID_IN_MYSQL);
clusterTaskDO.setId(REAL_TASK_ID_IN_MYSQL);
clusterTaskDO.setAgentTaskId(-1L);
clusterTaskDO.setAgentRollbackTaskId(-1L);
clusterTaskDO.setTaskStatus(0);
return clusterTaskDO;
}
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test(description = "测试创建任务")
public void createTaskTest() {
// paramIllegal
createTask2ParamIllegalTest();
// not success
createTask2NotSuccessTest();
// CallClusterTaskAgentFailed
createTask2CallClusterTaskAgentFailedTest();
// success
createTask2SuccessTest();
// mysqlError
createTask2MysqlErrorTest();
}
private void createTask2ParamIllegalTest() {
AbstractClusterTaskDTO dto = getClusterHostTaskDTO();
dto.setTaskType(null);
Result result1 = clusterTaskService.createTask(dto, ADMIN);
Assert.assertEquals(result1.getCode(), ResultStatus.PARAM_ILLEGAL.getCode());
dto.setTaskType("");
Result result2 = clusterTaskService.createTask(dto, ADMIN);
Assert.assertEquals(result2.getCode(), ResultStatus.PARAM_ILLEGAL.getCode());
}
private void createTask2NotSuccessTest() {
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
clusterHostTaskDTO.setHostList(Arrays.asList("host"));
Result result = clusterTaskService.createTask(clusterHostTaskDTO, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.CLUSTER_TASK_HOST_LIST_ILLEGAL.getCode());
}
private void createTask2CallClusterTaskAgentFailedTest() {
Mockito.when(abstractAgent.createTask(Mockito.any())).thenReturn(null);
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
Result result = clusterTaskService.createTask(clusterHostTaskDTO, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.CALL_CLUSTER_TASK_AGENT_FAILED.getCode());
}
private void createTask2SuccessTest() {
Mockito.when(abstractAgent.createTask(Mockito.any())).thenReturn(Result.buildSuc(1L));
Mockito.when(clusterTaskDao.insert(Mockito.any())).thenReturn(1);
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
Result result = clusterTaskService.createTask(clusterHostTaskDTO, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.SUCCESS.getCode());
}
private void createTask2MysqlErrorTest() {
Mockito.when(abstractAgent.createTask(Mockito.any())).thenReturn(Result.buildSuc(1L));
Mockito.when(clusterTaskDao.insert(Mockito.any())).thenThrow(RuntimeException.class);
ClusterHostTaskDTO clusterHostTaskDTO = getClusterHostTaskDTO();
Result result = clusterTaskService.createTask(clusterHostTaskDTO, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.MYSQL_ERROR.getCode());
}
@Test
public void executeTaskTest() {
// task not exist
executeTask2TaskNotExistTest();
// CallClusterTaskAgentFailed
executeTask2CallClusterTaskAgentFailedTest();
// 暂停状态, 可以执行开始
executeTask2StartTest();
// 运行状态, 可以执行暂停
executeTask2PauseTest();
// 忽略
executeTask2IgnoreTest();
// 取消
executeTask2CancelTest();
// operation failed
executeTask2OperationFailedTest();
// 回滚 operation forbidden
executeTask2RollbackForbiddenTest();
}
private void executeTask2TaskNotExistTest() {
ResultStatus resultStatus = clusterTaskService.executeTask(INVALID_TASK_ID, ClusterTaskActionEnum.START.getAction(), ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.RESOURCE_NOT_EXIST.getCode());
}
private void executeTask2CallClusterTaskAgentFailedTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(null);
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
ResultStatus resultStatus = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.START.getAction(), ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.CALL_CLUSTER_TASK_AGENT_FAILED.getCode());
}
private void executeTask2StartTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.BLOCKED));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// success
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(true);
ResultStatus resultStatus = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.START.getAction(), ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
// operation failed
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(false);
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.START.getAction(), ADMIN);
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void executeTask2PauseTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// success
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(true);
ResultStatus resultStatus = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.PAUSE.getAction(), ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
// operation failed
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(false);
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.PAUSE.getAction(), ADMIN);
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void executeTask2IgnoreTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// success
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(true);
ResultStatus resultStatus = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.IGNORE.getAction(), "");
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
// operation failed
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(false);
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.IGNORE.getAction(), "");
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void executeTask2CancelTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// success
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(true);
ResultStatus resultStatus = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.CANCEL.getAction(), "");
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
// operation failed
Mockito.when(abstractAgent.actionTask(Mockito.anyLong(), Mockito.any())).thenReturn(false);
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.CANCEL.getAction(), "");
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void executeTask2OperationFailedTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// operation failed
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.START.getAction(), ADMIN);
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void executeTask2RollbackForbiddenTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
// operation failed
ResultStatus resultStatus2 = clusterTaskService.executeTask(REAL_TASK_ID_IN_MYSQL, ClusterTaskActionEnum.ROLLBACK.getAction(), ADMIN);
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FORBIDDEN.getCode());
}
@Test
public void getTaskLogTest() {
// task not exist
getTaskLog2TaskNotExistTest();
// call cluster task agent failed
getTaskLog2CallClusterTaskAgentFailedTest();
// success
getTaskLog2SuccessTest();
}
private void getTaskLog2TaskNotExistTest() {
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(null);
Result<String> result = clusterTaskService.getTaskLog(REAL_TASK_ID_IN_MYSQL, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.TASK_NOT_EXIST.getCode());
}
private void getTaskLog2CallClusterTaskAgentFailedTest() {
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
Mockito.when(abstractAgent.getTaskLog(Mockito.anyLong(), Mockito.any())).thenReturn(null);
Result<String> result = clusterTaskService.getTaskLog(REAL_TASK_ID_IN_MYSQL, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.CALL_CLUSTER_TASK_AGENT_FAILED.getCode());
}
private void getTaskLog2SuccessTest() {
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
Mockito.when(abstractAgent.getTaskLog(Mockito.anyLong(), Mockito.any()))
.thenReturn(Result.buildSuc(new ClusterTaskLog("")));
Result<String> result = clusterTaskService.getTaskLog(REAL_TASK_ID_IN_MYSQL, ADMIN);
Assert.assertEquals(result.getCode(), ResultStatus.SUCCESS.getCode());
}
@Test
public void getTaskStateTest() {
// null
getTaskState2NullTest();
//
getTaskState2NotNullTest();
}
private void getTaskState2NullTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(null);
ClusterTaskStateEnum taskState = clusterTaskService.getTaskState(REAL_TASK_ID_IN_MYSQL);
Assert.assertNull(taskState);
}
private void getTaskState2NotNullTest() {
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
ClusterTaskStateEnum taskState = clusterTaskService.getTaskState(REAL_TASK_ID_IN_MYSQL);
Assert.assertNotNull(taskState);
}
@Test
public void getTaskStatusTest() {
// task not exist
getTaskStatus2TaskNotExistTest();
// get failed
getTaskStatus2FailedTest();
// success
getTaskStatus2SuccessTest();
}
private void getTaskStatus2TaskNotExistTest() {
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(null);
Result<ClusterTaskStatus> result = clusterTaskService.getTaskStatus(REAL_TASK_ID_IN_MYSQL);
Assert.assertEquals(result.getCode(), ResultStatus.TASK_NOT_EXIST.getCode());
}
private void getTaskStatus2FailedTest() {
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong())).thenReturn(Result.buildFailure(""));
Result<ClusterTaskStatus> result = clusterTaskService.getTaskStatus(REAL_TASK_ID_IN_MYSQL);
Assert.assertEquals(result.getCode(), ResultStatus.FAIL.getCode());
}
private void getTaskStatus2SuccessTest() {
ClusterTaskDO clusterTaskDO = getClusterTaskDO();
Mockito.when(clusterTaskDao.getById(Mockito.anyLong())).thenReturn(clusterTaskDO);
Mockito.when(abstractAgent.getTaskExecuteState(Mockito.anyLong()))
.thenReturn(Result.buildSuc(ClusterTaskStateEnum.RUNNING));
Result<ClusterTaskStatus> result = clusterTaskService.getTaskStatus(REAL_TASK_ID_IN_MYSQL);
Assert.assertEquals(result.getCode(), ResultStatus.SUCCESS.getCode());
}
}

View File

@@ -0,0 +1,224 @@
package com.xiaojukeji.kafka.manager.kcm;
import com.xiaojukeji.kafka.manager.common.bizenum.KafkaFileEnum;
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.KafkaFileDTO;
import com.xiaojukeji.kafka.manager.common.entity.pojo.KafkaFileDO;
import com.xiaojukeji.kafka.manager.dao.KafkaFileDao;
import com.xiaojukeji.kafka.manager.kcm.component.storage.AbstractStorageService;
import com.xiaojukeji.kafka.manager.kcm.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.springframework.dao.DuplicateKeyException;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* @author xuguang
* @Date 2022/1/4
*/
public class KafkaFileServiceTest extends BaseTest {
private static final Long KAFKA_FILE_ID = 1L;
private static final String ADMIN = "admin";
private KafkaFileDTO getKafkaFileDTO() {
KafkaFileDTO kafkaFileDTO = new KafkaFileDTO();
kafkaFileDTO.setId(KAFKA_FILE_ID);
kafkaFileDTO.setClusterId(-1L);
kafkaFileDTO.setFileMd5("");
kafkaFileDTO.setFileName(".tgz");
kafkaFileDTO.setFileType(KafkaFileEnum.PACKAGE.getCode());
kafkaFileDTO.setUploadFile(new MockMultipartFile("name", new byte[]{1}));
return kafkaFileDTO;
}
private KafkaFileDO getKafkaFileDO() {
KafkaFileDO kafkaFileDO = new KafkaFileDO();
kafkaFileDO.setFileType(KafkaFileEnum.PACKAGE.getCode());
kafkaFileDO.setFileName(".tgz");
return kafkaFileDO;
}
@Autowired
@InjectMocks
private KafkaFileService kafkaFileService;
@Mock
private KafkaFileDao kafkaFileDao;
@Mock
private AbstractStorageService storageService;
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void uploadKafkaFile() {
// paramIllegal
uploadKafkaFile2ParamIllegalTest();
// mysqlError
uploadKafkaFile2MysqlErrorTest();
// storage upload file failed
uploadKafkaFile2StorageUploadFileFailedTest();
// success
uploadKafkaFile2SuccessTest();
// DuplicateKey
uploadKafkaFile2DuplicateKeyTest();
}
private void uploadKafkaFile2ParamIllegalTest() {
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
kafkaFileDTO.setUploadFile(null);
ResultStatus resultStatus = kafkaFileService.uploadKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.PARAM_ILLEGAL.getCode());
}
private void uploadKafkaFile2MysqlErrorTest() {
Mockito.when(kafkaFileDao.insert(Mockito.any())).thenReturn(-1);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus = kafkaFileService.uploadKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.MYSQL_ERROR.getCode());
}
private void uploadKafkaFile2StorageUploadFileFailedTest() {
Mockito.when(kafkaFileDao.insert(Mockito.any())).thenReturn(1);
Mockito.when(kafkaFileDao.deleteById(Mockito.any())).thenReturn(1);
Mockito.when(storageService.upload(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(false);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus = kafkaFileService.uploadKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.STORAGE_UPLOAD_FILE_FAILED.getCode());
}
private void uploadKafkaFile2SuccessTest() {
Mockito.when(kafkaFileDao.insert(Mockito.any())).thenReturn(1);
Mockito.when(kafkaFileDao.deleteById(Mockito.any())).thenReturn(1);
Mockito.when(storageService.upload(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus = kafkaFileService.uploadKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
}
private void uploadKafkaFile2DuplicateKeyTest() {
Mockito.when(kafkaFileDao.insert(Mockito.any())).thenThrow(DuplicateKeyException.class);
Mockito.when(kafkaFileDao.deleteById(Mockito.any())).thenReturn(1);
Mockito.when(storageService.upload(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus = kafkaFileService.uploadKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.RESOURCE_ALREADY_EXISTED.getCode());
}
@Test
public void modifyKafkaFileTest() {
// paramIllegal
modifyKafkaFile2ParamIllegalTest();
// resource not exist
modifyKafkaFile2ResourceNotExistTest();
// operation failed
modifyKafkaFile2OperationFailedTest();
// mysqlError
modifyKafkaFile2MysqlErrorTest();
// success
modifyKafkaFile2SuccessTest();
}
private void modifyKafkaFile2ParamIllegalTest() {
ResultStatus resultStatus = kafkaFileService.modifyKafkaFile(null, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.PARAM_ILLEGAL.getCode());
}
private void modifyKafkaFile2ResourceNotExistTest() {
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(null);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus = kafkaFileService.modifyKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.RESOURCE_NOT_EXIST.getCode());
}
private void modifyKafkaFile2OperationFailedTest() {
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(new KafkaFileDO());
Mockito.when(kafkaFileDao.updateById(Mockito.any())).thenReturn(-1);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
kafkaFileDTO.setFileType(-1);
ResultStatus resultStatus1 = kafkaFileService.modifyKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus1.getCode(), ResultStatus.OPERATION_FAILED.getCode());
kafkaFileDTO.setFileType(KafkaFileEnum.PACKAGE.getCode());
kafkaFileDTO.setFileName("xxx");
ResultStatus resultStatus2 = kafkaFileService.modifyKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus2.getCode(), ResultStatus.OPERATION_FAILED.getCode());
}
private void modifyKafkaFile2MysqlErrorTest() {
KafkaFileDO kafkaFileDO = getKafkaFileDO();
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(kafkaFileDO);
Mockito.when(kafkaFileDao.updateById(Mockito.any())).thenReturn(-1);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus1 = kafkaFileService.modifyKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus1.getCode(), ResultStatus.MYSQL_ERROR.getCode());
}
private void modifyKafkaFile2SuccessTest() {
KafkaFileDO kafkaFileDO = getKafkaFileDO();
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(kafkaFileDO);
Mockito.when(kafkaFileDao.updateById(Mockito.any())).thenReturn(1);
Mockito.when(storageService.upload(Mockito.any(), Mockito.any(), Mockito.any())).thenReturn(true);
KafkaFileDTO kafkaFileDTO = getKafkaFileDTO();
ResultStatus resultStatus1 = kafkaFileService.modifyKafkaFile(kafkaFileDTO, ADMIN);
Assert.assertEquals(resultStatus1.getCode(), ResultStatus.SUCCESS.getCode());
}
@Test
public void downloadKafkaFileTest() {
// resource not exist
downloadKafkaFile2ResourceNotExist();
// STORAGE_FILE_TYPE_NOT_SUPPORT
downloadKafkaFile2FileNotSupportExist();
// success
downloadKafkaFile2SuccessExist();
}
private void downloadKafkaFile2ResourceNotExist() {
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(null);
Result<MultipartFile> resultStatus = kafkaFileService.downloadKafkaFile(KAFKA_FILE_ID);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.RESOURCE_NOT_EXIST.getCode());
}
private void downloadKafkaFile2FileNotSupportExist() {
KafkaFileDO kafkaFileDO = getKafkaFileDO();
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(kafkaFileDO);
Result<MultipartFile> resultStatus = kafkaFileService.downloadKafkaFile(KAFKA_FILE_ID);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.STORAGE_FILE_TYPE_NOT_SUPPORT.getCode());
}
private void downloadKafkaFile2SuccessExist() {
Mockito.when(storageService.download(Mockito.any(), Mockito.any())).thenReturn(Result.buildFrom(ResultStatus.SUCCESS));
KafkaFileDO kafkaFileDO = getKafkaFileDO();
kafkaFileDO.setFileType(KafkaFileEnum.SERVER_CONFIG.getCode());
Mockito.when(kafkaFileDao.getById(Mockito.anyLong())).thenReturn(kafkaFileDO);
Result<MultipartFile> resultStatus = kafkaFileService.downloadKafkaFile(KAFKA_FILE_ID);
Assert.assertEquals(resultStatus.getCode(), ResultStatus.SUCCESS.getCode());
}
}