github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/utils/dbutil/threads/pool_test.go (about) 1 package threads 2 3 import ( 4 "os" 5 "runtime/debug" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestMain(m *testing.M) { 12 debug.SetMaxThreads(10) 13 14 os.Exit(m.Run()) 15 } 16 17 func TestThreadPool(t *testing.T) { 18 19 for name, pool := range map[string]ThreadPool{ 20 "global": GlobalPool, 21 "local": ThreadPool{}, 22 } { 23 t.Run(name, func(t *testing.T) { 24 require := require.New(t) 25 26 require.Equal(8, pool.Cap()) 27 28 got, release := pool.Lock(0) 29 require.Equal(0, got) 30 release(1) 31 32 gotA, releaseA := pool.Lock(10) 33 require.Equal(8, gotA) 34 releaseA(1) 35 36 gotB, releaseB := pool.Lock(10) 37 require.Equal(1, gotB) 38 releaseB(gotB) 39 40 releaseA(gotA) 41 gotB, releaseB = pool.Lock(10) 42 require.Equal(8, gotB) 43 44 // don't releaseB(gotB) to check pools isolation 45 }) 46 } 47 }