 c93c6ee6f9
			
		
	
	c93c6ee6f9
	
	
	
		
			
			* 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")
 | |
| 	}
 | |
| }
 |