* root: replace boj/redistore with vendored version of rbcervilla/redisstore Signed-off-by: Jens Langhammer <jens@goauthentik.io> * setup env for go tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
		
			
				
	
	
		
			159 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package redisstore
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/gorilla/sessions"
 | 
						|
	"github.com/redis/go-redis/v9"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	redisAddr = "localhost:6379"
 | 
						|
)
 | 
						|
 | 
						|
func TestNew(t *testing.T) {
 | 
						|
	client := redis.NewClient(&redis.Options{
 | 
						|
		Addr: redisAddr,
 | 
						|
	})
 | 
						|
 | 
						|
	store, err := NewRedisStore(context.Background(), client)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create redis store", err)
 | 
						|
	}
 | 
						|
 | 
						|
	req, err := http.NewRequest("GET", "http://www.example.com", nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create request", err)
 | 
						|
	}
 | 
						|
 | 
						|
	session, err := store.New(req, "hello")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create session", err)
 | 
						|
	}
 | 
						|
	if session.IsNew == false {
 | 
						|
		t.Fatal("session is not new")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestOptions(t *testing.T) {
 | 
						|
	client := redis.NewClient(&redis.Options{
 | 
						|
		Addr: redisAddr,
 | 
						|
	})
 | 
						|
 | 
						|
	store, err := NewRedisStore(context.Background(), client)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create redis store", err)
 | 
						|
	}
 | 
						|
 | 
						|
	opts := sessions.Options{
 | 
						|
		Path:   "/path",
 | 
						|
		MaxAge: 99999,
 | 
						|
	}
 | 
						|
	store.Options(opts)
 | 
						|
 | 
						|
	req, err := http.NewRequest("GET", "http://www.example.com", nil)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create request", err)
 | 
						|
	}
 | 
						|
 | 
						|
	session, err := store.New(req, "hello")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create store", err)
 | 
						|
	}
 | 
						|
	if session.Options.Path != opts.Path || session.Options.MaxAge != opts.MaxAge {
 | 
						|
		t.Fatal("failed to set options")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestSave(t *testing.T) {
 | 
						|
	client := redis.NewClient(&redis.Options{
 | 
						|
		Addr: redisAddr,
 | 
						|
	})
 | 
						|
 | 
						|
	store, err := NewRedisStore(context.Background(), client)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create redis store", err)
 | 
						|
	}
 | 
						|
 | 
						|
	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, "hello")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create session", err)
 | 
						|
	}
 | 
						|
 | 
						|
	session.Values["key"] = "value"
 | 
						|
	err = session.Save(req, w)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to save: ", err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestDelete(t *testing.T) {
 | 
						|
	client := redis.NewClient(&redis.Options{
 | 
						|
		Addr: redisAddr,
 | 
						|
	})
 | 
						|
 | 
						|
	store, err := NewRedisStore(context.Background(), client)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create redis store", err)
 | 
						|
	}
 | 
						|
 | 
						|
	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, "hello")
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create session", err)
 | 
						|
	}
 | 
						|
 | 
						|
	session.Values["key"] = "value"
 | 
						|
	err = session.Save(req, w)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to save session: ", err)
 | 
						|
	}
 | 
						|
 | 
						|
	session.Options.MaxAge = -1
 | 
						|
	err = session.Save(req, w)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to delete session: ", err)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestClose(t *testing.T) {
 | 
						|
	client := redis.NewClient(&redis.Options{
 | 
						|
		Addr: redisAddr,
 | 
						|
	})
 | 
						|
 | 
						|
	cmd := client.Ping(context.Background())
 | 
						|
	err := cmd.Err()
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("connection is not opened")
 | 
						|
	}
 | 
						|
 | 
						|
	store, err := NewRedisStore(context.Background(), client)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to create redis store", err)
 | 
						|
	}
 | 
						|
 | 
						|
	err = store.Close()
 | 
						|
	if err != nil {
 | 
						|
		t.Fatal("failed to close")
 | 
						|
	}
 | 
						|
 | 
						|
	cmd = client.Ping(context.Background())
 | 
						|
	if cmd.Err() == nil {
 | 
						|
		t.Fatal("connection is properly closed")
 | 
						|
	}
 | 
						|
}
 |