From 987aa966a065fcd03e1703a73c6ce944c9386639 Mon Sep 17 00:00:00 2001 From: tjq Date: Sun, 23 Oct 2022 13:27:18 +0800 Subject: [PATCH] test: add test code for h2 --- powerjob-official-processors/pom.xml | 2 +- powerjob-worker/pom.xml | 2 +- .../worker/persistence/TaskDAOImpl.java | 2 +- .../worker/persistence/TaskDAOTest.java | 115 ++++++++++++++++++ 4 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 powerjob-worker/src/test/java/tech/powerjob/worker/persistence/TaskDAOTest.java diff --git a/powerjob-official-processors/pom.xml b/powerjob-official-processors/pom.xml index 1a78d58c..16836abe 100644 --- a/powerjob-official-processors/pom.xml +++ b/powerjob-official-processors/pom.xml @@ -19,7 +19,7 @@ 5.9.1 - 1.4.4 + 1.2.9 4.2.0 5.2.9.RELEASE 2.1.214 diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml index 6afbda68..e95614fc 100644 --- a/powerjob-worker/pom.xml +++ b/powerjob-worker/pom.xml @@ -20,7 +20,7 @@ 4.0.3 5.9.1 - 1.4.4 + 1.2.9 diff --git a/powerjob-worker/src/main/java/tech/powerjob/worker/persistence/TaskDAOImpl.java b/powerjob-worker/src/main/java/tech/powerjob/worker/persistence/TaskDAOImpl.java index e3d2759b..96c4ab89 100644 --- a/powerjob-worker/src/main/java/tech/powerjob/worker/persistence/TaskDAOImpl.java +++ b/powerjob-worker/src/main/java/tech/powerjob/worker/persistence/TaskDAOImpl.java @@ -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); diff --git a/powerjob-worker/src/test/java/tech/powerjob/worker/persistence/TaskDAOTest.java b/powerjob-worker/src/test/java/tech/powerjob/worker/persistence/TaskDAOTest.java new file mode 100644 index 00000000..102b9b60 --- /dev/null +++ b/powerjob-worker/src/test/java/tech/powerjob/worker/persistence/TaskDAOTest.java @@ -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 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> 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 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; + } + + +} \ No newline at end of file