可靠性: PostgreSQL 无 Redis 时 session 不再误用 MySQL 存储
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package route
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/flamego/session/mysql"
|
||||
sessionRedis "github.com/flamego/session/redis"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/tamakyi/TamaBox/internal/conf"
|
||||
)
|
||||
|
||||
func TestSessionOptionsSelectStorageByDatabaseAndRedis(t *testing.T) {
|
||||
oldDatabase, oldRedis, oldExternalURL := conf.Database, conf.Redis, conf.App.ExternalURL
|
||||
t.Cleanup(func() {
|
||||
conf.Database, conf.Redis, conf.App.ExternalURL = oldDatabase, oldRedis, oldExternalURL
|
||||
})
|
||||
conf.Database.DSN = "test-database-dsn"
|
||||
conf.App.ExternalURL = "https://example.test"
|
||||
|
||||
for _, tt := range []struct {
|
||||
name string
|
||||
databaseType string
|
||||
redisAddr string
|
||||
configType interface{}
|
||||
}{
|
||||
{name: "postgres without redis uses memory", databaseType: "postgres"},
|
||||
{name: "postgres with redis uses redis", databaseType: "postgres", redisAddr: "127.0.0.1:6379", configType: sessionRedis.Config{}},
|
||||
{name: "mysql without redis uses mysql", databaseType: "mysql", configType: mysql.Config{}},
|
||||
{name: "mysql with redis uses redis", databaseType: "mysql", redisAddr: "127.0.0.1:6379", configType: sessionRedis.Config{}},
|
||||
{name: "legacy empty database type uses mysql", configType: mysql.Config{}},
|
||||
} {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
conf.Database.Type = tt.databaseType
|
||||
conf.Redis.Addr = tt.redisAddr
|
||||
conf.Redis.Password = "test-only-password"
|
||||
opts := sessionOptions()
|
||||
if tt.configType == nil {
|
||||
require.Nil(t, opts.Config)
|
||||
return
|
||||
}
|
||||
require.IsType(t, tt.configType, opts.Config)
|
||||
switch cfg := opts.Config.(type) {
|
||||
case mysql.Config:
|
||||
require.Equal(t, conf.Database.DSN, cfg.DSN)
|
||||
case sessionRedis.Config:
|
||||
require.Equal(t, tt.redisAddr, cfg.Options.Addr)
|
||||
require.Equal(t, 1, cfg.Options.DB)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user