test: add test code for h2

This commit is contained in:
tjq 2022-10-23 13:27:18 +08:00
parent 75e5c7049f
commit 987aa966a0
4 changed files with 118 additions and 3 deletions

View File

@ -19,7 +19,7 @@
<!-- 不会被打包的部分scope 只能是 test 或 provide -->
<junit.version>5.9.1</junit.version>
<logback.version>1.4.4</logback.version>
<logback.version>1.2.9</logback.version>
<powerjob.worker.version>4.2.0</powerjob.worker.version>
<spring.jdbc.version>5.2.9.RELEASE</spring.jdbc.version>
<h2.db.version>2.1.214</h2.db.version>

View File

@ -20,7 +20,7 @@
<hikaricp.version>4.0.3</hikaricp.version>
<junit.version>5.9.1</junit.version>
<logback.version>1.4.4</logback.version>
<logback.version>1.2.9</logback.version>
</properties>
<dependencies>

View File

@ -28,7 +28,7 @@ public class TaskDAOImpl implements TaskDAO {
String delTableSQL = "drop table if exists task_info";
// 感谢 Gitee 用户 @Linfly 反馈的 BUG
// bigint(20) Java Long 取值范围完全一致
String createTableSQL = "create table task_info (task_id varchar(255), instance_id bigint, sub_instance_id bigint, task_name varchar(255), task_content blob, address varchar, status int, result text, failed_cnt int, created_time bigint, last_modified_time bigint, last_report_time bigint, constraint pkey unique (instance_id, task_id))";
String createTableSQL = "create table task_info (task_id varchar(255), instance_id bigint, sub_instance_id bigint, task_name varchar(255), task_content blob, address varchar(255), status int, result text, failed_cnt int, created_time bigint, last_modified_time bigint, last_report_time bigint, constraint pkey unique (instance_id, task_id))";
try (Connection conn = connectionFactory.getConnection(); Statement stat = conn.createStatement()) {
stat.execute(delTableSQL);

View File

@ -0,0 +1,115 @@
package tech.powerjob.worker.persistence;
import com.google.common.collect.Lists;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import tech.powerjob.worker.common.constants.StoreStrategy;
import tech.powerjob.worker.common.constants.TaskStatus;
import tech.powerjob.worker.core.processor.TaskResult;
import java.nio.charset.StandardCharsets;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
/**
* 任务持久化接口测试
*
* @author tjq
* @since 2022/10/23
*/
@Slf4j
class TaskDAOTest {
private static TaskDAO taskDAO;
@BeforeAll
static void initDAO() throws Exception {
// 1. 创建对象
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.initDatasource(StoreStrategy.DISK);
taskDAO = new TaskDAOImpl(connectionFactory);
// 2. 初始化表
taskDAO.initTable();
}
@Test
@SneakyThrows
void testUniqueKey() {
TaskDO taskDO = buildTaskDO("2", 2L, TaskStatus.WORKER_PROCESS_FAILED);
boolean firstSaveRet = taskDAO.save(taskDO);
assert firstSaveRet;
log.info("[testUniqueKey] first save result: {}", firstSaveRet);
assertThrows(SQLIntegrityConstraintViolationException.class, () -> {
taskDAO.save(taskDO);
});
}
@Test
@SneakyThrows
void testCRUD() {
TaskDO oneTask = buildTaskDO("1", 1L, TaskStatus.WAITING_DISPATCH);
TaskDO twoTask = buildTaskDO("2", 1L, TaskStatus.WAITING_DISPATCH);
TaskDO threeTask = buildTaskDO("99", 1L, TaskStatus.WAITING_DISPATCH);
boolean batchSave = taskDAO.batchSave(Lists.newArrayList(oneTask, twoTask, threeTask));
log.info("[testCRUD] batchSave result: {}", batchSave);
assert batchSave;
SimpleTaskQuery query = new SimpleTaskQuery();
query.setInstanceId(1L);
List<TaskDO> simpleQueryRet = taskDAO.simpleQuery(query);
log.info("[testCRUD] simple query by instanceId's result: {}", simpleQueryRet);
assert simpleQueryRet.size() == 3;
SimpleTaskQuery deleteQuery = new SimpleTaskQuery();
deleteQuery.setTaskId("99");
deleteQuery.setInstanceId(1L);
boolean simpleDelete = taskDAO.simpleDelete(deleteQuery);
log.info("[testCRUD] simpleDelete result: {}", simpleDelete);
assert simpleDelete;
query.setQueryContent("status, result");
List<Map<String, Object>> simpleQueryPlusRet = taskDAO.simpleQueryPlus(query);
log.info("[testCRUD] simple query plus by instanceId's result: {}", simpleQueryPlusRet);
assert simpleQueryPlusRet.size() == 2;
assert simpleQueryPlusRet.get(0).get("status") != null;
assert simpleQueryPlusRet.get(0).get("instanceId") == null;
boolean updateToSuccessRet = taskDAO.updateTaskStatus(1L, "1", TaskStatus.WORKER_PROCESS_SUCCESS.getValue(), System.currentTimeMillis(), "UPDATE_TO_SUCCESS");
boolean updateToFailedRet = taskDAO.updateTaskStatus(1L, "2", TaskStatus.WORKER_PROCESS_FAILED.getValue(), System.currentTimeMillis(), "UPDATE_TO_FAILED");
assert updateToSuccessRet;
assert updateToFailedRet;
List<TaskResult> allTaskResult = taskDAO.getAllTaskResult(1L, 1L);
log.info("[testCRUD] allTaskResult: {}", allTaskResult);
assert allTaskResult.size() == 2;
}
private static TaskDO buildTaskDO(String taskId, Long instanceId, TaskStatus taskStatus) {
TaskDO taskDO = new TaskDO();
taskDO.setTaskId(taskId);
taskDO.setInstanceId(instanceId);
taskDO.setSubInstanceId(instanceId);
taskDO.setTaskName("TEST_TASK");
taskDO.setTaskContent("TEST_CONTENT".getBytes(StandardCharsets.UTF_8));
taskDO.setAddress("127.0.0.1:10086");
taskDO.setStatus(taskStatus.getValue());
taskDO.setResult("SUCCESS");
taskDO.setFailedCnt(0);
taskDO.setLastModifiedTime(System.currentTimeMillis());
taskDO.setLastReportTime(System.currentTimeMillis());
taskDO.setCreatedTime(System.currentTimeMillis());
return taskDO;
}
}