Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273package db
import ( "context" "testing"
"tangled.org/core/spindle/models" "tangled.org/core/workflow")
func TestFailOrphanedWorkflowsOnlyTouchesWorkWithNoOwner(t *testing.T) { ctx := context.Background() database := newTestDB(t)
const repo = "did:plc:orphanrepo" tpl := workflow.PipelineSpec{Workflows: []*workflow.WorkflowSpec{{Name: "build"}}} enqueue := func(id string) { t.Helper() record := &models.PipelineRecord{ID: models.PipelineId(id), RepoDID: repo} if err := database.EnqueuePipeline(ctx, repo, record, nil, tpl, "", "", nil); err != nil { t.Fatal(err) } } wid := func(id string) models.WorkflowId { return models.WorkflowId{PipelineId: models.PipelineId(id), Name: "build"} }
for _, id := range []string{"orphan-running", "orphan-pending", "finished", "leased"} { enqueue(id) } for range 4 { if job, err := database.DequeueJob(ctx, nil); err != nil || job == nil { t.Fatalf("dequeue = %v, %v", job, err) } } enqueue("queued")
must := func(err error) { t.Helper() if err != nil { t.Fatal(err) } } must(database.StatusRunning(wid("orphan-running"), nil)) must(database.StatusRunning(wid("finished"), nil)) must(database.StatusSuccess(wid("finished"), nil)) must(database.StatusRunning(wid("leased"), nil)) must(database.SaveMillLease(MillLease{LeaseID: "lease", NodeID: "node", Epoch: "epoch", Engine: "microvm", PipelineID: "leased", Workflow: "build", State: "running"}))
failed, err := database.FailOrphanedWorkflows(nil) if err != nil { t.Fatal(err) } if failed != 2 { t.Fatalf("failed %d workflows, want 2", failed) } want := map[string]models.StatusKind{ "orphan-running": models.StatusKindFailed, "orphan-pending": models.StatusKindFailed, "finished": models.StatusKindSuccess, "leased": models.StatusKindRunning, "queued": models.StatusKindPending, } for id, status := range want { if got, err := database.GetStatus(wid(id)); err != nil || got != status { t.Errorf("%s status = %q (%v), want %q", id, got, err, status) } } if again, err := database.FailOrphanedWorkflows(nil); err != nil || again != 0 { t.Fatalf("second pass failed %d workflows (%v), want 0", again, err) }}