|
|
@@ -10,10 +10,13 @@ import org.junit.jupiter.api.Test;
|
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
|
import org.mockito.Mock;
|
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
|
import static org.mockito.Mockito.*;
|
|
|
|
|
|
@@ -131,4 +134,36 @@ class HarOrderPollSchedulerTest {
|
|
|
|
|
|
assertDoesNotThrow(scheduler::retryFailedCallbacks);
|
|
|
}
|
|
|
+
|
|
|
+ // ==================== 调度节奏(2026-10-09 用户裁定) ====================
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 轮询间隔是**用户可感知的延迟承诺**:支付/退款状态从上游发生变化到本地可见的等待
|
|
|
+ * ≈ 单笔查询游标(首档 30 秒)+ 本间隔(实测痛点:退款点完等了约 60 秒状态才翻)。
|
|
|
+ * 2026-10-09 用户裁定从 60 秒收紧到 10 秒 —— 改回大值会静默拉长等待,
|
|
|
+ * 套件除本用例不会有任何红点。
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ void poll_scheduledEveryTenSeconds() throws Exception {
|
|
|
+ Scheduled scheduled = HarOrderPollScheduler.class
|
|
|
+ .getMethod("pollPendingOrders").getAnnotation(Scheduled.class);
|
|
|
+ assertNotNull(scheduled, "pollPendingOrders 必须挂 @Scheduled —— 摘掉它轮询就整个停了");
|
|
|
+ assertEquals(10 * 1000, scheduled.fixedDelay(),
|
|
|
+ "轮询间隔必须是 10 秒(2026-10-09 用户裁定,原 60 秒)");
|
|
|
+ assertEquals(10 * 1000, scheduled.initialDelay(),
|
|
|
+ "首轮启动延迟同步收 10 秒(原 60 秒)—— 重启后的第一笔也不该再等 60 秒");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 2026-10-09 的裁定**只动回调重试上限**(8→3,见 {@code HarProperties} 与
|
|
|
+ * har-callback-retry.sql):重试节奏仍是每分钟一轮。别顺手改这一条 ——
|
|
|
+ * 重试腿打的是商户地址,节奏与上限是两回事。
|
|
|
+ */
|
|
|
+ @Test
|
|
|
+ void retryCallbacks_scheduledEverySixtySeconds() throws Exception {
|
|
|
+ Scheduled scheduled = HarOrderPollScheduler.class
|
|
|
+ .getMethod("retryFailedCallbacks").getAnnotation(Scheduled.class);
|
|
|
+ assertNotNull(scheduled, "retryFailedCallbacks 必须挂 @Scheduled");
|
|
|
+ assertEquals(60 * 1000, scheduled.fixedDelay(), "回调重试节奏未在本次裁定内,保持每分钟一轮");
|
|
|
+ }
|
|
|
}
|