Extract createCreateResourceFunc
This commit is contained in:
+25
-62
@@ -34,13 +34,18 @@ func (c *Counter) Value() int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createCreateResourceFunc() (puddle.CreateFunc, *Counter) {
|
||||||
|
var c Counter
|
||||||
|
f := func() (interface{}, error) {
|
||||||
|
return c.Next(), nil
|
||||||
|
}
|
||||||
|
return f, &c
|
||||||
|
}
|
||||||
|
|
||||||
func stubCloseRes(interface{}) error { return nil }
|
func stubCloseRes(interface{}) error { return nil }
|
||||||
|
|
||||||
func TestPoolGetCreatesResourceWhenNoneAvailable(t *testing.T) {
|
func TestPoolGetCreatesResourceWhenNoneAvailable(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
|
|
||||||
res, err := pool.Get(context.Background())
|
res, err := pool.Get(context.Background())
|
||||||
@@ -51,20 +56,14 @@ func TestPoolGetCreatesResourceWhenNoneAvailable(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolSetMinSizeImmediatelyCreatesNewResources(t *testing.T) {
|
func TestPoolSetMinSizeImmediatelyCreatesNewResources(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
pool.SetMinSize(2)
|
pool.SetMinSize(2)
|
||||||
assert.Equal(t, 2, pool.Size())
|
assert.Equal(t, 2, pool.Size())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolGetDoesNotCreatesResourceWhenItWouldExceedMaxSize(t *testing.T) {
|
func TestPoolGetDoesNotCreatesResourceWhenItWouldExceedMaxSize(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, createCounter := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
pool.SetMaxSize(1)
|
pool.SetMaxSize(1)
|
||||||
|
|
||||||
@@ -85,7 +84,7 @@ func TestPoolGetDoesNotCreatesResourceWhenItWouldExceedMaxSize(t *testing.T) {
|
|||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
assert.Equal(t, 1, createCalls.Value())
|
assert.Equal(t, 1, createCounter.Value())
|
||||||
assert.Equal(t, 1, pool.Size())
|
assert.Equal(t, 1, pool.Size())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,10 +101,7 @@ func TestPoolGetReturnsErrorFromFailedResourceCreate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolGetReusesResources(t *testing.T) {
|
func TestPoolGetReusesResources(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, createCounter := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
|
|
||||||
res, err := pool.Get(context.Background())
|
res, err := pool.Get(context.Background())
|
||||||
@@ -120,7 +116,7 @@ func TestPoolGetReusesResources(t *testing.T) {
|
|||||||
|
|
||||||
pool.Return(res)
|
pool.Return(res)
|
||||||
|
|
||||||
assert.Equal(t, 1, createCalls.Value())
|
assert.Equal(t, 1, createCounter.Value())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolGetContextAlreadyCanceled(t *testing.T) {
|
func TestPoolGetContextAlreadyCanceled(t *testing.T) {
|
||||||
@@ -153,20 +149,14 @@ func TestPoolGetContextCanceledDuringCreate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolReturnPanicsIfResourceNotPartOfPool(t *testing.T) {
|
func TestPoolReturnPanicsIfResourceNotPartOfPool(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
|
|
||||||
assert.Panics(t, func() { pool.Return(42) })
|
assert.Panics(t, func() { pool.Return(42) })
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolReturnClosesAndRemovesResourceIfOlderThanMaxDuration(t *testing.T) {
|
func TestPoolReturnClosesAndRemovesResourceIfOlderThanMaxDuration(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
var closeCalls Counter
|
var closeCalls Counter
|
||||||
closeFunc := func(interface{}) error {
|
closeFunc := func(interface{}) error {
|
||||||
closeCalls.Next()
|
closeCalls.Next()
|
||||||
@@ -198,10 +188,7 @@ func TestPoolReturnClosesAndRemovesResourceIfMoreUsesThanMaxResourceUses(t *test
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
var closeCalls Counter
|
var closeCalls Counter
|
||||||
closeFunc := func(interface{}) error {
|
closeFunc := func(interface{}) error {
|
||||||
n := closeCalls.Next()
|
n := closeCalls.Next()
|
||||||
@@ -224,10 +211,7 @@ func TestPoolReturnClosesAndRemovesResourceIfMoreUsesThanMaxResourceUses(t *test
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolCloseClosesAllAvailableResources(t *testing.T) {
|
func TestPoolCloseClosesAllAvailableResources(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var closeCalls Counter
|
var closeCalls Counter
|
||||||
closeFunc := func(interface{}) error {
|
closeFunc := func(interface{}) error {
|
||||||
@@ -265,10 +249,7 @@ func TestPoolReturnClosesResourcePoolIsAlreadyClosed(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var closeCalls Counter
|
var closeCalls Counter
|
||||||
closeFunc := func(interface{}) error {
|
closeFunc := func(interface{}) error {
|
||||||
@@ -302,20 +283,14 @@ func TestPoolReturnClosesResourcePoolIsAlreadyClosed(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolRemovePanicsIfResourceNotPartOfPool(t *testing.T) {
|
func TestPoolRemovePanicsIfResourceNotPartOfPool(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
|
|
||||||
assert.Panics(t, func() { pool.Remove(42) })
|
assert.Panics(t, func() { pool.Remove(42) })
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolRemoveRemovesResourceFromPool(t *testing.T) {
|
func TestPoolRemoveRemovesResourceFromPool(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
|
|
||||||
res, err := pool.Get(context.Background())
|
res, err := pool.Get(context.Background())
|
||||||
@@ -457,10 +432,7 @@ func TestPoolRemoveRemovesResourceFromPoolAndDoesNotStartNewCreationToMaintainMi
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolGetReturnsErrorWhenPoolIsClosed(t *testing.T) {
|
func TestPoolGetReturnsErrorWhenPoolIsClosed(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
pool.Close()
|
pool.Close()
|
||||||
|
|
||||||
@@ -511,10 +483,7 @@ func TestPoolGetLateFailedCreateErrorIsReported(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolCloseResourceCloseErrorIsReported(t *testing.T) {
|
func TestPoolCloseResourceCloseErrorIsReported(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
errCloseFailed := errors.New("close failed")
|
errCloseFailed := errors.New("close failed")
|
||||||
closeFunc := func(res interface{}) error { return errCloseFailed }
|
closeFunc := func(res interface{}) error { return errCloseFailed }
|
||||||
pool := puddle.NewPool(createFunc, closeFunc)
|
pool := puddle.NewPool(createFunc, closeFunc)
|
||||||
@@ -538,10 +507,7 @@ func TestPoolCloseResourceCloseErrorIsReported(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestPoolReturnClosesResourcePoolIsAlreadyClosedErrorIsReported(t *testing.T) {
|
func TestPoolReturnClosesResourcePoolIsAlreadyClosedErrorIsReported(t *testing.T) {
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
errCloseFailed := errors.New("close failed")
|
errCloseFailed := errors.New("close failed")
|
||||||
closeFunc := func(res interface{}) error { return errCloseFailed }
|
closeFunc := func(res interface{}) error { return errCloseFailed }
|
||||||
@@ -586,10 +552,7 @@ func BenchmarkPoolGetAndReturnHeavyContention(b *testing.B) {
|
|||||||
poolSize := 8
|
poolSize := 8
|
||||||
contentionClients := 15
|
contentionClients := 15
|
||||||
|
|
||||||
var createCalls Counter
|
createFunc, _ := createCreateResourceFunc()
|
||||||
createFunc := func() (interface{}, error) {
|
|
||||||
return createCalls.Next(), nil
|
|
||||||
}
|
|
||||||
pool := puddle.NewPool(createFunc, stubCloseRes)
|
pool := puddle.NewPool(createFunc, stubCloseRes)
|
||||||
pool.SetMaxSize(poolSize)
|
pool.SetMaxSize(poolSize)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user