mirror of
https://github.com/gofiber/fiber.git
synced 2025-04-27 13:14:31 +00:00
🧪 add session test
This commit is contained in:
parent
ef35d00a79
commit
e25206458d
@ -4,7 +4,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/internal/storage/memory"
|
||||
"github.com/gofiber/fiber/v2/utils"
|
||||
)
|
||||
|
||||
@ -68,9 +67,6 @@ func configDefault(config ...Config) Config {
|
||||
if cfg.Expiration <= 0 {
|
||||
cfg.Expiration = ConfigDefault.Expiration
|
||||
}
|
||||
if cfg.Storage == nil {
|
||||
cfg.Storage = memory.New()
|
||||
}
|
||||
if cfg.KeyGenerator == nil {
|
||||
cfg.KeyGenerator = ConfigDefault.KeyGenerator
|
||||
}
|
||||
|
@ -24,17 +24,20 @@ var sessionPool = sync.Pool{
|
||||
}
|
||||
|
||||
func acquireSession() *Session {
|
||||
sess := sessionPool.Get().(*Session)
|
||||
sess.db = new(db)
|
||||
return sess
|
||||
s := sessionPool.Get().(*Session)
|
||||
s.db = new(db)
|
||||
s.fresh = true
|
||||
return s
|
||||
}
|
||||
|
||||
func releaseSession(s *Session) {
|
||||
s.ctx = nil
|
||||
s.config = nil
|
||||
if s.db != nil {
|
||||
s.db.Reset()
|
||||
}
|
||||
s.id = ""
|
||||
s.fresh = false
|
||||
s.fresh = true
|
||||
sessionPool.Put(s)
|
||||
}
|
||||
|
||||
|
66
middleware/session/session_test.go
Normal file
66
middleware/session/session_test.go
Normal file
@ -0,0 +1,66 @@
|
||||
package session
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/utils"
|
||||
"github.com/valyala/fasthttp"
|
||||
)
|
||||
|
||||
// go test -run Test_Session
|
||||
func Test_Session(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// session store
|
||||
store := New()
|
||||
|
||||
// fiber instance
|
||||
app := fiber.New()
|
||||
|
||||
// fiber context
|
||||
ctx := app.AcquireCtx(&fasthttp.RequestCtx{})
|
||||
defer app.ReleaseCtx(ctx)
|
||||
|
||||
// set cookie
|
||||
ctx.Request().Header.SetCookie("session_id", "123")
|
||||
|
||||
// get session
|
||||
sess, err := store.Get(ctx)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, sess.Fresh())
|
||||
|
||||
// get value
|
||||
name := sess.Get("name")
|
||||
utils.AssertEqual(t, nil, name)
|
||||
|
||||
// set value
|
||||
sess.Set("name", "john")
|
||||
|
||||
// get value
|
||||
name = sess.Get("name")
|
||||
utils.AssertEqual(t, "john", name)
|
||||
|
||||
// delete key
|
||||
sess.Delete("name")
|
||||
|
||||
// get value
|
||||
name = sess.Get("name")
|
||||
utils.AssertEqual(t, nil, name)
|
||||
|
||||
// get id
|
||||
id := sess.ID()
|
||||
utils.AssertEqual(t, "123", id)
|
||||
|
||||
// delete cookie
|
||||
ctx.Request().Header.Del(fiber.HeaderCookie)
|
||||
|
||||
// get session
|
||||
sess, err = store.Get(ctx)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, true, sess.Fresh())
|
||||
|
||||
// get id
|
||||
id = sess.ID()
|
||||
utils.AssertEqual(t, 36, len(id))
|
||||
}
|
@ -2,6 +2,7 @@ package session
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/internal/storage/memory"
|
||||
)
|
||||
|
||||
type Store struct {
|
||||
@ -15,6 +16,10 @@ func New(config ...Config) *Store {
|
||||
// Set default config
|
||||
cfg := configDefault(config...)
|
||||
|
||||
if cfg.Storage == nil {
|
||||
cfg.Storage = memory.New()
|
||||
}
|
||||
|
||||
return &Store{
|
||||
cfg,
|
||||
}
|
||||
@ -36,7 +41,6 @@ func (s *Store) Get(c *fiber.Ctx) (*Session, error) {
|
||||
sess := acquireSession()
|
||||
sess.ctx = c
|
||||
sess.config = s
|
||||
sess.fresh = fresh
|
||||
sess.id = id
|
||||
|
||||
// Fetch existing data
|
||||
@ -47,6 +51,7 @@ func (s *Store) Get(c *fiber.Ctx) (*Session, error) {
|
||||
if _, err = sess.db.UnmarshalMsg(raw); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sess.fresh = false
|
||||
} else if err.Error() != errNotExist {
|
||||
// Only return error if it's not ErrNotExist
|
||||
return nil, err
|
||||
|
Loading…
x
Reference in New Issue
Block a user