internal/store/queues_test.go
48 lines · 1363 bytes
1package store
2
3import "testing"
4
5// The build queue lists pending builds as well as running ones, so an
6// admin can see what no runner is claiming without walking every repo.
7func TestQueuesListsPendingBuilds(t *testing.T) {
8 s := open(t)
9 if err := s.MigrateUp(); err != nil {
10 t.Fatal(err)
11 }
12 uid, err := s.CreateUser("cmc", true)
13 if err != nil {
14 t.Fatal(err)
15 }
16 if _, err := s.CreateRepo("user", uid, "orgo", "public"); err != nil {
17 t.Fatal(err)
18 }
19 running, err := s.CreateBuild(1, "test", "abc123", "main", `["true"]`, "", "", true)
20 if err != nil {
21 t.Fatal(err)
22 }
23 pending, err := s.CreateBuild(1, "pages", "abc123", "main", `["true"]`, "", "", true)
24 if err != nil {
25 t.Fatal(err)
26 }
27 if _, ok, err := s.ClaimBuild(nil, false); err != nil || !ok {
28 t.Fatalf("claim: %v ok=%v", err, ok)
29 }
30
31 q, err := s.QueueStatus()
32 if err != nil {
33 t.Fatal(err)
34 }
35 if q.Builds.Pending != 1 || q.Builds.Running != 1 {
36 t.Fatalf("counts: %+v", q.Builds)
37 }
38 items := q.Builds.Items
39 if len(items) != 2 {
40 t.Fatalf("items: %+v", items)
41 }
42 if items[0].Number != running || items[0].Status != "running" || items[0].StartedAt == "" {
43 t.Fatalf("running row first: %+v", items[0])
44 }
45 if items[1].Number != pending || items[1].Status != "pending" || items[1].StartedAt != "" || items[1].CreatedAt == "" {
46 t.Fatalf("pending row after: %+v", items[1])
47 }
48}