82 lines
3.0 KiB
Go
82 lines
3.0 KiB
Go
package store
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestTaskScheduleAndBroken(t *testing.T) {
|
|
s := testStore(t)
|
|
ctx := context.Background()
|
|
epSrc, _ := s.CreateEndpoint(ctx, Endpoint{RoleLabel: "src", Host: "a", Port: 993, TLSMode: "ssl"})
|
|
epDst, _ := s.CreateEndpoint(ctx, Endpoint{RoleLabel: "dst", Host: "b", Port: 993, TLSMode: "ssl"})
|
|
taskID, _ := s.CreateTask(ctx, Task{Name: "t", SrcEndpointID: epSrc, DstEndpointID: epDst})
|
|
|
|
// Defaults: no schedule, not broken.
|
|
tk, _ := s.GetTask(ctx, taskID)
|
|
if tk.ScheduleIntervalSeconds != 0 || tk.Broken || tk.ScheduleAnchor != nil {
|
|
t.Fatalf("defaults: interval=%d broken=%v anchor=%v", tk.ScheduleIntervalSeconds, tk.Broken, tk.ScheduleAnchor)
|
|
}
|
|
|
|
// Enable → interval set, anchor stamped, appears in schedulable list.
|
|
if err := s.SetTaskSchedule(ctx, taskID, 3600); err != nil {
|
|
t.Fatalf("set schedule: %v", err)
|
|
}
|
|
tk, _ = s.GetTask(ctx, taskID)
|
|
if tk.ScheduleIntervalSeconds != 3600 || tk.ScheduleAnchor == nil {
|
|
t.Fatalf("after enable: interval=%d anchor=%v", tk.ScheduleIntervalSeconds, tk.ScheduleAnchor)
|
|
}
|
|
sch, _ := s.ListSchedulableTasks(ctx)
|
|
if len(sch) != 1 || sch[0].ID != taskID || sch[0].IntervalSeconds != 3600 || sch[0].LastFinished != nil {
|
|
t.Fatalf("schedulable: %+v", sch)
|
|
}
|
|
|
|
// Breaker → broken true, interval 0, drops out of schedulable list.
|
|
if err := s.SetTaskBroken(ctx, taskID); err != nil {
|
|
t.Fatalf("set broken: %v", err)
|
|
}
|
|
tk, _ = s.GetTask(ctx, taskID)
|
|
if !tk.Broken || tk.ScheduleIntervalSeconds != 0 {
|
|
t.Fatalf("after break: broken=%v interval=%d", tk.Broken, tk.ScheduleIntervalSeconds)
|
|
}
|
|
if sch, _ := s.ListSchedulableTasks(ctx); len(sch) != 0 {
|
|
t.Fatalf("broken task still schedulable: %+v", sch)
|
|
}
|
|
|
|
// Re-enable clears broken.
|
|
_ = s.SetTaskSchedule(ctx, taskID, 21600)
|
|
if tk, _ = s.GetTask(ctx, taskID); tk.Broken {
|
|
t.Fatalf("re-enable did not clear broken")
|
|
}
|
|
}
|
|
|
|
func TestListRunsByTaskWithTrigger(t *testing.T) {
|
|
s := testStore(t)
|
|
ctx := context.Background()
|
|
epSrc, _ := s.CreateEndpoint(ctx, Endpoint{RoleLabel: "src", Host: "a", Port: 993, TLSMode: "ssl"})
|
|
epDst, _ := s.CreateEndpoint(ctx, Endpoint{RoleLabel: "dst", Host: "b", Port: 993, TLSMode: "ssl"})
|
|
taskID, _ := s.CreateTask(ctx, Task{Name: "t", SrcEndpointID: epSrc, DstEndpointID: epDst})
|
|
|
|
r1, _ := s.CreateRun(ctx, taskID, "manual")
|
|
_ = s.FinishRun(ctx, r1, "done", 5, 1, 0)
|
|
_, _ = s.CreateRun(ctx, taskID, "scheduled") // still running (no finish)
|
|
|
|
runs, err := s.ListRunsByTask(ctx, taskID)
|
|
if err != nil || len(runs) != 2 {
|
|
t.Fatalf("list runs: %v len=%d", err, len(runs))
|
|
}
|
|
// newest first
|
|
if runs[0].Trigger != "scheduled" || runs[0].FinishedAt != nil {
|
|
t.Fatalf("run[0]: %+v", runs[0])
|
|
}
|
|
if runs[1].Trigger != "manual" || runs[1].FinishedAt == nil || runs[1].TotalCopied != 5 {
|
|
t.Fatalf("run[1]: %+v", runs[1])
|
|
}
|
|
|
|
// Last finished-at reflects the finished manual run.
|
|
lf, _ := s.LastFinishedRunAt(ctx, taskID)
|
|
if lf == nil {
|
|
t.Fatalf("LastFinishedRunAt nil, want the finished run's time")
|
|
}
|
|
}
|