git.iko.soy/typeable/oauth2-proxy
on master help sign in
Add tests to check cookies set by SessionStores
commit020405400516ccfca9ea67460caad1d8065bb776 authorJoel Speed <Joel.speed@hotmail.co.uk> dateMon 6 May 2019, 22:34 (7 years ago) parent6d162a1
1 file changed+150−2
pkg/sessions/session_store_test.go+150−2
pkg/sessions/session_store_test.go+150−2
@@ -1,11 +1,14 @@
11package sessions_test
22
33import (
4+ "net/http"
45 "testing"
6+ "time"
57
68 . "github.com/onsi/ginkgo"
79 . "github.com/onsi/gomega"
810 "github.com/pusher/oauth2_proxy/pkg/apis/options"
11+ sessionsapi "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
912 "github.com/pusher/oauth2_proxy/pkg/sessions"
1013 "github.com/pusher/oauth2_proxy/pkg/sessions/cookie"
1114)
@@ -19,9 +22,150 @@ var _ = Describe("NewSessionStore", func() {
1922 var opts *options.SessionOptions
2023 var cookieOpts *options.CookieOptions
2124
25+ var request *http.Request
26+ var response http.ResponseWriter
27+ var session *sessionsapi.SessionState
28+
29+ CheckCookieOptions := func() {
30+ Context("the cookies returned", func() {
31+ var cookies []*http.Cookie
32+ BeforeEach(func() {
33+ req := http.Request{}
34+ req.Header.Add("Cookie", response.Header().Get("Set-Cookie"))
35+ cookies = req.Cookies()
36+ })
37+
38+ It("have the correct name set", func() {
39+ if len(cookies) == 1 {
40+ Expect(cookies[0].Name).To(Equal(cookieOpts.CookieName))
41+ } else {
42+ for _, cookie := range cookies {
43+ Expect(cookie.Name).To(ContainSubstring(cookieOpts.CookieName))
44+ }
45+ }
46+ })
47+
48+ It("have the correct path set", func() {
49+ for _, cookie := range cookies {
50+ Expect(cookie.Path).To(Equal(cookieOpts.CookiePath))
51+ }
52+ })
53+
54+ It("have the correct domain set", func() {
55+ for _, cookie := range cookies {
56+ Expect(cookie.Domain).To(Equal(cookieOpts.CookieDomain))
57+ }
58+ })
59+
60+ It("have the correct HTTPOnly set", func() {
61+ for _, cookie := range cookies {
62+ Expect(cookie.HttpOnly).To(Equal(cookieOpts.CookieHTTPOnly))
63+ }
64+ })
65+
66+ It("have the correct secure set", func() {
67+ for _, cookie := range cookies {
68+ Expect(cookie.Secure).To(Equal(cookieOpts.CookieSecure))
69+ }
70+ })
71+
72+ })
73+ }
74+
75+ RunCookieTests := func() {
76+ var ss sessionsapi.SessionStore
77+
78+ Context("with default options", func() {
79+ BeforeEach(func() {
80+ var err error
81+ ss, err = sessions.NewSessionStore(opts, cookieOpts)
82+ Expect(err).ToNot(HaveOccurred())
83+ })
84+
85+ Context("when SaveSession is called", func() {
86+ BeforeEach(func() {
87+ err := ss.SaveSession(response, request, session)
88+ Expect(err).ToNot(HaveOccurred())
89+ })
90+
91+ It("sets a `set-cookie` header in the response", func() {
92+ Expect(response.Header().Get("Set-Cookie")).ToNot(BeEmpty())
93+ })
94+
95+ CheckCookieOptions()
96+ })
97+
98+ Context("when ClearSession is called", func() {
99+ BeforeEach(func() {
100+ err := ss.ClearSession(response, request)
101+ Expect(err).ToNot(HaveOccurred())
102+ })
103+
104+ It("sets a `set-cookie` header in the response", func() {
105+ Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
106+ })
107+
108+ CheckCookieOptions()
109+ })
110+ })
111+
112+ Context("with non-default options", func() {
113+ BeforeEach(func() {
114+ cookieOpts = &options.CookieOptions{
115+ CookieName: "_cookie_name",
116+ CookiePath: "/path",
117+ CookieExpire: time.Duration(72) * time.Hour,
118+ CookieRefresh: time.Duration(3600),
119+ CookieSecure: false,
120+ CookieHTTPOnly: false,
121+ CookieDomain: "example.com",
122+ }
123+
124+ var err error
125+ ss, err = sessions.NewSessionStore(opts, cookieOpts)
126+ Expect(err).ToNot(HaveOccurred())
127+ })
128+
129+ Context("when SaveSession is called", func() {
130+ BeforeEach(func() {
131+ err := ss.SaveSession(response, request, session)
132+ Expect(err).ToNot(HaveOccurred())
133+ })
134+
135+ It("sets a `set-cookie` header in the response", func() {
136+ Expect(response.Header().Get("Set-Cookie")).ToNot(BeEmpty())
137+ })
138+
139+ CheckCookieOptions()
140+ })
141+
142+ Context("when ClearSession is called", func() {
143+ BeforeEach(func() {
144+ err := ss.ClearSession(response, request)
145+ Expect(err).ToNot(HaveOccurred())
146+ })
147+
148+ It("sets a `set-cookie` header in the response", func() {
149+ Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
150+ })
151+
152+ CheckCookieOptions()
153+ })
154+ })
155+ }
156+
22157 BeforeEach(func() {
23158 opts = &options.SessionOptions{}
24− cookieOpts = &options.CookieOptions{}
159+
160+ // Set default options in CookieOptions
161+ cookieOpts = &options.CookieOptions{
162+ CookieName: "_oauth2_proxy",
163+ CookiePath: "/",
164+ CookieExpire: time.Duration(168) * time.Hour,
165+ CookieRefresh: time.Duration(0),
166+ CookieSecure: true,
167+ CookieHTTPOnly: true,
168+ }
25169 })
26170
27171 Context("with type 'cookie'", func() {
@@ -29,11 +173,15 @@ var _ = Describe("NewSessionStore", func() {
29173 opts.Type = options.CookieSessionStoreType
30174 })
31175
32− It("creates a CookieSessionStore", func() {
176+ It("creates a cookie.SessionStore", func() {
33177 ss, err := sessions.NewSessionStore(opts, cookieOpts)
34178 Expect(err).NotTo(HaveOccurred())
35179 Expect(ss).To(BeAssignableToTypeOf(&cookie.SessionStore{}))
36180 })
181+
182+ Context("the cookie.SessionStore", func() {
183+ RunCookieTests()
184+ })
37185 })
38186
39187 Context("with an invalid type", func() {