github.com/amane3/goreleaser@v0.182.0/internal/semerrgroup/sem_test.go (about) 1 package semerrgroup 2 3 import ( 4 "fmt" 5 "sync" 6 "testing" 7 "time" 8 9 "github.com/amane3/goreleaser/internal/pipe" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestSemaphore(t *testing.T) { 14 var g = New(4) 15 var lock sync.Mutex 16 var counter int 17 for i := 0; i < 10; i++ { 18 g.Go(func() error { 19 time.Sleep(10 * time.Millisecond) 20 lock.Lock() 21 counter++ 22 lock.Unlock() 23 return nil 24 }) 25 } 26 require.NoError(t, g.Wait()) 27 require.Equal(t, counter, 10) 28 } 29 30 func TestSemaphoreOrder(t *testing.T) { 31 var num = 10 32 var g = New(1) 33 var output = []int{} 34 for i := 0; i < num; i++ { 35 i := i 36 g.Go(func() error { 37 output = append(output, i) 38 return nil 39 }) 40 } 41 require.NoError(t, g.Wait()) 42 require.Equal(t, []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, output) 43 } 44 45 func TestSemaphoreOrderError(t *testing.T) { 46 var g = New(1) 47 var output = []int{} 48 for i := 0; i < 10; i++ { 49 i := i 50 g.Go(func() error { 51 output = append(output, i) 52 return fmt.Errorf("fake err") 53 }) 54 } 55 require.EqualError(t, g.Wait(), "fake err") 56 require.Equal(t, []int{0}, output) 57 } 58 59 func TestSemaphoreSkipAware(t *testing.T) { 60 var g = NewSkipAware(New(1)) 61 var lock sync.Mutex 62 var counter int 63 for i := 0; i < 10; i++ { 64 g.Go(func() error { 65 time.Sleep(10 * time.Millisecond) 66 lock.Lock() 67 counter++ 68 lock.Unlock() 69 return pipe.Skip("fake skip") 70 }) 71 } 72 require.EqualError(t, g.Wait(), "fake skip") 73 require.Equal(t, counter, 10) 74 } 75 76 func TestSemaphoreSkipAndRealError(t *testing.T) { 77 var g = NewSkipAware(New(10)) 78 for i := 0; i < 100; i++ { 79 g.Go(func() error { 80 time.Sleep(10 * time.Millisecond) 81 return pipe.Skip("fake skip") 82 }) 83 } 84 g.Go(func() error { 85 time.Sleep(10 * time.Millisecond) 86 return fmt.Errorf("errrrrr") 87 }) 88 require.EqualError(t, g.Wait(), "errrrrr") 89 }