mirror of
https://gitee.com/johng/gf.git
synced 2024-12-04 21:28:22 +08:00
e254b4f3c0
* gTcp Example Function: 1.NewConn 2.NewConnTLS 3.NewConnKeyCrt * gTcp Example Function: 1.Send * add example function ExampleConn_Recv and ExampleConn_RecvWithTimeout * add example function 1. ExampleConn_SendWithTimeout 2. ExampleConn_RecvLine 3. ExampleConn_RecvTill * add example function 1. ExampleConn_SendRecv 2. ExampleConn_SendRecvWithTimeout 3. ExampleConn_SetDeadline 4. ExampleConn_SetReceiveBufferWait * add gtcp test function 1. Test_Package_Option_HeadSize4 2. Test_Package_Option_Error * add gtcp example function 1. ExampleGetFreePorts 2. ExampleSend 3. ExampleSendRecv 4. ExampleSendWithTimeout 5. ExampleSendRecvWithTimeout 6. ExampleMustGetFreePort * add gtcp example function 1. ExampleSendPkg 2. ExampleSendRecvPkg 3. ExampleSendPkgWithTimeout 4. ExampleSendRecvPkgWithTimeout * add gtcp test function 1. Test_Pool_Send 2. Test_Pool_Recv 3. Test_Pool_RecvLine 4. Test_Pool_RecvTill 5. Test_Pool_RecvWithTimeout 6. Test_Pool_SendWithTimeout 7. Test_Pool_SendRecvWithTimeout * fix * add gtcp example function 1. ExampleGetServer 2. ExampleSetAddress 3. ExampleSetHandler 4. ExampleRun_NilHandle * exec CI * exec CI * exec CI * modify test server address * modify and exec CI * modify and exec CI * modify and exec CI * modify and exec CI * modify and exec CI * modify and exec CI * add example funcion ExampleConn_Recv_Once and fix * fix * add some error case in example function * add some error case in example function * 1.add example function ExampleNewServerKeyCrt 2.add function SendRecvPkgWithTimeout unit test * add function Test_Server_NewServerKeyCrt unit test * revert * add function Test_Package_Timeout, Test_Package_Option_HeadSize3, Test_Conn_RecvPkgError unit test * fix * add example function 1.ExampleClient_Clone 2.ExampleLoadKeyCrt * add example function 1.ExampleNewNetConnKeyCrt * fix * add example function 1.ExampleClient_DeleteBytes 2.ExampleClient_HeadBytes 3.ExampleClient_PatchBytes 4.ExampleClient_ConnectBytes 5.ExampleClient_OptionsBytes 6.ExampleClient_TraceBytes 7.ExampleClient_PutBytes * add example function 1.ExampleClient_Prefix 2.ExampleClient_Retry 3.ExampleClient_RedirectLimit * add example function 1.ExampleClient_SetBrowserMode 2.ExampleClient_SetHeader 3.ExampleClient_SetRedirectLimit * add example function 1.ExampleClient_SetTLSKeyCrt 2.ExampleClient_SetTLSConfig modify example funcion 1.ExampleClient_SetProxy 2.ExampleClient_Proxy * add example function 1.ExampleClient_PutContent 2.ExampleClient_DeleteContent 3.ExampleClient_HeadContent 4.ExampleClient_PatchContent 5.ExampleClient_ConnectContent 6.ExampleClient_OptionsContent 7.ExampleClient_TraceContent 8.ExampleClient_RequestContent * add example function 1.ExampleClient_RawRequest * add unit function 1.TestGetFreePorts 2.TestNewConn 3.TestNewConnTLS 4.TestNewConnKeyCrt 5.TestConn_SendWithTimeout * add unit function 1.TestConn_Send 2.TestConn_SendRecv 3.TestConn_SendRecvWithTimeout * modify * modify * add example function 1.TestConn_SetReceiveBufferWait 2.TestNewNetConnKeyCrt 3.TestSend * add example function 1.TestSendRecv 2.TestSendWithTimeout * add unit function 1.TestMustGetFreePort 2.TestSendRecvWithTimeout 3.TestSendPkg * add client recevied server's response content assert * modify * modify * add example function 1.TestSendRecvPkg 2.TestSendPkgWithTimeout 3.TestSendRecvPkgWithTimeout * add GetAddress() function add unit funciton 1.TestNewServer 2.TestGetServer 3.TestServer_SetAddress 4.TestServer_SetHandler 5.TestServer_Run * modify * modify * add unit funciton 1.TestLoadKeyCrt * modify * delete function fromHex * add gclient dump unit test * add example function 1.ExampleClient_Put 2.ExampleClient_Delete 3.ExampleClient_Head 4.ExampleClient_Patch 5.ExampleClient_Connect 6.ExampleClient_Options 7.ExampleClient_Trace * add example function 1.TestClient_DoRequest * add example function 1.ExampleClient_PutVar 2.ExampleClient_DeleteVar 3.ExampleClient_HeadVar 4.ExampleClient_PatchVar 5.ExampleClient_ConnectVar 6.ExampleClient_OptionsVar 7.ExampleClient_TraceVar * modify * modify * add CustomProvider function * modify * add unit funciton 1.Test_NewConn 2.Test_GetFreePorts * add unit funciton 1.Test_Server * garray_normal_any code converage * garray_normal_int code converage * garray_normal_str code converage * garray_sorted_any code converage * garray_sorted_int code converage * garray_sorted_str code converage * glist code converage * gmap, gmap_hash_any_any_map code converage * gmap_hash_int_any_map code converage * gmap_hash_int_any_map code converage * gmap_hash_int_int_map code converage * gmap_hash_int_str_map code converage * gmap_hash_str_any_map code converage * gmap_hash_str_int_map code converage * gmap_hash_str_str_map code converage * gmap_list_map code converage * gmap_list_map code converage * revert gf.yml * add gtest unit test function * add ut cases for package gcache * add ut cases for package gcache * add ut cases for package gcache * add ut cases for package gcache * add ut cases for package gcache * modify Co-authored-by: John Guo <john@johng.cn>
625 lines
15 KiB
Go
625 lines
15 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// 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.
|
|
|
|
// go test *.go -bench=".*" -benchmem
|
|
|
|
package gcache_test
|
|
|
|
import (
|
|
"context"
|
|
"math"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gogf/gf/v2/container/gset"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/os/gcache"
|
|
"github.com/gogf/gf/v2/os/grpool"
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
"github.com/gogf/gf/v2/util/guid"
|
|
)
|
|
|
|
var (
|
|
ctx = context.Background()
|
|
)
|
|
|
|
func TestCache_GCache_Set(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
t.AssertNil(gcache.Set(ctx, 1, 11, 0))
|
|
defer gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
v, _ := gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
b, _ := gcache.Contains(ctx, 1)
|
|
t.Assert(b, true)
|
|
})
|
|
}
|
|
|
|
func TestCache_Set(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
c := gcache.New()
|
|
defer c.Close(ctx)
|
|
t.Assert(c.Set(ctx, 1, 11, 0), nil)
|
|
v, _ := c.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
b, _ := c.Contains(ctx, 1)
|
|
t.Assert(b, true)
|
|
})
|
|
}
|
|
|
|
func TestCache_Set_Expire(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.Assert(cache.Set(ctx, 2, 22, 100*time.Millisecond), nil)
|
|
v, _ := cache.Get(ctx, 2)
|
|
t.Assert(v, 22)
|
|
time.Sleep(200 * time.Millisecond)
|
|
v, _ = cache.Get(ctx, 2)
|
|
t.Assert(v, nil)
|
|
time.Sleep(3 * time.Second)
|
|
n, _ := cache.Size(ctx)
|
|
t.Assert(n, 0)
|
|
t.Assert(cache.Close(ctx), nil)
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.Assert(cache.Set(ctx, 1, 11, 100*time.Millisecond), nil)
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
time.Sleep(200 * time.Millisecond)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, nil)
|
|
})
|
|
}
|
|
|
|
func TestCache_Update(t *testing.T) {
|
|
// gcache
|
|
gtest.C(t, func(t *gtest.T) {
|
|
key := guid.S()
|
|
t.AssertNil(gcache.Set(ctx, key, 11, 3*time.Second))
|
|
expire1, _ := gcache.GetExpire(ctx, key)
|
|
oldValue, exist, err := gcache.Update(ctx, key, 12)
|
|
t.AssertNil(err)
|
|
t.Assert(oldValue, 11)
|
|
t.Assert(exist, true)
|
|
|
|
expire2, _ := gcache.GetExpire(ctx, key)
|
|
v, _ := gcache.Get(ctx, key)
|
|
t.Assert(v, 12)
|
|
t.Assert(math.Ceil(expire1.Seconds()), math.Ceil(expire2.Seconds()))
|
|
})
|
|
// gcache.Cache
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.AssertNil(cache.Set(ctx, 1, 11, 3*time.Second))
|
|
|
|
oldValue, exist, err := cache.Update(ctx, 1, 12)
|
|
t.AssertNil(err)
|
|
t.Assert(oldValue, 11)
|
|
t.Assert(exist, true)
|
|
|
|
expire1, _ := cache.GetExpire(ctx, 1)
|
|
expire2, _ := cache.GetExpire(ctx, 1)
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 12)
|
|
t.Assert(math.Ceil(expire1.Seconds()), math.Ceil(expire2.Seconds()))
|
|
})
|
|
}
|
|
|
|
func TestCache_UpdateExpire(t *testing.T) {
|
|
// gcache
|
|
gtest.C(t, func(t *gtest.T) {
|
|
key := guid.S()
|
|
t.AssertNil(gcache.Set(ctx, key, 11, 3*time.Second))
|
|
defer gcache.Remove(ctx, key)
|
|
oldExpire, _ := gcache.GetExpire(ctx, key)
|
|
newExpire := 10 * time.Second
|
|
oldExpire2, err := gcache.UpdateExpire(ctx, key, newExpire)
|
|
t.AssertNil(err)
|
|
t.AssertIN(oldExpire2, g.Slice{oldExpire, `2.999s`})
|
|
|
|
e, _ := gcache.GetExpire(ctx, key)
|
|
t.AssertNE(e, oldExpire)
|
|
e, _ = gcache.GetExpire(ctx, key)
|
|
t.Assert(math.Ceil(e.Seconds()), 10)
|
|
})
|
|
// gcache.Cache
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.AssertNil(cache.Set(ctx, 1, 11, 3*time.Second))
|
|
oldExpire, _ := cache.GetExpire(ctx, 1)
|
|
newExpire := 10 * time.Second
|
|
oldExpire2, err := cache.UpdateExpire(ctx, 1, newExpire)
|
|
t.AssertNil(err)
|
|
t.AssertIN(oldExpire2, g.Slice{oldExpire, `2.999s`})
|
|
|
|
e, _ := cache.GetExpire(ctx, 1)
|
|
t.AssertNE(e, oldExpire)
|
|
|
|
e, _ = cache.GetExpire(ctx, 1)
|
|
t.Assert(math.Ceil(e.Seconds()), 10)
|
|
})
|
|
}
|
|
|
|
func TestCache_Keys_Values(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
c := gcache.New()
|
|
for i := 0; i < 10; i++ {
|
|
t.Assert(c.Set(ctx, i, i*10, 0), nil)
|
|
}
|
|
var (
|
|
keys, _ = c.Keys(ctx)
|
|
values, _ = c.Values(ctx)
|
|
)
|
|
t.Assert(len(keys), 10)
|
|
t.Assert(len(values), 10)
|
|
t.AssertIN(0, keys)
|
|
t.AssertIN(90, values)
|
|
})
|
|
}
|
|
|
|
func TestCache_LRU(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New(2)
|
|
for i := 0; i < 10; i++ {
|
|
t.AssertNil(cache.Set(ctx, i, i, 0))
|
|
}
|
|
n, _ := cache.Size(ctx)
|
|
t.Assert(n, 10)
|
|
v, _ := cache.Get(ctx, 6)
|
|
t.Assert(v, 6)
|
|
time.Sleep(4 * time.Second)
|
|
g.Log().Debugf(ctx, `items after lru: %+v`, cache.MustData(ctx))
|
|
n, _ = cache.Size(ctx)
|
|
t.Assert(n, 2)
|
|
v, _ = cache.Get(ctx, 6)
|
|
t.Assert(v, 6)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, nil)
|
|
t.Assert(cache.Close(ctx), nil)
|
|
})
|
|
}
|
|
|
|
func TestCache_LRU_expire(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New(2)
|
|
t.Assert(cache.Set(ctx, 1, nil, 1000), nil)
|
|
n, _ := cache.Size(ctx)
|
|
t.Assert(n, 1)
|
|
v, _ := cache.Get(ctx, 1)
|
|
|
|
t.Assert(v, nil)
|
|
})
|
|
}
|
|
|
|
func TestCache_SetIfNotExist(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
ok, err := cache.SetIfNotExist(ctx, 1, 11, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
ok, err = cache.SetIfNotExist(ctx, 1, 22, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, false)
|
|
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
ok, err = cache.SetIfNotExist(ctx, 2, 22, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
v, _ = cache.Get(ctx, 2)
|
|
t.Assert(v, 22)
|
|
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
ok, err = gcache.SetIfNotExist(ctx, 1, 11, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
v, _ = gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
ok, err = gcache.SetIfNotExist(ctx, 1, 22, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, false)
|
|
|
|
v, _ = gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_SetIfNotExistFunc(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
exist, err := cache.SetIfNotExistFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, true)
|
|
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
exist, err = cache.SetIfNotExistFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 22, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, false)
|
|
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
gtest.C(t, func(t *gtest.T) {
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
|
|
ok, err := gcache.SetIfNotExistFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
v, _ := gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
ok, err = gcache.SetIfNotExistFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 22, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, false)
|
|
|
|
v, _ = gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_SetIfNotExistFuncLock(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
exist, err := cache.SetIfNotExistFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, true)
|
|
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
exist, err = cache.SetIfNotExistFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 22, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, false)
|
|
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
gtest.C(t, func(t *gtest.T) {
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
|
|
exist, err := gcache.SetIfNotExistFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, true)
|
|
|
|
v, _ := gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
exist, err = gcache.SetIfNotExistFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 22, nil
|
|
}, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(exist, false)
|
|
|
|
v, _ = gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_SetMap(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.AssertNil(cache.SetMap(ctx, g.MapAnyAny{1: 11, 2: 22}, 0))
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
t.AssertNil(gcache.SetMap(ctx, g.MapAnyAny{1: 11, 2: 22}, 0))
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_GetOrSet(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
value, err := cache.GetOrSet(ctx, 1, 11, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(value, 11)
|
|
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
value, err = cache.GetOrSet(ctx, 1, 111, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(value, 11)
|
|
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
value, err := gcache.GetOrSet(ctx, 1, 11, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(value, 11)
|
|
|
|
v, err := gcache.Get(ctx, 1)
|
|
t.AssertNil(err)
|
|
t.Assert(v, 11)
|
|
|
|
value, err = gcache.GetOrSet(ctx, 1, 111, 0)
|
|
t.AssertNil(err)
|
|
t.Assert(value, 11)
|
|
|
|
v, err = gcache.Get(ctx, 1)
|
|
t.AssertNil(err)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_GetOrSetFunc(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
cache.GetOrSetFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
cache.GetOrSetFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 111, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
|
|
gcache.GetOrSetFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
gcache.GetOrSetFunc(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 111, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_GetOrSetFuncLock(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
cache.GetOrSetFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
cache.GetOrSetFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 111, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
gcache.GetOrSetFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 11, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
|
|
gcache.GetOrSetFuncLock(ctx, 1, func(ctx context.Context) (value interface{}, err error) {
|
|
return 111, nil
|
|
}, 0)
|
|
v, _ = cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
})
|
|
}
|
|
|
|
func TestCache_Clear(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
cache.SetMap(ctx, g.MapAnyAny{1: 11, 2: 22}, 0)
|
|
cache.Clear(ctx)
|
|
n, _ := cache.Size(ctx)
|
|
t.Assert(n, 0)
|
|
})
|
|
}
|
|
|
|
func TestCache_SetConcurrency(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
pool := grpool.New(4)
|
|
go func() {
|
|
for {
|
|
pool.Add(ctx, func(ctx context.Context) {
|
|
cache.SetIfNotExist(ctx, 1, 11, 10)
|
|
})
|
|
}
|
|
}()
|
|
select {
|
|
case <-time.After(2 * time.Second):
|
|
// t.Log("first part end")
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
pool.Add(ctx, func(ctx context.Context) {
|
|
cache.SetIfNotExist(ctx, 1, nil, 10)
|
|
})
|
|
}
|
|
}()
|
|
select {
|
|
case <-time.After(2 * time.Second):
|
|
// t.Log("second part end")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCache_Basic(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
{
|
|
cache := gcache.New()
|
|
cache.SetMap(ctx, g.MapAnyAny{1: 11, 2: 22}, 0)
|
|
b, _ := cache.Contains(ctx, 1)
|
|
t.Assert(b, true)
|
|
v, _ := cache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
data, _ := cache.Data(ctx)
|
|
t.Assert(data[1], 11)
|
|
t.Assert(data[2], 22)
|
|
t.Assert(data[3], nil)
|
|
n, _ := cache.Size(ctx)
|
|
t.Assert(n, 2)
|
|
keys, _ := cache.Keys(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{1, 2}).Equal(gset.NewFrom(keys)), true)
|
|
keyStrs, _ := cache.KeyStrings(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{"1", "2"}).Equal(gset.NewFrom(keyStrs)), true)
|
|
values, _ := cache.Values(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{11, 22}).Equal(gset.NewFrom(values)), true)
|
|
removeData1, _ := cache.Remove(ctx, 1)
|
|
t.Assert(removeData1, 11)
|
|
n, _ = cache.Size(ctx)
|
|
t.Assert(n, 1)
|
|
|
|
cache.Remove(ctx, 2)
|
|
n, _ = cache.Size(ctx)
|
|
t.Assert(n, 0)
|
|
}
|
|
|
|
gcache.Remove(ctx, g.Slice{1, 2, 3}...)
|
|
{
|
|
gcache.SetMap(ctx, g.MapAnyAny{1: 11, 2: 22}, 0)
|
|
b, _ := gcache.Contains(ctx, 1)
|
|
t.Assert(b, true)
|
|
v, _ := gcache.Get(ctx, 1)
|
|
t.Assert(v, 11)
|
|
data, _ := gcache.Data(ctx)
|
|
t.Assert(data[1], 11)
|
|
t.Assert(data[2], 22)
|
|
t.Assert(data[3], nil)
|
|
n, _ := gcache.Size(ctx)
|
|
t.Assert(n, 2)
|
|
keys, _ := gcache.Keys(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{1, 2}).Equal(gset.NewFrom(keys)), true)
|
|
keyStrs, _ := gcache.KeyStrings(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{"1", "2"}).Equal(gset.NewFrom(keyStrs)), true)
|
|
values, _ := gcache.Values(ctx)
|
|
t.Assert(gset.NewFrom(g.Slice{11, 22}).Equal(gset.NewFrom(values)), true)
|
|
removeData1, _ := gcache.Remove(ctx, 1)
|
|
t.Assert(removeData1, 11)
|
|
n, _ = gcache.Size(ctx)
|
|
t.Assert(n, 1)
|
|
gcache.Remove(ctx, 2)
|
|
n, _ = gcache.Size(ctx)
|
|
t.Assert(n, 0)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestCache_Removes(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.New()
|
|
t.AssertNil(cache.Set(ctx, 1, 11, 0))
|
|
t.AssertNil(cache.Set(ctx, 2, 22, 0))
|
|
t.AssertNil(cache.Set(ctx, 3, 33, 0))
|
|
t.AssertNil(cache.Removes(ctx, g.Slice{2, 3}))
|
|
|
|
ok, err := cache.Contains(ctx, 1)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
ok, err = cache.Contains(ctx, 2)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, false)
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
t.AssertNil(gcache.Set(ctx, 1, 11, 0))
|
|
t.AssertNil(gcache.Set(ctx, 2, 22, 0))
|
|
t.AssertNil(gcache.Set(ctx, 3, 33, 0))
|
|
t.AssertNil(gcache.Removes(ctx, g.Slice{2, 3}))
|
|
|
|
ok, err := gcache.Contains(ctx, 1)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, true)
|
|
|
|
ok, err = gcache.Contains(ctx, 2)
|
|
t.AssertNil(err)
|
|
t.Assert(ok, false)
|
|
})
|
|
}
|
|
|
|
func TestCache_Basic_Must(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
defer gcache.Remove(ctx, g.Slice{1, 2, 3, 4}...)
|
|
|
|
t.AssertNil(gcache.Set(ctx, 1, 11, 0))
|
|
v := gcache.MustGet(ctx, 1)
|
|
t.Assert(v, 11)
|
|
gcache.MustGetOrSet(ctx, 2, 22, 0)
|
|
v = gcache.MustGet(ctx, 2)
|
|
t.Assert(v, 22)
|
|
|
|
gcache.MustGetOrSetFunc(ctx, 3, func(ctx context.Context) (value interface{}, err error) {
|
|
return 33, nil
|
|
}, 0)
|
|
v = gcache.MustGet(ctx, 3)
|
|
t.Assert(v, 33)
|
|
|
|
gcache.GetOrSetFuncLock(ctx, 4, func(ctx context.Context) (value interface{}, err error) {
|
|
return 44, nil
|
|
}, 0)
|
|
v = gcache.MustGet(ctx, 4)
|
|
t.Assert(v, 44)
|
|
|
|
t.Assert(gcache.MustContains(ctx, 1), true)
|
|
|
|
t.AssertNil(gcache.Set(ctx, 1, 11, 3*time.Second))
|
|
expire := gcache.MustGetExpire(ctx, 1)
|
|
t.AssertGE(expire, 0)
|
|
|
|
n := gcache.MustSize(ctx)
|
|
t.Assert(n, 4)
|
|
|
|
data := gcache.MustData(ctx)
|
|
t.Assert(len(data), 4)
|
|
|
|
keys := gcache.MustKeys(ctx)
|
|
t.Assert(len(keys), 4)
|
|
|
|
keyStrings := gcache.MustKeyStrings(ctx)
|
|
t.Assert(len(keyStrings), 4)
|
|
|
|
values := gcache.MustValues(ctx)
|
|
t.Assert(len(values), 4)
|
|
})
|
|
}
|
|
|
|
func TestCache_NewWithAdapter(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
cache := gcache.NewWithAdapter(gcache.NewAdapterMemory())
|
|
t.AssertNE(cache, nil)
|
|
})
|
|
}
|