mirror of
https://github.com/alexedwards/scs.git
synced 2025-07-11 00:50:14 +02:00
226 lines
4.5 KiB
Go
226 lines
4.5 KiB
Go
![]() |
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)
|
||
|
}
|
||
|
}
|