mirror of
https://gitee.com/johng/gf
synced 2026-06-07 02:12:11 +08:00
add more unit test cases for gsession
This commit is contained in:
@ -22,7 +22,13 @@ type StorageRedis struct {
|
||||
updatingIdMap *gmap.StrIntMap // Updating TTL set for session id.
|
||||
}
|
||||
|
||||
// NewStorageFile creates and returns a file storage object for session.
|
||||
var (
|
||||
// DefaultStorageRedisLoopInterval is the interval updating TTL for session ids
|
||||
// in last duration.
|
||||
DefaultStorageRedisLoopInterval = time.Minute
|
||||
)
|
||||
|
||||
// NewStorageRedis creates and returns a redis storage object for session.
|
||||
func NewStorageRedis(redis *gredis.Redis, prefix ...string) *StorageRedis {
|
||||
if redis == nil {
|
||||
return nil
|
||||
@ -35,7 +41,7 @@ func NewStorageRedis(redis *gredis.Redis, prefix ...string) *StorageRedis {
|
||||
s.prefix = prefix[0]
|
||||
}
|
||||
// Batch updates the TTL for session ids timely.
|
||||
gtimer.AddSingleton(DefaultStorageFileLoopInterval, func() {
|
||||
gtimer.AddSingleton(DefaultStorageRedisLoopInterval, func() {
|
||||
var id string
|
||||
var ttlSeconds int
|
||||
for {
|
||||
|
||||
@ -18,7 +18,7 @@ type StorageRedisHashTable struct {
|
||||
prefix string // Redis key prefix for session id.
|
||||
}
|
||||
|
||||
// NewStorageFile creates and returns a file storage object for session.
|
||||
// NewStorageRedisHashTable creates and returns a redis hash table storage object for session.
|
||||
func NewStorageRedisHashTable(redis *gredis.Redis, prefix ...string) *StorageRedisHashTable {
|
||||
if redis == nil {
|
||||
return nil
|
||||
|
||||
@ -20,6 +20,66 @@ func Test_StorageRedisHashTable(t *testing.T) {
|
||||
redis, err := gredis.NewFromStr("127.0.0.1:6379,0")
|
||||
gtest.Assert(err, nil)
|
||||
|
||||
storage := gsession.NewStorageRedisHashTable(redis)
|
||||
manager := gsession.New(time.Second, storage)
|
||||
sessionId := ""
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New()
|
||||
defer s.Close()
|
||||
s.Set("k1", "v1")
|
||||
s.Set("k2", "v2")
|
||||
s.Sets(g.Map{
|
||||
"k3": "v3",
|
||||
"k4": "v4",
|
||||
})
|
||||
gtest.Assert(s.IsDirty(), true)
|
||||
sessionId = s.Id()
|
||||
})
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New(sessionId)
|
||||
gtest.Assert(s.Get("k1"), "v1")
|
||||
gtest.Assert(s.Get("k2"), "v2")
|
||||
gtest.Assert(s.Get("k3"), "v3")
|
||||
gtest.Assert(s.Get("k4"), "v4")
|
||||
gtest.Assert(len(s.Map()), 4)
|
||||
gtest.Assert(s.Map()["k1"], "v1")
|
||||
gtest.Assert(s.Map()["k4"], "v4")
|
||||
gtest.Assert(s.Id(), sessionId)
|
||||
gtest.Assert(s.Size(), 4)
|
||||
gtest.Assert(s.Contains("k1"), true)
|
||||
gtest.Assert(s.Contains("k3"), true)
|
||||
gtest.Assert(s.Contains("k5"), false)
|
||||
s.Remove("k4")
|
||||
gtest.Assert(s.Size(), 3)
|
||||
gtest.Assert(s.Contains("k3"), true)
|
||||
gtest.Assert(s.Contains("k4"), false)
|
||||
s.RemoveAll()
|
||||
gtest.Assert(s.Size(), 0)
|
||||
gtest.Assert(s.Contains("k1"), false)
|
||||
gtest.Assert(s.Contains("k2"), false)
|
||||
s.Sets(g.Map{
|
||||
"k5": "v5",
|
||||
"k6": "v6",
|
||||
})
|
||||
gtest.Assert(s.Size(), 2)
|
||||
gtest.Assert(s.Contains("k5"), true)
|
||||
gtest.Assert(s.Contains("k6"), true)
|
||||
s.Close()
|
||||
})
|
||||
|
||||
time.Sleep(1500 * time.Millisecond)
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New(sessionId)
|
||||
gtest.Assert(s.Size(), 0)
|
||||
gtest.Assert(s.Get("k5"), nil)
|
||||
gtest.Assert(s.Get("k6"), nil)
|
||||
})
|
||||
}
|
||||
|
||||
func Test_StorageRedisHashTablePrefix(t *testing.T) {
|
||||
redis, err := gredis.NewFromStr("127.0.0.1:6379,0")
|
||||
gtest.Assert(err, nil)
|
||||
|
||||
prefix := "s_"
|
||||
storage := gsession.NewStorageRedisHashTable(redis, prefix)
|
||||
manager := gsession.New(time.Second, storage)
|
||||
|
||||
@ -20,6 +20,67 @@ func Test_StorageRedis(t *testing.T) {
|
||||
redis, err := gredis.NewFromStr("127.0.0.1:6379,0")
|
||||
gtest.Assert(err, nil)
|
||||
|
||||
storage := gsession.NewStorageRedis(redis)
|
||||
manager := gsession.New(time.Second, storage)
|
||||
sessionId := ""
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New()
|
||||
defer s.Close()
|
||||
s.Set("k1", "v1")
|
||||
s.Set("k2", "v2")
|
||||
s.Sets(g.Map{
|
||||
"k3": "v3",
|
||||
"k4": "v4",
|
||||
})
|
||||
gtest.Assert(s.IsDirty(), true)
|
||||
sessionId = s.Id()
|
||||
})
|
||||
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New(sessionId)
|
||||
gtest.Assert(s.Get("k1"), "v1")
|
||||
gtest.Assert(s.Get("k2"), "v2")
|
||||
gtest.Assert(s.Get("k3"), "v3")
|
||||
gtest.Assert(s.Get("k4"), "v4")
|
||||
gtest.Assert(len(s.Map()), 4)
|
||||
gtest.Assert(s.Map()["k1"], "v1")
|
||||
gtest.Assert(s.Map()["k4"], "v4")
|
||||
gtest.Assert(s.Id(), sessionId)
|
||||
gtest.Assert(s.Size(), 4)
|
||||
gtest.Assert(s.Contains("k1"), true)
|
||||
gtest.Assert(s.Contains("k3"), true)
|
||||
gtest.Assert(s.Contains("k5"), false)
|
||||
s.Remove("k4")
|
||||
gtest.Assert(s.Size(), 3)
|
||||
gtest.Assert(s.Contains("k3"), true)
|
||||
gtest.Assert(s.Contains("k4"), false)
|
||||
s.RemoveAll()
|
||||
gtest.Assert(s.Size(), 0)
|
||||
gtest.Assert(s.Contains("k1"), false)
|
||||
gtest.Assert(s.Contains("k2"), false)
|
||||
s.Sets(g.Map{
|
||||
"k5": "v5",
|
||||
"k6": "v6",
|
||||
})
|
||||
gtest.Assert(s.Size(), 2)
|
||||
gtest.Assert(s.Contains("k5"), true)
|
||||
gtest.Assert(s.Contains("k6"), true)
|
||||
})
|
||||
|
||||
time.Sleep(1000 * time.Millisecond)
|
||||
gtest.Case(t, func() {
|
||||
s := manager.New(sessionId)
|
||||
gtest.Assert(s.Size(), 0)
|
||||
gtest.Assert(s.Get("k5"), nil)
|
||||
gtest.Assert(s.Get("k6"), nil)
|
||||
})
|
||||
}
|
||||
|
||||
func Test_StorageRedisPrefix(t *testing.T) {
|
||||
redis, err := gredis.NewFromStr("127.0.0.1:6379,0")
|
||||
gtest.Assert(err, nil)
|
||||
|
||||
prefix := "s_"
|
||||
storage := gsession.NewStorageRedis(redis, prefix)
|
||||
manager := gsession.New(time.Second, storage)
|
||||
|
||||
Reference in New Issue
Block a user