harden article generation reliability
Deployment Config CI / Deployment Config (push) Successful in 24s
Backend CI / Backend (push) Successful in 14m12s

This commit is contained in:
2026-05-05 23:43:10 +08:00
parent 3c912949e4
commit 65e9b7e293
24 changed files with 1259 additions and 52 deletions
+44 -1
View File
@@ -480,6 +480,18 @@ generation:
if cfg.Generation.TaskMaxAttempts != 3 {
t.Fatalf("expected default task max attempts 3, got %d", cfg.Generation.TaskMaxAttempts)
}
if cfg.Generation.TaskStateCheckInterval != 5*time.Minute {
t.Fatalf("expected default task state check interval 5m, got %s", cfg.Generation.TaskStateCheckInterval)
}
if cfg.Generation.TaskStateCheckTimeout != 10*time.Second {
t.Fatalf("expected default task state check timeout 10s, got %s", cfg.Generation.TaskStateCheckTimeout)
}
if cfg.Generation.TaskStateCheckBatchSize != 100 {
t.Fatalf("expected default task state check batch size 100, got %d", cfg.Generation.TaskStateCheckBatchSize)
}
if cfg.Generation.TaskStateCheckLookback != 24*time.Hour {
t.Fatalf("expected default task state check lookback 24h, got %s", cfg.Generation.TaskStateCheckLookback)
}
}
func TestLoadAppliesGenerationRecoveryOverrides(t *testing.T) {
@@ -494,6 +506,10 @@ generation:
task_recovery_batch_size: 12
task_queued_stale_after: 45s
task_max_attempts: 5
task_state_check_interval: 9m
task_state_check_timeout: 11s
task_state_check_batch_size: 13
task_state_check_lookback: 2h
`)
cfg, err := Load(configPath)
@@ -509,11 +525,38 @@ generation:
cfg.Generation.TaskRecoveryTimeout != 10*time.Second ||
cfg.Generation.TaskRecoveryBatchSize != 12 ||
cfg.Generation.TaskQueuedStaleAfter != 45*time.Second ||
cfg.Generation.TaskMaxAttempts != 5 {
cfg.Generation.TaskMaxAttempts != 5 ||
cfg.Generation.TaskStateCheckInterval != 9*time.Minute ||
cfg.Generation.TaskStateCheckTimeout != 11*time.Second ||
cfg.Generation.TaskStateCheckBatchSize != 13 ||
cfg.Generation.TaskStateCheckLookback != 2*time.Hour {
t.Fatalf("unexpected generation recovery config: %#v", cfg.Generation)
}
}
func TestLoadAppliesGenerationStateCheckEnvOverrides(t *testing.T) {
t.Setenv("GENERATION_TASK_STATE_CHECK_INTERVAL", "3m")
t.Setenv("GENERATION_TASK_STATE_CHECK_TIMEOUT", "4s")
t.Setenv("GENERATION_TASK_STATE_CHECK_BATCH_SIZE", "17")
t.Setenv("GENERATION_TASK_STATE_CHECK_LOOKBACK", "6h")
configPath := writeTestConfig(t, `
generation: {}
`)
cfg, err := Load(configPath)
if err != nil {
t.Fatalf("Load() error = %v", err)
}
if cfg.Generation.TaskStateCheckInterval != 3*time.Minute ||
cfg.Generation.TaskStateCheckTimeout != 4*time.Second ||
cfg.Generation.TaskStateCheckBatchSize != 17 ||
cfg.Generation.TaskStateCheckLookback != 6*time.Hour {
t.Fatalf("unexpected generation state check env config: %#v", cfg.Generation)
}
}
func TestStoreReloadsConfigAndKeepsPreviousOnInvalidYAML(t *testing.T) {
configPath := writeTestConfig(t, `
jwt: