2021-01-17 21:46:25 +08:00
|
|
|
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
2019-07-09 15:41:50 +08:00
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
|
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
|
2019-06-13 11:42:51 +08:00
|
|
|
package gpool_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
2021-10-11 21:41:56 +08:00
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
2019-07-29 21:01:19 +08:00
|
|
|
|
2021-10-11 21:41:56 +08:00
|
|
|
"github.com/gogf/gf/v2/container/gpool"
|
|
|
|
"github.com/gogf/gf/v2/test/gtest"
|
2019-06-13 11:42:51 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
var nf gpool.NewFunc = func() (i interface{}, e error) {
|
|
|
|
return "hello", nil
|
|
|
|
}
|
|
|
|
|
|
|
|
var assertIndex int = 0
|
|
|
|
var ef gpool.ExpireFunc = func(i interface{}) {
|
|
|
|
assertIndex++
|
2020-03-20 08:49:40 +08:00
|
|
|
gtest.Assert(i, assertIndex)
|
2019-06-13 11:42:51 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
func Test_Gpool(t *testing.T) {
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-13 11:42:51 +08:00
|
|
|
//
|
|
|
|
//expire = 0
|
|
|
|
p1 := gpool.New(0, nf)
|
|
|
|
p1.Put(1)
|
|
|
|
p1.Put(2)
|
|
|
|
time.Sleep(1 * time.Second)
|
|
|
|
//test won't be timeout
|
|
|
|
v1, err1 := p1.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err1, nil)
|
|
|
|
t.AssertIN(v1, g.Slice{1, 2})
|
2019-06-13 11:42:51 +08:00
|
|
|
//test clear
|
|
|
|
p1.Clear()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(p1.Size(), 0)
|
2019-06-13 11:42:51 +08:00
|
|
|
//test newFunc
|
|
|
|
v1, err1 = p1.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err1, nil)
|
|
|
|
t.Assert(v1, "hello")
|
2019-06-13 11:42:51 +08:00
|
|
|
//put data again
|
|
|
|
p1.Put(3)
|
|
|
|
p1.Put(4)
|
|
|
|
v1, err1 = p1.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err1, nil)
|
|
|
|
t.AssertIN(v1, g.Slice{3, 4})
|
2019-06-13 11:42:51 +08:00
|
|
|
//test close
|
|
|
|
p1.Close()
|
|
|
|
v1, err1 = p1.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err1, nil)
|
|
|
|
t.Assert(v1, "hello")
|
2019-06-13 11:42:51 +08:00
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-13 11:42:51 +08:00
|
|
|
//
|
|
|
|
//expire > 0
|
2020-03-14 17:12:44 +08:00
|
|
|
p2 := gpool.New(2*time.Second, nil, ef)
|
2019-06-13 11:42:51 +08:00
|
|
|
for index := 0; index < 10; index++ {
|
|
|
|
p2.Put(index)
|
|
|
|
}
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(p2.Size(), 10)
|
2019-06-13 11:42:51 +08:00
|
|
|
v2, err2 := p2.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err2, nil)
|
|
|
|
t.Assert(v2, 0)
|
2019-06-13 11:42:51 +08:00
|
|
|
//test timeout expireFunc
|
|
|
|
time.Sleep(3 * time.Second)
|
|
|
|
v2, err2 = p2.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err2, errors.New("pool is empty"))
|
|
|
|
t.Assert(v2, nil)
|
2019-06-13 11:42:51 +08:00
|
|
|
//test close expireFunc
|
|
|
|
for index := 0; index < 10; index++ {
|
|
|
|
p2.Put(index)
|
|
|
|
}
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(p2.Size(), 10)
|
2019-06-13 11:42:51 +08:00
|
|
|
v2, err2 = p2.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err2, nil)
|
|
|
|
t.Assert(v2, 0)
|
2019-06-13 11:42:51 +08:00
|
|
|
assertIndex = 0
|
|
|
|
p2.Close()
|
|
|
|
time.Sleep(3 * time.Second)
|
|
|
|
})
|
|
|
|
|
2020-03-19 22:56:12 +08:00
|
|
|
gtest.C(t, func(t *gtest.T) {
|
2019-06-13 11:42:51 +08:00
|
|
|
//
|
|
|
|
//expire < 0
|
|
|
|
p3 := gpool.New(-1, nil)
|
|
|
|
v3, err3 := p3.Get()
|
2020-03-19 22:56:12 +08:00
|
|
|
t.Assert(err3, errors.New("pool is empty"))
|
|
|
|
t.Assert(v3, nil)
|
2019-06-13 11:42:51 +08:00
|
|
|
})
|
|
|
|
}
|