Check SaveSession works when an existing session is present

(cherry picked from commit 9dc1a96d81)
This commit is contained in:
Joel Speed 2019-05-29 11:59:58 +01:00 committed by Brian Van Klaveren
parent ae0258a203
commit 2e2327af6c
2 changed files with 44 additions and 9 deletions

View File

@ -195,7 +195,14 @@ func (store *SessionStore) storeValue(value string, expiresOn time.Time, request
var ticket *TicketData var ticket *TicketData
if requestCookie != nil { if requestCookie != nil {
var err error var err error
ticket, err = decodeTicket(store.CookieOptions.CookieName, requestCookie.Value) val, _, ok := cookie.Validate(requestCookie, store.CookieOptions.CookieSecret, store.CookieOptions.CookieExpire)
if !ok {
ticket, err = newTicket()
if err != nil {
return "", fmt.Errorf("error creating new ticket: %s", err)
}
}
ticket, err = decodeTicket(store.CookieOptions.CookieName, val)
if err != nil { if err != nil {
return "", err return "", err
} }

View File

@ -137,17 +137,45 @@ var _ = Describe("NewSessionStore", func() {
SessionStoreInterfaceTests := func(persistent bool) { SessionStoreInterfaceTests := func(persistent bool) {
Context("when Save is called", func() { Context("when Save is called", func() {
BeforeEach(func() { Context("with no existing session", func() {
err := ss.Save(response, request, session) BeforeEach(func() {
Expect(err).ToNot(HaveOccurred()) err := ss.Save(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())
})
It("Ensures the session CreatedAt is not zero", func() {
Expect(session.CreatedAt.IsZero()).To(BeFalse())
})
}) })
It("sets a `set-cookie` header in the response", func() { Context("with an expired saved session", func() {
Expect(response.Header().Get("set-cookie")).ToNot(BeEmpty()) var err error
}) BeforeEach(func() {
By("saving a session")
req := httptest.NewRequest("GET", "http://example.com/", nil)
saveResp := httptest.NewRecorder()
err = ss.Save(saveResp, req, session)
Expect(err).ToNot(HaveOccurred())
It("Ensures the session CreatedAt is not zero", func() { By("and clearing the session")
Expect(session.CreatedAt.IsZero()).To(BeFalse()) for _, c := range saveResp.Result().Cookies() {
request.AddCookie(c)
}
clearResp := httptest.NewRecorder()
err = ss.Clear(clearResp, request)
Expect(err).ToNot(HaveOccurred())
By("then saving a request with the cleared session")
err = ss.Save(response, request, session)
})
It("no error should occur", func() {
Expect(err).ToNot(HaveOccurred())
})
}) })
CheckCookieOptions() CheckCookieOptions()