fix(master): refuse jobs for revoked agents, signal revoked jobs, agent start time wins (#7)
This commit is contained in:
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user