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  }