2019-04-25 04:52:08 +07:00
package validator
import (
"testing"
"github.com/stretchr/testify/assert"
2020-04-05 19:37:21 +07:00
"github.com/authelia/authelia/internal/configuration/schema"
2019-04-25 04:52:08 +07:00
)
func newDefaultSessionConfig ( ) schema . SessionConfiguration {
config := schema . SessionConfiguration { }
2020-05-02 23:20:40 +07:00
config . Secret = testJWTSecret
2019-04-25 04:52:08 +07:00
config . Domain = "example.com"
2020-05-06 02:35:32 +07:00
2019-04-25 04:52:08 +07:00
return config
}
func TestShouldSetDefaultSessionName ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
2020-04-05 19:37:21 +07:00
assert . Equal ( t , schema . DefaultSessionConfiguration . Name , config . Name )
}
func TestShouldSetDefaultSessionInactivity ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , schema . DefaultSessionConfiguration . Inactivity , config . Inactivity )
}
func TestShouldSetDefaultSessionExpiration ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , schema . DefaultSessionConfiguration . Expiration , config . Expiration )
2019-04-25 04:52:08 +07:00
}
2020-05-18 09:45:47 +07:00
func TestShouldHandleRedisConfigSuccessfully ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
validator . Clear ( )
// Set redis config because password must be set only when redis is used.
config . Redis = & schema . RedisSessionConfiguration {
Host : "redis.localhost" ,
Port : 6379 ,
Password : "password" ,
}
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
}
2020-03-28 13:10:39 +07:00
func TestShouldRaiseErrorWhenRedisIsUsedAndPasswordNotSet ( t * testing . T ) {
2019-04-25 04:52:08 +07:00
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
config . Secret = ""
ValidateSession ( & config , validator )
2020-03-28 13:10:39 +07:00
assert . Len ( t , validator . Errors ( ) , 0 )
validator . Clear ( )
// Set redis config because password must be set only when redis is used.
2020-05-18 09:45:47 +07:00
config . Redis = & schema . RedisSessionConfiguration {
Host : "redis.localhost" ,
Port : 6379 ,
}
2020-03-28 13:10:39 +07:00
ValidateSession ( & config , validator )
2019-04-25 04:52:08 +07:00
assert . Len ( t , validator . Errors ( ) , 1 )
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "Set secret of the session object" )
}
2020-05-18 09:45:47 +07:00
func TestShouldRaiseErrorWhenRedisHasHostnameButNoPort ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
validator . Clear ( )
// Set redis config because password must be set only when redis is used.
config . Redis = & schema . RedisSessionConfiguration {
Host : "redis.localhost" ,
Port : 0 ,
}
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 1 )
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "A redis port different than 0 must be provided" )
}
2019-04-25 04:52:08 +07:00
func TestShouldRaiseErrorWhenDomainNotSet ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
config . Domain = ""
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 1 )
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "Set domain of the session object" )
}
2020-04-04 06:11:33 +07:00
func TestShouldRaiseErrorWhenBadInactivityAndExpirationSet ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
2020-05-02 23:20:40 +07:00
config . Inactivity = testBadTimer
config . Expiration = testBadTimer
2020-04-04 06:11:33 +07:00
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 2 )
2020-04-09 08:05:17 +07:00
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "Error occurred parsing session expiration string: Could not convert the input string of -1 into a duration" )
assert . EqualError ( t , validator . Errors ( ) [ 1 ] , "Error occurred parsing session inactivity string: Could not convert the input string of -1 into a duration" )
2020-04-04 06:11:33 +07:00
}
func TestShouldRaiseErrorWhenBadRememberMeDurationSet ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
config . RememberMeDuration = "1 year"
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 1 )
2020-04-09 08:05:17 +07:00
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "Error occurred parsing session remember_me_duration string: Could not convert the input string of 1 year into a duration" )
2020-04-04 06:11:33 +07:00
}
func TestShouldSetDefaultRememberMeDuration ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultSessionConfig ( )
ValidateSession ( & config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , config . RememberMeDuration , schema . DefaultSessionConfiguration . RememberMeDuration )
}