From 1b93474a67aa2323d20630b1bb026713b2bad009 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 29 四月 2026 16:59:32 +0800
Subject: [PATCH] #Agent自动调参
---
src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java | 71 +++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 0 deletions(-)
diff --git a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
index 1620f70..ca71efe 100644
--- a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
+++ b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
@@ -7,6 +7,7 @@
import com.zy.ai.entity.AiAutoTuneChange;
import com.zy.ai.entity.AiAutoTuneJob;
import com.zy.ai.service.impl.AutoTuneApplyServiceImpl;
+import com.zy.ai.service.impl.AutoTuneControlModeServiceImpl;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasDualCrnp;
import com.zy.asrs.entity.BasStation;
@@ -89,6 +90,8 @@
ReflectionTestUtils.setField(service, "aiAutoTuneJobService", aiAutoTuneJobService);
ReflectionTestUtils.setField(service, "aiAutoTuneChangeService", aiAutoTuneChangeService);
ReflectionTestUtils.setField(service, "configService", configService);
+ ReflectionTestUtils.setField(service, "autoTuneControlModeService",
+ new AutoTuneControlModeServiceImpl(configService));
ReflectionTestUtils.setField(service, "basStationService", basStationService);
ReflectionTestUtils.setField(service, "basCrnpService", basCrnpService);
ReflectionTestUtils.setField(service, "basDualCrnpService", basDualCrnpService);
@@ -111,6 +114,7 @@
when(aiAutoTuneChangeService.list(any(Wrapper.class))).thenReturn(Collections.emptyList());
when(wrkMastService.count(any(Wrapper.class))).thenReturn(0L);
when(configService.getConfigValue(eq("aiAutoTuneIntervalMinutes"), any())).thenReturn("10");
+ when(configService.getConfigValue("aiAutoTuneAnalysisOnly", "Y")).thenReturn("N");
when(configService.saveConfigValue(any(), any())).thenReturn(true);
when(basStationService.update(any(Wrapper.class))).thenReturn(true);
when(basCrnpService.update(any(Wrapper.class))).thenReturn(true);
@@ -323,6 +327,38 @@
}
@Test
+ void analysisOnlyRealApplyWritesRejectedAuditAndDoesNotAcquireApplyLock() {
+ when(configService.getConfigValue("aiAutoTuneAnalysisOnly", "Y")).thenReturn("Y");
+
+ AutoTuneApplyResult result = service.apply(request(false,
+ command("sys_config", null, "conveyorStationTaskLimit", "15")));
+
+ List<AiAutoTuneChange> changes = savedChanges();
+ AiAutoTuneJob job = updatedJob();
+ assertFalse(result.getSuccess());
+ assertTrue(result.getAnalysisOnly());
+ assertTrue(result.getNoApply());
+ assertEquals("rejected", job.getStatus());
+ assertEquals("rejected", changes.get(0).getResultStatus());
+ assertTrue(changes.get(0).getRejectReason().contains("浠呭垎鏋愭ā寮忕姝㈠疄闄呭簲鐢�/鍥炴粴"));
+ verify(redisUtil, never()).trySetStringIfAbsent(anyString(), anyString(), anyLong());
+ verify(configService, never()).saveConfigValue(any(), any());
+ }
+
+ @Test
+ void realApplyResultUsesEntryControlModeSnapshotWhenConfigFlips() {
+ when(configService.getConfigValue("aiAutoTuneAnalysisOnly", "Y")).thenReturn("N", "Y");
+ when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10"));
+
+ AutoTuneApplyResult result = service.apply(request(false,
+ command("sys_config", null, "conveyorStationTaskLimit", "15")));
+
+ assertTrue(result.getSuccess());
+ assertFalse(result.getAnalysisOnly());
+ verify(configService, times(1)).getConfigValue("aiAutoTuneAnalysisOnly", "Y");
+ }
+
+ @Test
void acceptedDryRunDoesNotWriteTargetStores() {
when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10"));
@@ -338,6 +374,41 @@
}
@Test
+ void analysisOnlyRollbackWritesRejectedAuditAndDoesNotAcquireApplyLock() {
+ when(configService.getConfigValue("aiAutoTuneAnalysisOnly", "Y")).thenReturn("Y");
+
+ AutoTuneApplyResult result = service.rollbackLastSuccessfulJob("manual rollback");
+
+ List<AiAutoTuneChange> changes = savedChanges();
+ AiAutoTuneJob job = updatedJob();
+ assertFalse(result.getSuccess());
+ assertTrue(result.getAnalysisOnly());
+ assertTrue(result.getNoApply());
+ assertEquals("rejected", job.getStatus());
+ assertEquals("rejected", changes.get(0).getResultStatus());
+ assertEquals("rollback", changes.get(0).getTargetKey());
+ verify(redisUtil, never()).trySetStringIfAbsent(anyString(), anyString(), anyLong());
+ }
+
+ @Test
+ void rollbackResultUsesEntryControlModeSnapshotWhenConfigFlips() {
+ when(configService.getConfigValue("aiAutoTuneAnalysisOnly", "Y")).thenReturn("N", "Y");
+ AiAutoTuneJob latestRealJob = job(10L, "manual", "success");
+ AiAutoTuneChange configChange = successChange(10L, "sys_config", "", "conveyorStationTaskLimit", "10", "15");
+ when(aiAutoTuneChangeService.list(any(Wrapper.class)))
+ .thenReturn(List.of(configChange))
+ .thenReturn(List.of(configChange));
+ when(aiAutoTuneJobService.getById(10L)).thenReturn(latestRealJob);
+ when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "15"));
+
+ AutoTuneApplyResult result = service.rollbackLastSuccessfulJob("manual rollback");
+
+ assertTrue(result.getSuccess());
+ assertFalse(result.getAnalysisOnly());
+ verify(configService, times(1)).getConfigValue("aiAutoTuneAnalysisOnly", "Y");
+ }
+
+ @Test
void applyJobRecordsActiveTasksWhenCountIsPositive() {
when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10"));
when(wrkMastService.count(any(Wrapper.class))).thenReturn(1L);
--
Gitblit v1.9.1