1
0
mirror of https://github.com/alexedwards/scs.git synced 2025-07-11 00:50:14 +02:00
Files
scs/redisstore/redisstore_test.go

226 lines
4.5 KiB
Go
Raw Permalink Normal View History

2019-04-29 20:45:41 +02:00
package redisstore
import (
"bytes"
"os"
"reflect"
"testing"
"time"
"github.com/gomodule/redigo/redis"
)
func TestFind(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
r := New(redisPool)
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
_, err = conn.Do("SET", r.prefix+"session_token", "encoded_data")
if err != nil {
t.Fatal(err)
}
b, found, err := r.Find("session_token")
if err != nil {
t.Fatal(err)
}
if found != true {
t.Fatalf("got %v: expected %v", found, true)
}
if bytes.Equal(b, []byte("encoded_data")) == false {
t.Fatalf("got %v: expected %v", b, []byte("encoded_data"))
}
}
func TestSaveNew(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
r := New(redisPool)
err = r.Commit("session_token", []byte("encoded_data"), time.Now().Add(time.Minute))
if err != nil {
t.Fatal(err)
}
data, err := redis.Bytes(conn.Do("GET", r.prefix+"session_token"))
if err != nil {
t.Fatal(err)
}
if reflect.DeepEqual(data, []byte("encoded_data")) == false {
t.Fatalf("got %v: expected %v", data, []byte("encoded_data"))
}
}
func TestFindMissing(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
r := New(redisPool)
_, found, err := r.Find("missing_session_token")
if err != nil {
t.Fatalf("got %v: expected %v", err, nil)
}
if found != false {
t.Fatalf("got %v: expected %v", found, false)
}
}
func TestSaveUpdated(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
r := New(redisPool)
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
_, err = conn.Do("SET", r.prefix+"session_token", "encoded_data")
if err != nil {
t.Fatal(err)
}
err = r.Commit("session_token", []byte("new_encoded_data"), time.Now().Add(time.Minute))
if err != nil {
t.Fatal(err)
}
data, err := redis.Bytes(conn.Do("GET", r.prefix+"session_token"))
if err != nil {
t.Fatal(err)
}
if reflect.DeepEqual(data, []byte("new_encoded_data")) == false {
t.Fatalf("got %v: expected %v", data, []byte("new_encoded_data"))
}
}
func TestExpiry(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
r := New(redisPool)
err = r.Commit("session_token", []byte("encoded_data"), time.Now().Add(100*time.Millisecond))
if err != nil {
t.Fatal(err)
}
_, found, _ := r.Find("session_token")
if found != true {
t.Fatalf("got %v: expected %v", found, true)
}
time.Sleep(200 * time.Millisecond)
_, found, _ = r.Find("session_token")
if found != false {
t.Fatalf("got %v: expected %v", found, false)
}
}
func TestDelete(t *testing.T) {
redisPool := redis.NewPool(func() (redis.Conn, error) {
addr := os.Getenv("SCS_REDIS_TEST_DSN")
conn, err := redis.Dial("tcp", addr)
if err != nil {
return nil, err
}
return conn, err
}, 1)
defer redisPool.Close()
r := New(redisPool)
conn := redisPool.Get()
defer conn.Close()
_, err := conn.Do("FLUSHDB")
if err != nil {
t.Fatal(err)
}
_, err = conn.Do("SET", r.prefix+"session_token", "encoded_data")
if err != nil {
t.Fatal(err)
}
err = r.Delete("session_token")
if err != nil {
t.Fatal(err)
}
data, err := conn.Do("GET", r.prefix+"session_token")
if err != nil {
t.Fatal(err)
}
if data != nil {
t.Fatalf("got %v: expected %v", data, nil)
}
}