2
0

Extract createCreateResourceFunc

This commit is contained in:
Jack Christensen
2018-12-24 11:46:33 -06:00
parent 18c4f8306a
commit 21f1464f4b
+25 -62
View File
@@ -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)