fix(master): refuse jobs for revoked agents, signal revoked jobs, agent start time wins (#7)

This commit is contained in:
2026-10-12 19:14:32 +02:00
parent 93ba6915b9
commit c09e774d74
6 changed files with 138 additions and 57 deletions
+37 -1
View File
@@ -218,7 +218,7 @@ func TestFinishJob_OnlyOnceAndOnlyByOwner(t *testing.T) {
assert.Equal(t, model.JobSucceeded, got.Status)
assert.Equal(t, "r:1@sha256:d", got.ToRef)
assert.Equal(t, "full", got.Output)
assert.True(t, t0.Equal(*got.StartedAt), "started_at set by the first progress is kept")
assert.True(t, fin.StartedAt.Equal(*got.StartedAt), "the agent's started_at wins over the master's progress clock")
assert.True(t, fin.FinishedAt.Equal(*got.FinishedAt))
service, err := s.GetService(ctx, svc)
require.NoError(t, err)
@@ -303,3 +303,39 @@ func TestGetJobAndListJobs(t *testing.T) {
require.NoError(t, err)
assert.Len(t, list, 1)
}
func TestFinishJob_ZeroStartedAtKeepsProgressClock(t *testing.T) {
s := openTestStore(t)
ctx := context.Background()
a, svc := jobFixture(t, s, "a")
j, err := s.CreateJob(ctx, newJob(svc, a))
require.NoError(t, err)
_, err = s.JobProgress(ctx, a, j.ID, "x", t0)
require.NoError(t, err)
ok, err := s.FinishJob(ctx, a, j.ID, model.JobFinish{Status: model.JobFailed, FinishedAt: t0.Add(time.Hour)})
require.NoError(t, err)
require.True(t, ok)
got, err := s.GetJob(ctx, j.ID)
require.NoError(t, err)
assert.True(t, t0.Equal(*got.StartedAt))
}
func TestCreateJob_RefusesRevokedAgent(t *testing.T) {
s := openTestStore(t)
ctx := context.Background()
a, svc := jobFixture(t, s, "a")
_, err := s.RevokeAgent(ctx, a, t0)
require.NoError(t, err)
_, err = s.CreateJob(ctx, newJob(svc, a))
assert.ErrorIs(t, err, model.ErrAgentOffline)
list, err := s.ListJobs(ctx, model.JobFilter{})
require.NoError(t, err)
assert.Empty(t, list, "no job is left behind to block the service")
nj := newJob(svc, a)
nj.AgentID = nil
_, err = s.CreateJob(ctx, nj)
assert.NoError(t, err, "a job that was never routed has no agent to check")
}