Download this file
| 1 | package main |
| 2 | |
| 3 | import ( |
| 4 | "os" |
| 5 | "regexp" |
| 6 | "testing" |
| 7 | ) |
| 8 | |
| 9 | // TestEveryRegisteredClaimWorkerIsStarted: registerClaimWorkers |
| 10 | // (internal/console/claim_workers.go) names each background worker, but only |
| 11 | // serve's explicit RunClaimWorker list starts one. A worker registered and |
| 12 | // never started passes every console test and does nothing in production. |
| 13 | func TestEveryRegisteredClaimWorkerIsStarted(t *testing.T) { |
| 14 | reg, err := os.ReadFile("../../internal/console/claim_workers.go") |
| 15 | if err != nil { |
| 16 | t.Fatal(err) |
| 17 | } |
| 18 | main, err := os.ReadFile("main.go") |
| 19 | if err != nil { |
| 20 | t.Fatal(err) |
| 21 | } |
| 22 | registered := regexp.MustCompile(`(?m)^\t\t"([A-Za-z]+)":\s+s\.`).FindAllSubmatch(reg, -1) |
| 23 | if len(registered) < 10 { |
| 24 | t.Fatalf("found only %d registered workers; the pattern no longer matches claim_workers.go", len(registered)) |
| 25 | } |
| 26 | started := map[string]bool{} |
| 27 | for _, m := range regexp.MustCompile(`RunClaimWorker\(context\.Background\(\), "([A-Za-z]+)"\)`).FindAllSubmatch(main, -1) { |
| 28 | started[string(m[1])] = true |
| 29 | } |
| 30 | for _, m := range registered { |
| 31 | if name := string(m[1]); !started[name] { |
| 32 | t.Errorf("claim worker %s is registered but serve never starts it", name) |
| 33 | } |
| 34 | } |
| 35 | } |
| 36 | |