test(progress): a keyed soft failure that logs why, a note that costs no write, and FailRunning for the job's own failure (red)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -182,14 +182,14 @@ func TestTracker_FinishSkipsWhatNeverRanAndClosesWhatDid(t *testing.T) {
|
|||||||
require.Equal(t, domain.StepSkipped, stateOf(steps, "save"), "a step that never ran is skipped, not left pending")
|
require.Equal(t, domain.StepSkipped, stateOf(steps, "save"), "a step that never ran is skipped, not left pending")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTracker_FailMarksTheRunningStepFailedAndLeavesTheRestPending(t *testing.T) {
|
func TestTracker_FailRunningMarksTheRunningStepFailedAndLeavesTheRestPending(t *testing.T) {
|
||||||
tr, sink, _, _ := newTracker(t)
|
tr, sink, _, _ := newTracker(t)
|
||||||
tr.Start()
|
tr.Start()
|
||||||
tr.Begin("audio", 0)
|
tr.Begin("audio", 0)
|
||||||
tr.Done("audio")
|
tr.Done("audio")
|
||||||
tr.Begin("decide", 5)
|
tr.Begin("decide", 5)
|
||||||
|
|
||||||
tr.Fail()
|
tr.FailRunning()
|
||||||
|
|
||||||
steps := sink.last(t)
|
steps := sink.last(t)
|
||||||
require.Equal(t, domain.StepDone, stateOf(steps, "audio"))
|
require.Equal(t, domain.StepDone, stateOf(steps, "audio"))
|
||||||
@@ -197,6 +197,35 @@ func TestTracker_FailMarksTheRunningStepFailedAndLeavesTheRestPending(t *testing
|
|||||||
require.Equal(t, domain.StepPending, stateOf(steps, "save"), "what never started stays pending: it shows where the job stopped")
|
require.Equal(t, domain.StepPending, stateOf(steps, "save"), "what never started stays pending: it shows where the job stopped")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTracker_AKeyedFailMarksOneStepFailedLogsWhyAndTheJobGoesOn(t *testing.T) {
|
||||||
|
tr, sink, _, buf := newTracker(t)
|
||||||
|
tr.Start()
|
||||||
|
tr.Begin("audio", 0)
|
||||||
|
|
||||||
|
tr.Fail("audio", errors.New("gateway said no"))
|
||||||
|
tr.Begin("decide", 5)
|
||||||
|
|
||||||
|
steps := sink.last(t)
|
||||||
|
require.Equal(t, domain.StepFailed, stateOf(steps, "audio"))
|
||||||
|
require.Equal(t, domain.StepRunning, stateOf(steps, "decide"), "a soft failure must not stop the next step from running")
|
||||||
|
require.Contains(t, buf.String(), "level=WARN")
|
||||||
|
require.Contains(t, buf.String(), "gateway said no")
|
||||||
|
require.Contains(t, buf.String(), "step=audio")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTracker_NoteIsALogLineAndNeverASave(t *testing.T) {
|
||||||
|
tr, sink, _, buf := newTracker(t)
|
||||||
|
tr.Start()
|
||||||
|
before := sink.saveCount()
|
||||||
|
|
||||||
|
tr.Note("reconciled", "disputes", 362, "auto_resolved", 80)
|
||||||
|
|
||||||
|
require.Equal(t, before, sink.saveCount(), "a note is for the operator; it must not cost a database write")
|
||||||
|
require.Contains(t, buf.String(), "reconciled")
|
||||||
|
require.Contains(t, buf.String(), "disputes=362")
|
||||||
|
require.Contains(t, buf.String(), "auto_resolved=80")
|
||||||
|
}
|
||||||
|
|
||||||
func TestTracker_AnUnknownKeyIsIgnored(t *testing.T) {
|
func TestTracker_AnUnknownKeyIsIgnored(t *testing.T) {
|
||||||
tr, sink, _, _ := newTracker(t)
|
tr, sink, _, _ := newTracker(t)
|
||||||
tr.Start()
|
tr.Start()
|
||||||
@@ -206,6 +235,7 @@ func TestTracker_AnUnknownKeyIsIgnored(t *testing.T) {
|
|||||||
tr.Begin("no-such-step", 0)
|
tr.Begin("no-such-step", 0)
|
||||||
tr.Advance("no-such-step", 1)
|
tr.Advance("no-such-step", 1)
|
||||||
tr.Done("no-such-step")
|
tr.Done("no-such-step")
|
||||||
|
tr.Fail("no-such-step", errors.New("x"))
|
||||||
})
|
})
|
||||||
require.Equal(t, before, sink.saveCount())
|
require.Equal(t, before, sink.saveCount())
|
||||||
}
|
}
|
||||||
@@ -298,6 +328,8 @@ func TestFrom_WithoutAReporterReturnsOneThatDoesNothing(t *testing.T) {
|
|||||||
r.Begin("x", 3)
|
r.Begin("x", 3)
|
||||||
r.Advance("x", 1)
|
r.Advance("x", 1)
|
||||||
r.Done("x")
|
r.Done("x")
|
||||||
|
r.Fail("x", errors.New("e"))
|
||||||
|
r.Note("n", "k", 1)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user