github.com/gogf/gf@v1.16.9/os/gsession/gsession_unit_storage_redis_hashtable_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gsession_test 8 9 import ( 10 "context" 11 "github.com/gogf/gf/database/gredis" 12 "github.com/gogf/gf/frame/g" 13 "github.com/gogf/gf/os/gsession" 14 "testing" 15 "time" 16 17 "github.com/gogf/gf/test/gtest" 18 ) 19 20 func Test_StorageRedisHashTable(t *testing.T) { 21 redis, err := gredis.NewFromStr("127.0.0.1:6379,0") 22 gtest.C(t, func(t *gtest.T) { 23 t.Assert(err, nil) 24 }) 25 26 storage := gsession.NewStorageRedisHashTable(redis) 27 manager := gsession.New(time.Second, storage) 28 sessionId := "" 29 gtest.C(t, func(t *gtest.T) { 30 s := manager.New(context.TODO()) 31 defer s.Close() 32 s.Set("k1", "v1") 33 s.Set("k2", "v2") 34 s.Sets(g.Map{ 35 "k3": "v3", 36 "k4": "v4", 37 }) 38 t.Assert(s.IsDirty(), true) 39 sessionId = s.Id() 40 }) 41 gtest.C(t, func(t *gtest.T) { 42 s := manager.New(context.TODO(), sessionId) 43 t.Assert(s.Get("k1"), "v1") 44 t.Assert(s.Get("k2"), "v2") 45 t.Assert(s.Get("k3"), "v3") 46 t.Assert(s.Get("k4"), "v4") 47 t.Assert(len(s.Map()), 4) 48 t.Assert(s.Map()["k1"], "v1") 49 t.Assert(s.Map()["k4"], "v4") 50 t.Assert(s.Id(), sessionId) 51 t.Assert(s.Size(), 4) 52 t.Assert(s.Contains("k1"), true) 53 t.Assert(s.Contains("k3"), true) 54 t.Assert(s.Contains("k5"), false) 55 s.Remove("k4") 56 t.Assert(s.Size(), 3) 57 t.Assert(s.Contains("k3"), true) 58 t.Assert(s.Contains("k4"), false) 59 s.RemoveAll() 60 t.Assert(s.Size(), 0) 61 t.Assert(s.Contains("k1"), false) 62 t.Assert(s.Contains("k2"), false) 63 s.Sets(g.Map{ 64 "k5": "v5", 65 "k6": "v6", 66 }) 67 t.Assert(s.Size(), 2) 68 t.Assert(s.Contains("k5"), true) 69 t.Assert(s.Contains("k6"), true) 70 s.Close() 71 }) 72 73 time.Sleep(1500 * time.Millisecond) 74 gtest.C(t, func(t *gtest.T) { 75 s := manager.New(context.TODO(), sessionId) 76 t.Assert(s.Size(), 0) 77 t.Assert(s.Get("k5"), nil) 78 t.Assert(s.Get("k6"), nil) 79 }) 80 } 81 82 func Test_StorageRedisHashTablePrefix(t *testing.T) { 83 redis, err := gredis.NewFromStr("127.0.0.1:6379,0") 84 gtest.C(t, func(t *gtest.T) { 85 t.Assert(err, nil) 86 }) 87 88 prefix := "s_" 89 storage := gsession.NewStorageRedisHashTable(redis, prefix) 90 manager := gsession.New(time.Second, storage) 91 sessionId := "" 92 gtest.C(t, func(t *gtest.T) { 93 s := manager.New(context.TODO()) 94 defer s.Close() 95 s.Set("k1", "v1") 96 s.Set("k2", "v2") 97 s.Sets(g.Map{ 98 "k3": "v3", 99 "k4": "v4", 100 }) 101 t.Assert(s.IsDirty(), true) 102 sessionId = s.Id() 103 }) 104 gtest.C(t, func(t *gtest.T) { 105 s := manager.New(context.TODO(), sessionId) 106 t.Assert(s.Get("k1"), "v1") 107 t.Assert(s.Get("k2"), "v2") 108 t.Assert(s.Get("k3"), "v3") 109 t.Assert(s.Get("k4"), "v4") 110 t.Assert(len(s.Map()), 4) 111 t.Assert(s.Map()["k1"], "v1") 112 t.Assert(s.Map()["k4"], "v4") 113 t.Assert(s.Id(), sessionId) 114 t.Assert(s.Size(), 4) 115 t.Assert(s.Contains("k1"), true) 116 t.Assert(s.Contains("k3"), true) 117 t.Assert(s.Contains("k5"), false) 118 s.Remove("k4") 119 t.Assert(s.Size(), 3) 120 t.Assert(s.Contains("k3"), true) 121 t.Assert(s.Contains("k4"), false) 122 s.RemoveAll() 123 t.Assert(s.Size(), 0) 124 t.Assert(s.Contains("k1"), false) 125 t.Assert(s.Contains("k2"), false) 126 s.Sets(g.Map{ 127 "k5": "v5", 128 "k6": "v6", 129 }) 130 t.Assert(s.Size(), 2) 131 t.Assert(s.Contains("k5"), true) 132 t.Assert(s.Contains("k6"), true) 133 s.Close() 134 }) 135 136 time.Sleep(1500 * time.Millisecond) 137 gtest.C(t, func(t *gtest.T) { 138 s := manager.New(context.TODO(), sessionId) 139 t.Assert(s.Size(), 0) 140 t.Assert(s.Get("k5"), nil) 141 t.Assert(s.Get("k6"), nil) 142 }) 143 }