返回 DeepSeek-Reasonix
worktree_merge_admission_wait_test.go
根目录 / desktop / worktree_merge_admission_wait_test.go
1 package main
2
3 import (
4 "context"
5 "testing"
6 "time"
7
8 "reasonix/internal/worktree"
9 )
10
11 func startFinalizeAdmissionTest(t *testing.T, app *App, request worktree.CleanupRequest) <-chan error {
12 t.Helper()
13 ctx, cancel := context.WithCancel(context.Background())
14 app.ctx = ctx
15 result := make(chan error, 1)
16 finished := make(chan struct{})
17 go func() {
18 defer close(finished)
19 _, err := app.FinalizeWorktreeMerge(request)
20 result <- err
21 }()
22 // Run before the test restores shared hooks, including assertion failures.
23 t.Cleanup(func() {
24 cancel()
25 select {
26 case <-finished:
27 case <-time.After(5 * time.Second):
28 t.Error("finalize worker did not stop after cancellation")
29 }
30 })
31 return result
32 }
33
34 func waitForFinalizeAdmissionGate(t *testing.T, entered <-chan struct{}, result <-chan error) {
35 t.Helper()
36 select {
37 case <-entered:
38 case err := <-result:
39 t.Fatalf("finalize returned before admission gate: %v", err)
40 case <-time.After(5 * time.Second):
41 t.Fatal("finalize did not reach admission gate")
42 }
43 }
44
45 func waitForFinalizeAdmissionResult(t *testing.T, result <-chan error) error {
46 t.Helper()
47 select {
48 case err := <-result:
49 return err
50 case <-time.After(5 * time.Second):
51 t.Fatal("finalize did not complete after gate release")
52 return nil
53 }
54 }
55
55 lines GO