github.com/zly-app/zapp@v1.3.3/component/gpool/gpool_test.go (about) 1 /* 2 ------------------------------------------------- 3 Author : zlyuancn 4 date: 2021/3/19 5 Description : 6 ------------------------------------------------- 7 */ 8 9 package gpool 10 11 import ( 12 "errors" 13 "sync" 14 "testing" 15 "time" 16 17 "github.com/stretchr/testify/require" 18 ) 19 20 func TestGo(t *testing.T) { 21 g := NewGPool(new(GPoolConfig)) 22 defer g.Close() 23 24 results := make([]error, 5) 25 var wg sync.WaitGroup 26 wg.Add(len(results)) 27 for i := 0; i < len(results); i++ { 28 g.Go(func(i int) func() error { 29 return func() error { 30 time.Sleep(time.Second) 31 t.Log("GoAsync", i) 32 return nil 33 } 34 }(i), func(i int) func(err error) { 35 return func(err error) { 36 results[i] = err 37 wg.Done() 38 } 39 }(i)) 40 } 41 wg.Wait() 42 } 43 44 func TestGoSync(t *testing.T) { 45 g := NewGPool(new(GPoolConfig)) 46 defer g.Close() 47 48 for i := 0; i < 5; i++ { 49 _ = g.GoSync(func(i int) func() error { 50 return func() error { 51 t.Log("GoSync", i) 52 return nil 53 } 54 }(i)) 55 } 56 57 var wg sync.WaitGroup 58 wg.Add(5) 59 for i := 0; i < 5; i++ { 60 go func(i int) { 61 _ = g.GoSync(func() error { 62 t.Log("Async(GoSync)", i) 63 wg.Done() 64 return nil 65 }) 66 }(i) 67 } 68 wg.Wait() 69 } 70 71 func TestTryGo(t *testing.T) { 72 g := NewGPool(&GPoolConfig{ 73 ThreadCount: 1, 74 }) 75 defer g.Close() 76 77 ok := g.TryGo(func() error { 78 time.Sleep(time.Millisecond * 200) 79 t.Log("TryGo 1") 80 return nil 81 }, nil) 82 if !ok { 83 t.Error("TryGo 1 False") 84 } 85 86 ok = g.TryGo(func() error { 87 time.Sleep(time.Millisecond * 200) 88 t.Log("TryGo 2") 89 return nil 90 }, nil) 91 if !ok { 92 t.Error("TryGo 2 Ok") 93 } 94 } 95 96 func TestTryGoSync(t *testing.T) { 97 g := NewGPool(&GPoolConfig{ 98 ThreadCount: 1, 99 }) 100 defer g.Close() 101 102 } 103 104 func TestClose(t *testing.T) { 105 g := NewGPool(new(GPoolConfig)) 106 time.Sleep(time.Millisecond * 200) 107 g.Close() // 此时已经获取到了 worker, 会走到获取 job 下的stop那里 108 109 g = NewGPool(&GPoolConfig{ 110 ThreadCount: 1, 111 }) 112 g.Go(func() error { 113 time.Sleep(time.Second) 114 return nil 115 }, nil) 116 g.Close() // 此时worker已被占用, 会走到获取 worker 下的stop那里 117 } 118 119 func TestGoAndWait(t *testing.T) { 120 g := NewGPool(new(GPoolConfig)) 121 defer g.Close() 122 123 err := g.GoAndWait() 124 require.Nil(t, err) 125 126 err = g.GoAndWait(func() error { 127 return nil 128 }) 129 require.Nil(t, err) 130 131 err = g.GoAndWait(func() error { 132 return nil 133 }, func() error { 134 return errors.New("2") 135 }, func() error { 136 return errors.New("3") 137 }) 138 require.NotNil(t, err) 139 } 140 141 func TestWait(t *testing.T) { 142 g := NewGPool(&GPoolConfig{ 143 ThreadCount: 1, 144 }) 145 defer g.Close() 146 g.Go(func() error { 147 time.Sleep(time.Second) 148 t.Log("run 1") 149 return nil 150 }, nil) 151 g.Go(func() error { 152 time.Sleep(time.Second) 153 t.Log("run 2") 154 return nil 155 }, nil) 156 g.Wait() 157 }