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
@@ -46,7 +46,8 @@ func TestAgents_CreateLookupRevoke(t *testing.T) {
_, err = s.AgentByTokenHash(ctx, "nope")
assert.ErrorIs(t, err, model.ErrNotFound)
require.NoError(t, s.RevokeAgent(ctx, created.ID, time.Now()))
_, err = s.RevokeAgent(ctx, created.ID, time.Now())
require.NoError(t, err)
found, err = s.AgentByTokenHash(ctx, "hash-2")
require.NoError(t, err)
assert.NotNil(t, found.RevokedAt)
@@ -88,7 +89,8 @@ func TestAgents_RevokedNameCanBeReused(t *testing.T) {
ctx := context.Background()
old, err := s.CreateAgent(ctx, "node-2", "h1")
require.NoError(t, err)
require.NoError(t, s.RevokeAgent(ctx, old.ID, time.Now()))
_, err = s.RevokeAgent(ctx, old.ID, time.Now())
require.NoError(t, err)
fresh, err := s.CreateAgent(ctx, "node-2", "h2")
require.NoError(t, err)
@@ -104,7 +106,8 @@ func TestAgents_RevokeRemovesOwnComposeAndContainerServices(t *testing.T) {
id := newAgent(t, s, "swarm-mgr")
require.NoError(t, s.ApplySnapshot(ctx, id, manager, []protocol.Service{slusk, adhoc, gitea}, t0))
require.NoError(t, s.RevokeAgent(ctx, id, t0.Add(time.Hour)))
_, err := s.RevokeAgent(ctx, id, t0.Add(time.Hour))
require.NoError(t, err)
got, err := s.ListServices(ctx)
require.NoError(t, err)
@@ -115,7 +118,8 @@ func TestRevokedAgent_InventoryWritesRefused(t *testing.T) {
s := openTestStore(t)
ctx := context.Background()
id := newAgent(t, s, "node-2")
require.NoError(t, s.RevokeAgent(ctx, id, t0))
_, err := s.RevokeAgent(ctx, id, t0)
require.NoError(t, err)
assert.ErrorIs(t, s.ApplySnapshot(ctx, id, worker, []protocol.Service{slusk}, t0.Add(time.Minute)), model.ErrRevoked)
assert.ErrorIs(t, s.UpsertService(ctx, id, "", adhoc, t0.Add(time.Minute)), model.ErrRevoked)
@@ -130,7 +134,8 @@ func TestRevokedAgent_UpsertDoesNotResurrectRemovedRow(t *testing.T) {
ctx := context.Background()
id := newAgent(t, s, "node-2")
require.NoError(t, s.ApplySnapshot(ctx, id, worker, []protocol.Service{slusk}, t0))
require.NoError(t, s.RevokeAgent(ctx, id, t0.Add(time.Hour)))
_, err := s.RevokeAgent(ctx, id, t0.Add(time.Hour))
require.NoError(t, err)
assert.ErrorIs(t, s.UpsertService(ctx, id, "", slusk, t0.Add(2*time.Hour)), model.ErrRevoked)
@@ -149,7 +154,9 @@ func TestRevokeAgent_FailsActiveJobs(t *testing.T) {
jb, err := s.CreateJob(ctx, newJob(svcB, b))
require.NoError(t, err)
require.NoError(t, s.RevokeAgent(ctx, a, t0))
failed, err := s.RevokeAgent(ctx, a, t0)
require.NoError(t, err)
assert.Equal(t, []int64{ja.ID}, failed, "the failed job IDs are returned so the UI can signal them")
got, err := s.GetJob(ctx, ja.ID)
require.NoError(t, err)