🧪 add session test

This commit is contained in:
Fenny 2020-11-12 19:11:50 +01:00
parent ef35d00a79
commit e25206458d
4 changed files with 80 additions and 10 deletions

View File

@ -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
}

View File

@ -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)
}

View 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))
}

View File

@ -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