Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687package db
import ( "context" "path/filepath" "strings" "testing" "time"
"tangled.org/core/notifier" "tangled.org/core/spindle/models")
func TestWorkflowStartupDelay(t *testing.T) { database, err := Make(context.Background(), filepath.Join(t.TempDir(), "spindle.db")) if err != nil { t.Fatal(err) } t.Cleanup(func() { database.Close() })
n := notifier.New() wid := models.WorkflowId{ PipelineId: models.PipelineId("pipeline"), Name: "build", } if err := database.StatusPending(wid, &n); err != nil { t.Fatal(err) } pendingAt := time.Now().Add(-5 * time.Second).Format(time.RFC3339Nano) if _, err := database.Exec(`update workflow_statuses set created_at = ? where status = 'pending'`, pendingAt); err != nil { t.Fatal(err) } if err := database.StatusRunning(wid, &n); err != nil { t.Fatal(err) }
delay, ok, err := database.WorkflowStartupDelay(context.Background(), wid) if err != nil { t.Fatal(err) } if !ok { t.Fatal("startup delay missing") } if delay < 4*time.Second || delay > 6*time.Second { t.Fatalf("startup delay = %v, want about 5s", delay) }}
func TestWorkflowStartupDelayUsesStatusIndex(t *testing.T) { database, err := Make(context.Background(), filepath.Join(t.TempDir(), "spindle.db")) if err != nil { t.Fatal(err) } t.Cleanup(func() { database.Close() })
rows, err := database.Query(` explain query plan select min(case when status = 'pending' then created_at end), min(case when status = 'running' then created_at end) from workflow_statuses where pipeline_id = ? and workflow = ? `, "pipeline", "build") if err != nil { t.Fatal(err) } defer rows.Close()
usedIndex := false for rows.Next() { var id, parent, unused int var detail string if err := rows.Scan(&id, &parent, &unused, &detail); err != nil { t.Fatal(err) } if strings.Contains(detail, "idx_workflow_statuses_lookup") { usedIndex = true } } if err := rows.Err(); err != nil { t.Fatal(err) } if !usedIndex { t.Fatal("workflow startup query did not use idx_workflow_statuses_lookup") }}