func TestRediStore(t *testing.T) { var req *http.Request var rsp *ResponseRecorder var hdr http.Header var err error var ok bool var cookies []string var session *sessions.Session var flashes []interface{} // Copyright 2012 The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Round 1 ---------------------------------------------------------------- // RedisStore store := NewRediStore(10, "tcp", ":6379", "", []byte("secret-key")) defer store.Close() req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash("foo") session.AddFlash("bar") // Custom key. session.AddFlash("baz", "custom_key") // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 2 ---------------------------------------------------------------- req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 2 { t.Fatalf("Expected flashes; Got %v", flashes) } if flashes[0] != "foo" || flashes[1] != "bar" { t.Errorf("Expected foo,bar; Got %v", flashes) } flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // Custom key. flashes = session.Flashes("custom_key") if len(flashes) != 1 { t.Errorf("Expected flashes; Got %v", flashes) } else if flashes[0] != "baz" { t.Errorf("Expected baz; Got %v", flashes) } flashes = session.Flashes("custom_key") if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // RediStore specific // Set MaxAge to -1 to mark for deletion. session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } // Round 3 ---------------------------------------------------------------- // Custom type // RedisStore store = NewRediStore(10, "tcp", ":6379", "", []byte("secret-key")) defer store.Close() req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash(&FlashMessage{42, "foo"}) // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 4 ---------------------------------------------------------------- // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 1 { t.Fatalf("Expected flashes; Got %v", flashes) } custom := flashes[0].(FlashMessage) if custom.Type != 42 || custom.Message != "foo" { t.Errorf("Expected %#v, got %#v", FlashMessage{42, "foo"}, custom) } // RediStore specific // Set MaxAge to -1 to mark for deletion. session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } // Round 5 ---------------------------------------------------------------- // RediStore Delete session (deprecated) //req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) //req.Header.Add("Cookie", cookies[0]) //rsp = NewRecorder() //// Get a session. //if session, err = store.Get(req, "session-key"); err != nil { // t.Fatalf("Error getting session: %v", err) //} //// Delete session. //if err = store.Delete(req, rsp, session); err != nil { // t.Fatalf("Error deleting session: %v", err) //} //// Get a flash. //flashes = session.Flashes() //if len(flashes) != 0 { // t.Errorf("Expected empty flashes; Got %v", flashes) //} //hdr = rsp.Header() //cookies, ok = hdr["Set-Cookie"] //if !ok || len(cookies) != 1 { // t.Fatalf("No cookies. Header:", hdr) //} // Round 6 ---------------------------------------------------------------- // RediStore change MaxLength of session store = NewRediStore(10, "tcp", ":6379", "", []byte("secret-key")) req, err = http.NewRequest("GET", "http://www.example.com", nil) if err != nil { t.Fatal("failed to create request", err) } w := httptest.NewRecorder() session, err = store.New(req, "my session") session.Values["big"] = make([]byte, base64.StdEncoding.DecodedLen(4096*2)) err = session.Save(req, w) if err == nil { t.Fatal("expected an error, got nil") } store.MaxLength(4096 * 3) // A bit more than the value size to account for encoding overhead. err = session.Save(req, w) if err != nil { t.Fatal("failed to Save:", err) } }
func TestRethinkStore(t *testing.T) { var req *http.Request var rsp *ResponseRecorder var hdr http.Header var err error var ok bool var cookies []string var session *sessions.Session var flashes []interface{} // Copyright 2012 The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. if err := Setup(); err != nil { panic(err) } // Round 1 ---------------------------------------------------------------- // RethinkStore store, err := NewRethinkStore("127.0.0.1:28015", TestDatabase, TestTable, 5, 5, []byte("secret-key")) if err != nil { t.Fatalf(err.Error()) } defer store.Close() req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash("foo") session.AddFlash("bar") // Custom key. session.AddFlash("baz", "custom_key") // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 2 ---------------------------------------------------------------- req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 2 { t.Fatalf("Expected flashes; Got %v", flashes) } if flashes[0] != "foo" || flashes[1] != "bar" { t.Errorf("Expected foo,bar; Got %v", flashes) } flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // Custom key. flashes = session.Flashes("custom_key") if len(flashes) != 1 { t.Errorf("Expected flashes; Got %v", flashes) } else if flashes[0] != "baz" { t.Errorf("Expected baz; Got %v", flashes) } flashes = session.Flashes("custom_key") if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // RethinkStore specific // Set MaxAge to -1 to mark for deletion. session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } // Round 3 ---------------------------------------------------------------- // Custom type // RethinkStore store, err = NewRethinkStore("127.0.0.1:28015", TestDatabase, TestTable, 5, 5, []byte("secret-key")) if err != nil { panic(err) } defer store.Close() req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash(&FlashMessage{42, "foo"}) // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 4 ---------------------------------------------------------------- // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 1 { t.Fatalf("Expected flashes; Got %v", flashes) } custom := flashes[0].(FlashMessage) if custom.Type != 42 || custom.Message != "foo" { t.Errorf("Expected %#v, got %#v", FlashMessage{42, "foo"}, custom) } // RethinkStore specific // Set MaxAge to -1 to mark for deletion. session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } if err := Teardown(); err != nil { panic(err) } }
func TestStore_CustomType(t *testing.T) { if !runIntegTest() { t.Skip("Do not run integration tests unless DYNAMOSTORE_INTEG_TEST is set") } var err error var session *sessions.Session sessionKey := "session-key" // Copyright 2012 The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // https://github.com/gorilla/sessions/blob/master/sessions_test.go dynamodbClient := newTestDynamoDBAPI() dummyTableName := prepareDynamoDBTable(dynamodbClient) defer dynamodbClient.DeleteTable(&dynamodb.DeleteTableInput{ TableName: aws.String(dummyTableName), }) store := New(dynamodbClient, dummyTableName, []byte("secret-key")) req, resp := newTestRequestResponse() // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes := session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash(&FlashMessage{42, "foo"}) // Save. err = sessions.Save(req, resp) if err != nil { t.Fatalf("Error saving session: %v", err) } // Eat cookie cookie := extractCookie(resp) req, resp = newTestRequestResponse() req.Header.Add("Cookie", cookie) // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 1 { t.Fatalf("Expected flashes; Got %v", flashes) } custom := flashes[0].(FlashMessage) if custom.Type != 42 || custom.Message != "foo" { t.Errorf("Expected %#v, got %#v", FlashMessage{42, "foo"}, custom) } // Delete session. session.Options.MaxAge = -1 // Save. err = sessions.Save(req, resp) if err != nil { t.Fatalf("Error saving session: %v", err) } }
func TestStore(t *testing.T) { if !runIntegTest() { t.Skip("Do not run integration tests unless DYNAMOSTORE_INTEG_TEST is set") } var err error var session *sessions.Session sessionKey := "session-key" // Copyright 2012 The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // https://github.com/gorilla/sessions/blob/master/sessions_test.go dynamodbClient := newTestDynamoDBAPI() dummyTableName := prepareDynamoDBTable(dynamodbClient) defer dynamodbClient.DeleteTable(&dynamodb.DeleteTableInput{ TableName: aws.String(dummyTableName), }) store := New(dynamodbClient, dummyTableName, []byte("secret-key")) req, resp := newTestRequestResponse() // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes := session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash("foo") session.AddFlash("bar") // Custom key. session.AddFlash("baz", "custom_key") // Save. err = sessions.Save(req, resp) if err != nil { t.Fatalf("Error saving session: %v", err) } // Eat cookie cookie := extractCookie(resp) req, resp = newTestRequestResponse() req.Header.Add("Cookie", cookie) // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 2 { t.Fatalf("Expected flashes; Got %v", flashes) } if flashes[0] != "foo" || flashes[1] != "bar" { t.Errorf("Expected foo,bar; Got %v", flashes) } // Flashes has been flushed so it will return nothing flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // Custom key. flashes = session.Flashes("custom_key") if len(flashes) != 1 { t.Errorf("Expected flashes; Got %v", flashes) } else if flashes[0] != "baz" { t.Errorf("Expected baz; Got %v", flashes) } // Flashes for custom key has been flushed so it will return nothing flashes = session.Flashes("custom_key") if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // Save. session.Options.MaxAge = -1 err = sessions.Save(req, resp) if err != nil { t.Fatalf("Error saving session: %v", err) } }
func TestStoreExpiration(t *testing.T) { if !runIntegTest() { t.Skip("Do not run integration tests unless DYNAMOSTORE_INTEG_TEST is set") } var err error var session *sessions.Session sessionKey := "session-key-expires" dynamodbClient := newTestDynamoDBAPI() dummyTableName := prepareDynamoDBTable(dynamodbClient) defer dynamodbClient.DeleteTable(&dynamodb.DeleteTableInput{ TableName: aws.String(dummyTableName), }) store := New(dynamodbClient, dummyTableName, []byte("secret-key")) // Set 3 seconds for max age store.MaxAge(3) req, resp := newTestRequestResponse() // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } if !session.IsNew { t.Fatalf("Expected session.IsNew == true, Got: %v", session.IsNew) } // Add some flashes. session.AddFlash("foo") session.AddFlash("bar") // Save. err = sessions.Save(req, resp) if err != nil { t.Fatalf("Error saving session: %v", err) } // Eat cookie cookie := extractCookie(resp) // Wait for 3 seconds time.Sleep(3 * time.Second) req, resp = newTestRequestResponse() req.Header.Add("Cookie", cookie) // Get a session. session, err = store.Get(req, sessionKey) if err != nil { t.Fatalf("Error getting session: %v", err) } // session should be expired and it should be regenerated if !session.IsNew { t.Fatalf("Expected session.IsNew == true, Got: %v", session.IsNew) } // Check all saved values. flashes := session.Flashes() if len(flashes) != 0 { t.Fatalf("Expected empty flashes; Got %v", flashes) } }
func TestDynamoStore(t *testing.T) { var req *http.Request var rsp *httptest.ResponseRecorder var hdr http.Header var err error var ok bool var cookies []string var session *sessions.Session var flashes []interface{} // Copyright 2012 The Gorilla Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Create dummy table awsAuth := aws.Auth{ AccessKey: "dummy", SecretKey: "dummy", } server := dynamodb.New(awsAuth, aws.Region{Name: "eu-west-1", DynamoDBEndpoint: "http://127.0.0.1:8000"}) dummyTableName := randSeq(10) tableDesc := dynamodb.TableDescriptionT{ TableName: dummyTableName, AttributeDefinitions: []dynamodb.AttributeDefinitionT{ dynamodb.AttributeDefinitionT{"Id", "S"}, }, KeySchema: []dynamodb.KeySchemaT{ dynamodb.KeySchemaT{"Id", "HASH"}, }, ProvisionedThroughput: dynamodb.ProvisionedThroughputT{ ReadCapacityUnits: 1, WriteCapacityUnits: 1, }, } server.CreateTable(tableDesc) defer server.DeleteTable(tableDesc) // Round 1 ---------------------------------------------------------------- store, err := NewDynamoStoreWithRegionObj("dummy", "dummy", tableDesc.TableName, aws.Region{Name: "eu-west-1", DynamoDBEndpoint: "http://127.0.0.1:8000"}, []byte("secret-key")) if err != nil { t.Fatalf("Error creating dynamostore: %v", err) } req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = httptest.NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash("foo") session.AddFlash("bar") // Custom key. session.AddFlash("baz", "custom_key") // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 2 ---------------------------------------------------------------- req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = httptest.NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 2 { t.Fatalf("Expected flashes; Got %v", flashes) } if flashes[0] != "foo" || flashes[1] != "bar" { t.Errorf("Expected foo,bar; Got %v", flashes) } flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } // Custom key. flashes = session.Flashes("custom_key") if len(flashes) != 1 { t.Errorf("Expected flashes; Got %v", flashes) } else if flashes[0] != "baz" { t.Errorf("Expected baz; Got %v", flashes) } flashes = session.Flashes("custom_key") if len(flashes) != 0 { t.Errorf("Expected dumped flashes; Got %v", flashes) } session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } // Round 3 ---------------------------------------------------------------- // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) rsp = httptest.NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Get a flash. flashes = session.Flashes() if len(flashes) != 0 { t.Errorf("Expected empty flashes; Got %v", flashes) } // Add some flashes. session.AddFlash(&FlashMessage{42, "foo"}) // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } hdr = rsp.Header() cookies, ok = hdr["Set-Cookie"] if !ok || len(cookies) != 1 { t.Fatalf("No cookies. Header:", hdr) } // Round 4 ---------------------------------------------------------------- // Custom type req, _ = http.NewRequest("GET", "http://localhost:8080/", nil) req.Header.Add("Cookie", cookies[0]) rsp = httptest.NewRecorder() // Get a session. if session, err = store.Get(req, "session-key"); err != nil { t.Fatalf("Error getting session: %v", err) } // Check all saved values. flashes = session.Flashes() if len(flashes) != 1 { t.Fatalf("Expected flashes; Got %v", flashes) } custom := flashes[0].(FlashMessage) if custom.Type != 42 || custom.Message != "foo" { t.Errorf("Expected %#v, got %#v", FlashMessage{42, "foo"}, custom) } // Delete session. session.Options.MaxAge = -1 // Save. if err = sessions.Save(req, rsp); err != nil { t.Fatalf("Error saving session: %v", err) } }