thread-master/internal/model/job/usecase/cancel_test.go

59 lines
1.5 KiB
Go

package usecase
import (
"context"
"testing"
"haixun-backend/internal/model/job/domain/entity"
"haixun-backend/internal/model/job/domain/enum"
domusecase "haixun-backend/internal/model/job/domain/usecase"
jobrepo "haixun-backend/internal/model/job/repository"
goredis "github.com/redis/go-redis/v9"
)
func TestRequestCancel_RunningSetsRedisCancelSignal(t *testing.T) {
ctx := context.Background()
client := goredis.NewClient(&goredis.Options{Addr: "127.0.0.1:6379"})
if err := client.Ping(ctx).Err(); err != nil {
t.Skip("redis not available:", err)
}
defer client.Close()
jobID := "507f1f77bcf86cd799439011"
template := demoTemplate()
run := &entity.Run{
TemplateType: template.Type,
Status: enum.RunStatusRunning,
WorkerType: string(enum.WorkerTypeGo),
}
uc := NewUseCase(
&memoryTemplateRepo{template: template},
newMemoryRunRepo(run),
&memoryScheduleRepo{},
&memoryEventRepo{},
jobrepo.NewRedisQueueRepository(client),
)
updated, err := uc.RequestCancel(ctx, domusecase.CancelRunRequest{
JobID: jobID,
Reason: "test cancel",
})
if err != nil {
t.Fatalf("RequestCancel() error = %v", err)
}
if updated.Status != enum.RunStatusCancelRequested {
t.Fatalf("status = %s, want cancel_requested", updated.Status)
}
value, err := client.Get(ctx, "jobs:cancel:"+jobID).Result()
if err != nil {
t.Fatalf("redis cancel key missing: %v", err)
}
if value != "test cancel" {
t.Fatalf("cancel value = %q, want test cancel", value)
}
_ = client.Del(ctx, "jobs:cancel:"+jobID)
}