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  }