11package stack
22
33import (
4+ "fmt"
45 "sync"
56 "testing"
67 "time"
@@ -32,9 +33,13 @@ func TestLock_BlocksUntilReleased(t *testing.T) {
3233 require .NoError (t , err )
3334
3435 acquired := make (chan struct {})
36+ errCh := make (chan error , 1 )
3537 go func () {
3638 lock2 , err := Lock (dir )
37- require .NoError (t , err )
39+ if err != nil {
40+ errCh <- err
41+ return
42+ }
3843 close (acquired )
3944 lock2 .Unlock ()
4045 }()
@@ -43,6 +48,8 @@ func TestLock_BlocksUntilReleased(t *testing.T) {
4348 select {
4449 case <- acquired :
4550 t .Fatal ("lock2 acquired while lock1 was still held" )
51+ case err := <- errCh :
52+ t .Fatalf ("lock2 failed: %v" , err )
4653 case <- time .After (300 * time .Millisecond ):
4754 // expected — lock2 is waiting
4855 }
@@ -53,6 +60,8 @@ func TestLock_BlocksUntilReleased(t *testing.T) {
5360 select {
5461 case <- acquired :
5562 // success
63+ case err := <- errCh :
64+ t .Fatalf ("lock2 failed after lock1 released: %v" , err )
5665 case <- time .After (5 * time .Second ):
5766 t .Fatal ("lock2 did not acquire after lock1 was released" )
5867 }
@@ -67,24 +76,38 @@ func TestLock_SerializesConcurrentAccess(t *testing.T) {
6776
6877 // Run 10 concurrent goroutines, each adding a stack under lock.
6978 // Uses Lock + Load + SaveLocked for atomic read-modify-write.
79+ errCh := make (chan error , 10 )
7080 var wg sync.WaitGroup
7181 for i := 0 ; i < 10 ; i ++ {
7282 wg .Add (1 )
7383 go func (idx int ) {
7484 defer wg .Done ()
7585
7686 lock , err := Lock (dir )
77- require .NoError (t , err )
87+ if err != nil {
88+ errCh <- fmt .Errorf ("goroutine %d Lock: %w" , idx , err )
89+ return
90+ }
7891 defer lock .Unlock ()
7992
8093 loaded , err := Load (dir )
81- require .NoError (t , err )
94+ if err != nil {
95+ errCh <- fmt .Errorf ("goroutine %d Load: %w" , idx , err )
96+ return
97+ }
8298
8399 loaded .AddStack (makeStack ("main" , "branch" ))
84- require .NoError (t , SaveLocked (dir , loaded ))
100+ if err := SaveLocked (dir , loaded ); err != nil {
101+ errCh <- fmt .Errorf ("goroutine %d SaveLocked: %w" , idx , err )
102+ }
85103 }(i )
86104 }
87105 wg .Wait ()
106+ close (errCh )
107+
108+ for err := range errCh {
109+ t .Error (err )
110+ }
88111
89112 // All 10 stacks should be present — no lost updates.
90113 final , err := Load (dir )
0 commit comments