@@ -323,11 +323,49 @@ func TestPhase2AgentLifecycle(t *testing.T) {
323323 t .Fatal ("expected heartbeat response to include active config summary" )
324324 }
325325
326- logsResp := performJSONRequest (t , engine , adminToken , http .MethodGet , "/api/apply-logs/?node_id=" + createdNode .NodeID , nil )
327- var logs []model. ApplyLog
326+ logsResp := performJSONRequest (t , engine , adminToken , http .MethodGet , "/api/apply-logs/?node_id=" + createdNode .NodeID + "&pageNo=1&pageSize=1" , nil )
327+ var logs service. ApplyLogListResult
328328 decodeResponseData (t , logsResp , & logs )
329- if len (logs ) != 2 {
330- t .Fatalf ("expected 2 apply logs, got %d" , len (logs ))
329+ if logs .Current != 1 || logs .Total != 2 || logs .TotalPage != 2 {
330+ t .Fatalf ("unexpected paged apply logs result: %+v" , logs )
331+ }
332+ if len (logs .Rows ) != 1 {
333+ t .Fatalf ("expected 1 apply log row on page 1, got %d" , len (logs .Rows ))
334+ }
335+ if logs .Rows [0 ].Result != service .ApplyResultFailed {
336+ t .Fatalf ("expected newest apply log first, got %s" , logs .Rows [0 ].Result )
337+ }
338+ oldApplyLogTime := time .Now ().Add (- 48 * time .Hour )
339+ if err := model .DB .Model (& model.ApplyLog {}).Where ("id = ?" , successApplyLog .ID ).Update ("created_at" , oldApplyLogTime ).Error ; err != nil {
340+ t .Fatalf ("failed to backdate apply log: %v" , err )
341+ }
342+ cleanupResp := performJSONRequest (t , engine , adminToken , http .MethodPost , "/api/apply-logs/cleanup" , map [string ]any {
343+ "retention_days" : 1 ,
344+ })
345+ var cleanupResult service.ApplyLogCleanupResult
346+ decodeResponseData (t , cleanupResp , & cleanupResult )
347+ if cleanupResult .DeleteAll {
348+ t .Fatal ("expected retention cleanup instead of delete-all cleanup" )
349+ }
350+ if cleanupResult .RetentionDays != 1 || cleanupResult .DeletedCount != 1 {
351+ t .Fatalf ("unexpected cleanup result: %+v" , cleanupResult )
352+ }
353+ postCleanupResp := performJSONRequest (t , engine , adminToken , http .MethodGet , "/api/apply-logs/?node_id=" + createdNode .NodeID , nil )
354+ decodeResponseData (t , postCleanupResp , & logs )
355+ if logs .Total != 1 || len (logs .Rows ) != 1 {
356+ t .Fatalf ("expected one apply log after retention cleanup, got %+v" , logs )
357+ }
358+ deleteAllResp := performJSONRequest (t , engine , adminToken , http .MethodPost , "/api/apply-logs/cleanup" , map [string ]any {
359+ "delete_all" : true ,
360+ })
361+ decodeResponseData (t , deleteAllResp , & cleanupResult )
362+ if ! cleanupResult .DeleteAll || cleanupResult .DeletedCount != 1 {
363+ t .Fatalf ("unexpected delete-all cleanup result: %+v" , cleanupResult )
364+ }
365+ emptyLogsResp := performJSONRequest (t , engine , adminToken , http .MethodGet , "/api/apply-logs/?node_id=" + createdNode .NodeID , nil )
366+ decodeResponseData (t , emptyLogsResp , & logs )
367+ if logs .Total != 0 || len (logs .Rows ) != 0 || logs .Current != 1 || logs .TotalPage != 0 {
368+ t .Fatalf ("expected empty apply log page after delete-all cleanup, got %+v" , logs )
331369 }
332370
333371 updatedNodeResp := performJSONRequest (t , engine , adminToken , http .MethodPost , "/api/nodes/" + toString (createdNode .ID )+ "/update" , map [string ]any {
0 commit comments