modify the targeted test for gorilla/securecookie integration with iris session manager 🍥

Former-commit-id: a8a499c149e4a31f2b475f64e8ff93799608819c
This commit is contained in:
hiveminded 2017-07-11 18:09:32 +03:00
parent d0a66c2fbc
commit bd61bf2405
2 changed files with 19 additions and 92 deletions

View File

@ -14,7 +14,7 @@ import (
"github.com/gorilla/securecookie"
)
func main() {
func newApp() *iris.Application {
app := iris.New()
cookieName := "mycustomsessionid"
@ -71,5 +71,10 @@ func main() {
// mySessions.DestroyByID
// mySessions.DestroyAll
return app
}
func main() {
app := newApp()
app.Run(iris.Addr(":8080"))
}

View File

@ -4,102 +4,24 @@ import (
"testing"
"github.com/kataras/iris"
"github.com/kataras/iris/context"
"github.com/kataras/iris/httptest"
"github.com/kataras/iris/sessions"
"github.com/gorilla/securecookie"
)
func TestSessionsEncodeDecode(t *testing.T) {
// test the sessions encode decode via gorilla.securecookie
app := iris.New()
// IMPORTANT
cookieName := "mycustomsessionid"
// AES only supports key sizes of 16, 24 or 32 bytes.
// You either need to provide exactly that amount or you derive the key from what you type in.
hashKey := []byte("the-big-and-secret-fash-key-here")
blockKey := []byte("lot-secret-of-characters-big-too")
secureCookie := securecookie.New(hashKey, blockKey)
sess := sessions.New(sessions.Config{
Cookie: cookieName,
Encode: secureCookie.Encode,
Decode: secureCookie.Decode,
})
testSessions(t, sess, app)
}
func testSessions(t *testing.T, sess *sessions.Sessions, app *iris.Application) {
values := map[string]interface{}{
"Name": "iris",
"Months": "4",
"Secret": "dsads£2132215£%%Ssdsa",
}
writeValues := func(ctx context.Context) {
s := sess.Start(ctx)
sessValues := s.GetAll()
ctx.JSON(sessValues)
}
app.Post("/set", func(ctx context.Context) {
s := sess.Start(ctx)
vals := make(map[string]interface{}, 0)
if err := ctx.ReadJSON(&vals); err != nil {
t.Fatalf("Cannot readjson. Trace %s", err.Error())
}
for k, v := range vals {
s.Set(k, v)
}
})
app.Get("/get", func(ctx context.Context) {
writeValues(ctx)
})
app.Get("/clear", func(ctx context.Context) {
sess.Start(ctx).Clear()
writeValues(ctx)
})
app.Get("/destroy", func(ctx context.Context) {
sess.Destroy(ctx)
writeValues(ctx)
// the cookie and all values should be empty
})
// request cookie should be empty
app.Get("/after_destroy", func(ctx context.Context) {
})
app.Get("/multi_start_set_get", func(ctx context.Context) {
s := sess.Start(ctx)
s.Set("key", "value")
ctx.Next()
}, func(ctx context.Context) {
s := sess.Start(ctx)
ctx.Writef(s.GetString("key"))
})
app := newApp()
e := httptest.New(t, app, httptest.URL("http://example.com"))
e.POST("/set").WithJSON(values).Expect().Status(iris.StatusOK).Cookies().NotEmpty()
e.GET("/get").Expect().Status(iris.StatusOK).JSON().Object().Equal(values)
es := e.GET("/set").Expect()
es.Status(iris.StatusOK)
es.Cookies().NotEmpty()
es.Body().Equal("All ok session setted to: iris")
// test destroy which also clears first
d := e.GET("/destroy").Expect().Status(iris.StatusOK)
d.JSON().Object().Empty()
// This removed: d.Cookies().Empty(). Reason:
// httpexpect counts the cookies setted or deleted at the response time, but cookie is not removed, to be really removed needs to SetExpire(now-1second) so,
// test if the cookies removed on the next request, like the browser's behavior.
e.GET("/after_destroy").Expect().Status(iris.StatusOK).Cookies().Empty()
// set and clear again
e.POST("/set").WithJSON(values).Expect().Status(iris.StatusOK).Cookies().NotEmpty()
e.GET("/clear").Expect().Status(iris.StatusOK).JSON().Object().Empty()
// test start on the same request but more than one times
e.GET("/multi_start_set_get").Expect().Status(iris.StatusOK).Body().Equal("value")
e.GET("/get").Expect().Status(iris.StatusOK).Body().Equal("The name on the /set was: iris")
// delete and re-get
e.GET("/delete").Expect().Status(iris.StatusOK)
e.GET("/get").Expect().Status(iris.StatusOK).Body().Equal("The name on the /set was: ")
// set, clear and re-get
e.GET("/set").Expect().Body().Equal("All ok session setted to: iris")
e.GET("/clear").Expect().Status(iris.StatusOK)
e.GET("/get").Expect().Status(iris.StatusOK).Body().Equal("The name on the /set was: ")
}