mirror of
https://github.com/gogf/gf.git
synced 2025-04-05 11:18:50 +08:00
131 lines
3.3 KiB
Go
131 lines
3.3 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.
|
|
|
|
package gsession
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/gogf/gf/v2/test/gtest"
|
|
)
|
|
|
|
var ctx = context.TODO()
|
|
|
|
func Test_NewSessionId(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
id1 := NewSessionId()
|
|
id2 := NewSessionId()
|
|
t.AssertNE(id1, id2)
|
|
t.Assert(len(id1), 32)
|
|
})
|
|
}
|
|
|
|
func Test_Session_RegenerateId(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
// 1. Test with memory storage
|
|
storage := NewStorageMemory()
|
|
manager := New(time.Hour, storage)
|
|
session := manager.New(ctx)
|
|
|
|
// Store some data
|
|
err := session.Set("key1", "value1")
|
|
t.AssertNil(err)
|
|
err = session.Set("key2", "value2")
|
|
t.AssertNil(err)
|
|
|
|
// Get original session id
|
|
oldId := session.MustId()
|
|
|
|
// Test regenerate with deleteOld = true
|
|
newId1, err := session.RegenerateId(true)
|
|
t.AssertNil(err)
|
|
t.AssertNE(oldId, newId1)
|
|
|
|
// Verify data is preserved
|
|
v1 := session.MustGet("key1")
|
|
t.Assert(v1.String(), "value1")
|
|
v2 := session.MustGet("key2")
|
|
t.Assert(v2.String(), "value2")
|
|
|
|
// Verify old session is deleted
|
|
oldSession := manager.New(ctx)
|
|
err = oldSession.SetId(oldId)
|
|
t.AssertNil(err)
|
|
v3 := oldSession.MustGet("key1")
|
|
t.Assert(v3.IsNil(), true)
|
|
|
|
// Test regenerate with deleteOld = false
|
|
currentId := newId1
|
|
newId2, err := session.RegenerateId(false)
|
|
t.AssertNil(err)
|
|
t.AssertNE(currentId, newId2)
|
|
|
|
// Verify data is preserved in new session
|
|
v4 := session.MustGet("key1")
|
|
t.Assert(v4.String(), "value1")
|
|
|
|
// Create another session instance with the previous id
|
|
prevSession := manager.New(ctx)
|
|
err = prevSession.SetId(currentId)
|
|
t.AssertNil(err)
|
|
// Data should still be accessible in previous session
|
|
v5 := prevSession.MustGet("key1")
|
|
t.Assert(v5.String(), "value1")
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
// 2. Test with custom id function
|
|
storage := NewStorageMemory()
|
|
manager := New(time.Hour, storage)
|
|
session := manager.New(ctx)
|
|
|
|
customId := "custom_session_id"
|
|
err := session.SetIdFunc(func(ttl time.Duration) string {
|
|
return customId
|
|
})
|
|
t.AssertNil(err)
|
|
|
|
newId, err := session.RegenerateId(true)
|
|
t.AssertNil(err)
|
|
t.Assert(newId, customId)
|
|
})
|
|
|
|
gtest.C(t, func(t *gtest.T) {
|
|
// 3. Test with disabled storage
|
|
storage := &StorageBase{} // implements Storage interface but all methods return ErrorDisabled
|
|
manager := New(time.Hour, storage)
|
|
session := manager.New(ctx)
|
|
|
|
// Should still work even with disabled storage
|
|
newId, err := session.RegenerateId(true)
|
|
t.AssertNil(err)
|
|
t.Assert(len(newId), 32)
|
|
})
|
|
}
|
|
|
|
// Test MustRegenerateId
|
|
func Test_Session_MustRegenerateId(t *testing.T) {
|
|
gtest.C(t, func(t *gtest.T) {
|
|
storage := NewStorageMemory()
|
|
manager := New(time.Hour, storage)
|
|
session := manager.New(ctx)
|
|
|
|
// Normal case should not panic
|
|
t.AssertNil(session.Set("key", "value"))
|
|
newId := session.MustRegenerateId(true)
|
|
t.Assert(len(newId), 32)
|
|
|
|
// Test with disabled storage (should not panic)
|
|
storage2 := &StorageBase{}
|
|
manager2 := New(time.Hour, storage2)
|
|
session2 := manager2.New(ctx)
|
|
newId2 := session2.MustRegenerateId(true)
|
|
t.Assert(len(newId2), 32)
|
|
})
|
|
}
|