-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathsession_test.go
106 lines (89 loc) · 3.05 KB
/
session_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main
import (
"io"
"net/http"
"net/url"
"testing"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/session"
"github.com/gofiber/storage/memory"
"github.com/golang/mock/gomock"
"github.com/rs/zerolog"
"github.com/stretchr/testify/require"
"github.com/valyala/fasthttp"
)
func TestSessionManagerNewSession(t *testing.T) {
store := session.New()
logger := zerolog.New(io.Discard)
sm := NewSessionManager(&logger, store, sessionCookieName)
app := fiber.New()
fiberCtx0 := app.AcquireCtx(&fasthttp.RequestCtx{})
fiberCtx0.Request().Header.SetCookie("session_id", "session1")
sess, err := sm.GetSession(fiberCtx0)
require.NoError(t, err)
require.Nil(t, sess)
lureURL := "/abc/def"
fiberCtx1 := app.AcquireCtx(&fasthttp.RequestCtx{})
sess1, err := sm.NewSession(fiberCtx1, lureURL)
require.NoError(t, err)
require.NotNil(t, sess1)
u, err := url.Parse("https://google.com")
require.NoError(t, err)
expectedCookies := []*http.Cookie{{Name: "abc", Value: "def"}}
sess1.CookieJar().SetCookies(u, expectedCookies)
session1ID := sess1.ID()
cookieJar1 := sess1.CookieJar()
require.NoError(t, sess1.Save())
fiberCtx := app.AcquireCtx(&fasthttp.RequestCtx{})
fiberCtx.Request().Header.SetCookie("session_id", session1ID)
sess1new, err := sm.GetSession(fiberCtx)
require.NoError(t, err)
require.NotNil(t, sess1new)
require.True(t, cookieJar1 == sess1new.CookieJar(), "Cookie Jars are not the same")
cookies := sess1new.CookieJar().Cookies(u)
require.Equal(t, expectedCookies, cookies)
fiberCtx2 := app.AcquireCtx(&fasthttp.RequestCtx{})
sess2, err := sm.NewSession(fiberCtx2, lureURL)
require.NoError(t, err)
require.NotNil(t, sess2)
require.True(t, sess2 != sess1, "sessions are the same")
}
func TestSessionManagerDelete(t *testing.T) {
store := session.New()
logger := zerolog.New(io.Discard)
sm := NewSessionManager(&logger, store, sessionCookieName)
app := fiber.New()
fiberCtx1 := app.AcquireCtx(&fasthttp.RequestCtx{})
lureURL := "/abc/def"
sess1, err := sm.NewSession(fiberCtx1, lureURL)
require.NoError(t, err)
u, err := url.Parse("https://google.com")
require.NoError(t, err)
cookies := []*http.Cookie{{Name: "abc", Value: "def"}}
sess1.CookieJar().SetCookies(u, cookies)
sm.DeleteSession(sess1.ID())
fiberCtx := app.AcquireCtx(&fasthttp.RequestCtx{})
fiberCtx.Request().Header.SetCookie("session_id", sess1.ID())
sess, err := sm.GetSession(fiberCtx)
require.NoError(t, err)
require.Nil(t, sess)
fiberCtx1new := app.AcquireCtx(&fasthttp.RequestCtx{})
sess1new, err := sm.NewSession(fiberCtx1new, lureURL)
require.NoError(t, err)
require.NotNil(t, sess1new)
require.NotEqual(t, sess1new, sess1, "session objects are the same")
}
func TestNewSessionStorage(t *testing.T) {
ctrl := gomock.NewController(t)
sm := NewMockSessionManager(ctrl)
s := NewSessionStorage(memory.New(), sm)
data := []byte("def")
err := s.Set("abc", data, 0)
require.NoError(t, err)
v, err := s.Get("abc")
require.NoError(t, err)
require.Equal(t, data, v)
sm.EXPECT().DeleteSession("abc")
err = s.Delete("abc")
require.NoError(t, err)
}