- Add code review and plan logs for cloud G07, G08 subtasks - Add stale task detection to scheduler - Update OpenAI client config and tests - Fix core services Makefile, README, docker-compose, and run script
81 lines
2.5 KiB
Go
81 lines
2.5 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/nomadcode/nomadcode-core/internal/workflow"
|
|
)
|
|
|
|
func TestIsAuthoringStaleReturnsTrueWhenExpired(t *testing.T) {
|
|
old := time.Now().Add(-2000 * time.Second)
|
|
if !IsAuthoringStale(old, 1200) {
|
|
t.Fatal("expected stale for timestamp older than threshold")
|
|
}
|
|
}
|
|
|
|
func TestIsAuthoringStaleReturnsFalseWhenRecent(t *testing.T) {
|
|
recent := time.Now().Add(-60 * time.Second)
|
|
if IsAuthoringStale(recent, 1200) {
|
|
t.Fatal("expected not stale for recent timestamp")
|
|
}
|
|
}
|
|
|
|
func TestIsAuthoringStaleReturnsFalseForZeroTime(t *testing.T) {
|
|
if IsAuthoringStale(time.Time{}, 1200) {
|
|
t.Fatal("expected false for zero time")
|
|
}
|
|
}
|
|
|
|
func TestIsAuthoringStaleReturnsFalseForNonPositiveThreshold(t *testing.T) {
|
|
old := time.Now().Add(-9999 * time.Second)
|
|
if IsAuthoringStale(old, 0) {
|
|
t.Fatal("expected false when threshold is zero (feature disabled)")
|
|
}
|
|
if IsAuthoringStale(old, -1) {
|
|
t.Fatal("expected false when threshold is negative")
|
|
}
|
|
}
|
|
|
|
func TestParseAuthoringRunUpdatedAtReturnsTimeFromMeta(t *testing.T) {
|
|
now := time.Now().UTC().Truncate(time.Second)
|
|
meta := map[string]any{
|
|
workflow.MetadataKeyAuthoringRunUpdatedAt: now.Format(time.RFC3339),
|
|
}
|
|
got := ParseAuthoringRunUpdatedAt(meta)
|
|
if !got.Equal(now) {
|
|
t.Fatalf("got %v, want %v", got, now)
|
|
}
|
|
}
|
|
|
|
func TestParseAuthoringRunUpdatedAtReturnsZeroOnMissing(t *testing.T) {
|
|
if !ParseAuthoringRunUpdatedAt(map[string]any{}).IsZero() {
|
|
t.Fatal("expected zero time when key is absent")
|
|
}
|
|
}
|
|
|
|
func TestParseAuthoringRunUpdatedAtReturnsZeroOnBadFormat(t *testing.T) {
|
|
meta := map[string]any{
|
|
workflow.MetadataKeyAuthoringRunUpdatedAt: "not-a-date",
|
|
}
|
|
if !ParseAuthoringRunUpdatedAt(meta).IsZero() {
|
|
t.Fatal("expected zero time for unparseable date")
|
|
}
|
|
}
|
|
|
|
// TestIsAuthoringStaleAppliesToQueueWait verifies that the stale helper can be
|
|
// applied to task.UpdatedAt for queue-waiting authoring tasks: if a task has
|
|
// been queued for longer than AUTHORING_STALE_AFTER_SEC it is considered stale.
|
|
func TestIsAuthoringStaleAppliesToQueueWait(t *testing.T) {
|
|
// Simulate a task queued 25 minutes ago (threshold default 1200s = 20min).
|
|
queuedAt := time.Now().Add(-25 * time.Minute)
|
|
if !IsAuthoringStale(queuedAt, 1200) {
|
|
t.Fatal("expected stale for task queued longer than threshold")
|
|
}
|
|
|
|
// A task queued 10 minutes ago is not yet stale.
|
|
recent := time.Now().Add(-10 * time.Minute)
|
|
if IsAuthoringStale(recent, 1200) {
|
|
t.Fatal("expected not stale for task queued less than threshold")
|
|
}
|
|
}
|