You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.6 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package storage
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestMemoryStorage(t *testing.T) {
storage := NewMemoryStorage(0) // 0表示不过期
// 测试Create
sess, err := storage.Create("session1")
require.NoError(t, err, "Expected no error when creating session")
assert.Equal(t, "session1", sess.ID(), "Expected session ID to match")
// 测试Get
retrieved, err := storage.Get("session1")
require.NoError(t, err, "Expected no error when getting session")
require.NotNil(t, retrieved, "Expected session to be non-nil")
assert.Equal(t, "session1", retrieved.ID(), "Expected session ID to match")
// 测试Save
err = storage.Save(sess)
require.NoError(t, err, "Expected no error when saving session")
// 测试Delete
err = storage.Delete("session1")
require.NoError(t, err, "Expected no error when deleting session")
// 验证删除Get应该返回nil, nil
retrieved, err = storage.Get("session1")
require.NoError(t, err) // Get可能返回nil, nil而不是错误
assert.Nil(t, retrieved, "Expected session to be nil after deletion")
}
func TestMemoryStorageGetNotFound(t *testing.T) {
storage := NewMemoryStorage(0)
// 测试获取不存在的session应该返回nil, nil
retrieved, err := storage.Get("nonexistent")
require.NoError(t, err) // Get返回nil, nil而不是错误
assert.Nil(t, retrieved, "Expected session to be nil")
}
func TestMemoryStorageConcurrent(t *testing.T) {
storage := NewMemoryStorage(0)
// 并发创建和获取session
done := make(chan bool, 100)
for i := 0; i < 100; i++ {
go func(id int) {
sessionID := string(rune(id))
sess, _ := storage.Create(sessionID)
if sess != nil {
_ = sess.Set("key", id)
retrieved, _ := storage.Get(sessionID)
if retrieved != nil {
val, _ := retrieved.Get("key")
assert.Equal(t, id, val)
}
}
done <- true
}(i)
}
// 等待所有goroutine完成
for i := 0; i < 100; i++ {
<-done
}
}
func TestMemoryStorageExpiration(t *testing.T) {
storage := NewMemoryStorage(100 * time.Millisecond)
// 创建session
sess, err := storage.Create("session1")
require.NoError(t, err)
assert.NotNil(t, sess)
// 立即获取应该成功
retrieved, err := storage.Get("session1")
require.NoError(t, err)
assert.NotNil(t, retrieved)
// 等待过期
time.Sleep(150 * time.Millisecond)
// 清理过期session
err = storage.Cleanup()
require.NoError(t, err)
// 获取应该返回nil已过期
retrieved, err = storage.Get("session1")
require.NoError(t, err)
assert.Nil(t, retrieved, "Expected session to be nil after expiration")
}