Add tests to check cookies set by SessionStores
This commit is contained in:
parent
6d162a1d78
commit
0204054005
@ -1,11 +1,14 @@
|
|||||||
package sessions_test
|
package sessions_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
"github.com/pusher/oauth2_proxy/pkg/apis/options"
|
"github.com/pusher/oauth2_proxy/pkg/apis/options"
|
||||||
|
sessionsapi "github.com/pusher/oauth2_proxy/pkg/apis/sessions"
|
||||||
"github.com/pusher/oauth2_proxy/pkg/sessions"
|
"github.com/pusher/oauth2_proxy/pkg/sessions"
|
||||||
"github.com/pusher/oauth2_proxy/pkg/sessions/cookie"
|
"github.com/pusher/oauth2_proxy/pkg/sessions/cookie"
|
||||||
)
|
)
|
||||||
@ -19,9 +22,150 @@ var _ = Describe("NewSessionStore", func() {
|
|||||||
var opts *options.SessionOptions
|
var opts *options.SessionOptions
|
||||||
var cookieOpts *options.CookieOptions
|
var cookieOpts *options.CookieOptions
|
||||||
|
|
||||||
|
var request *http.Request
|
||||||
|
var response http.ResponseWriter
|
||||||
|
var session *sessionsapi.SessionState
|
||||||
|
|
||||||
|
CheckCookieOptions := func() {
|
||||||
|
Context("the cookies returned", func() {
|
||||||
|
var cookies []*http.Cookie
|
||||||
|
BeforeEach(func() {
|
||||||
|
req := http.Request{}
|
||||||
|
req.Header.Add("Cookie", response.Header().Get("Set-Cookie"))
|
||||||
|
cookies = req.Cookies()
|
||||||
|
})
|
||||||
|
|
||||||
|
It("have the correct name set", func() {
|
||||||
|
if len(cookies) == 1 {
|
||||||
|
Expect(cookies[0].Name).To(Equal(cookieOpts.CookieName))
|
||||||
|
} else {
|
||||||
|
for _, cookie := range cookies {
|
||||||
|
Expect(cookie.Name).To(ContainSubstring(cookieOpts.CookieName))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
It("have the correct path set", func() {
|
||||||
|
for _, cookie := range cookies {
|
||||||
|
Expect(cookie.Path).To(Equal(cookieOpts.CookiePath))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
It("have the correct domain set", func() {
|
||||||
|
for _, cookie := range cookies {
|
||||||
|
Expect(cookie.Domain).To(Equal(cookieOpts.CookieDomain))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
It("have the correct HTTPOnly set", func() {
|
||||||
|
for _, cookie := range cookies {
|
||||||
|
Expect(cookie.HttpOnly).To(Equal(cookieOpts.CookieHTTPOnly))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
It("have the correct secure set", func() {
|
||||||
|
for _, cookie := range cookies {
|
||||||
|
Expect(cookie.Secure).To(Equal(cookieOpts.CookieSecure))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
RunCookieTests := func() {
|
||||||
|
var ss sessionsapi.SessionStore
|
||||||
|
|
||||||
|
Context("with default options", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
var err error
|
||||||
|
ss, err = sessions.NewSessionStore(opts, cookieOpts)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("when SaveSession is called", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
err := ss.SaveSession(response, request, session)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sets a `set-cookie` header in the response", func() {
|
||||||
|
Expect(response.Header().Get("Set-Cookie")).ToNot(BeEmpty())
|
||||||
|
})
|
||||||
|
|
||||||
|
CheckCookieOptions()
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("when ClearSession is called", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
err := ss.ClearSession(response, request)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sets a `set-cookie` header in the response", func() {
|
||||||
|
Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
|
||||||
|
})
|
||||||
|
|
||||||
|
CheckCookieOptions()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("with non-default options", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
cookieOpts = &options.CookieOptions{
|
||||||
|
CookieName: "_cookie_name",
|
||||||
|
CookiePath: "/path",
|
||||||
|
CookieExpire: time.Duration(72) * time.Hour,
|
||||||
|
CookieRefresh: time.Duration(3600),
|
||||||
|
CookieSecure: false,
|
||||||
|
CookieHTTPOnly: false,
|
||||||
|
CookieDomain: "example.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
ss, err = sessions.NewSessionStore(opts, cookieOpts)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("when SaveSession is called", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
err := ss.SaveSession(response, request, session)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sets a `set-cookie` header in the response", func() {
|
||||||
|
Expect(response.Header().Get("Set-Cookie")).ToNot(BeEmpty())
|
||||||
|
})
|
||||||
|
|
||||||
|
CheckCookieOptions()
|
||||||
|
})
|
||||||
|
|
||||||
|
Context("when ClearSession is called", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
err := ss.ClearSession(response, request)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("sets a `set-cookie` header in the response", func() {
|
||||||
|
Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty())
|
||||||
|
})
|
||||||
|
|
||||||
|
CheckCookieOptions()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
opts = &options.SessionOptions{}
|
opts = &options.SessionOptions{}
|
||||||
cookieOpts = &options.CookieOptions{}
|
|
||||||
|
// Set default options in CookieOptions
|
||||||
|
cookieOpts = &options.CookieOptions{
|
||||||
|
CookieName: "_oauth2_proxy",
|
||||||
|
CookiePath: "/",
|
||||||
|
CookieExpire: time.Duration(168) * time.Hour,
|
||||||
|
CookieRefresh: time.Duration(0),
|
||||||
|
CookieSecure: true,
|
||||||
|
CookieHTTPOnly: true,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("with type 'cookie'", func() {
|
Context("with type 'cookie'", func() {
|
||||||
@ -29,11 +173,15 @@ var _ = Describe("NewSessionStore", func() {
|
|||||||
opts.Type = options.CookieSessionStoreType
|
opts.Type = options.CookieSessionStoreType
|
||||||
})
|
})
|
||||||
|
|
||||||
It("creates a CookieSessionStore", func() {
|
It("creates a cookie.SessionStore", func() {
|
||||||
ss, err := sessions.NewSessionStore(opts, cookieOpts)
|
ss, err := sessions.NewSessionStore(opts, cookieOpts)
|
||||||
Expect(err).NotTo(HaveOccurred())
|
Expect(err).NotTo(HaveOccurred())
|
||||||
Expect(ss).To(BeAssignableToTypeOf(&cookie.SessionStore{}))
|
Expect(ss).To(BeAssignableToTypeOf(&cookie.SessionStore{}))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("the cookie.SessionStore", func() {
|
||||||
|
RunCookieTests()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("with an invalid type", func() {
|
Context("with an invalid type", func() {
|
||||||
|
Loading…
Reference in New Issue
Block a user