2020-04-30 09:03:05 +07:00
package validator
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2021-08-11 08:04:35 +07:00
"github.com/authelia/authelia/v4/internal/configuration/schema"
2020-04-30 09:03:05 +07:00
)
2021-08-02 18:55:30 +07:00
func TestShouldSetDefaultServerValues ( t * testing . T ) {
2020-04-30 09:03:05 +07:00
validator := schema . NewStructValidator ( )
2021-08-02 18:55:30 +07:00
config := & schema . Configuration { }
ValidateServer ( config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Len ( t , validator . Warnings ( ) , 0 )
assert . Equal ( t , schema . DefaultServerConfiguration . Host , config . Server . Host )
assert . Equal ( t , schema . DefaultServerConfiguration . Port , config . Server . Port )
assert . Equal ( t , schema . DefaultServerConfiguration . ReadBufferSize , config . Server . ReadBufferSize )
assert . Equal ( t , schema . DefaultServerConfiguration . WriteBufferSize , config . Server . WriteBufferSize )
assert . Equal ( t , schema . DefaultServerConfiguration . TLS . Key , config . Server . TLS . Key )
assert . Equal ( t , schema . DefaultServerConfiguration . TLS . Certificate , config . Server . TLS . Certificate )
assert . Equal ( t , schema . DefaultServerConfiguration . Path , config . Server . Path )
assert . Equal ( t , schema . DefaultServerConfiguration . EnableExpvars , config . Server . EnableExpvars )
assert . Equal ( t , schema . DefaultServerConfiguration . EnablePprof , config . Server . EnablePprof )
}
func TestShouldSetDefaultConfig ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := & schema . Configuration { }
ValidateServer ( config , validator )
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Len ( t , validator . Warnings ( ) , 0 )
assert . Equal ( t , schema . DefaultServerConfiguration . ReadBufferSize , config . Server . ReadBufferSize )
assert . Equal ( t , schema . DefaultServerConfiguration . WriteBufferSize , config . Server . WriteBufferSize )
2020-04-30 09:03:05 +07:00
}
2021-03-22 16:04:09 +07:00
func TestShouldParsePathCorrectly ( t * testing . T ) {
validator := schema . NewStructValidator ( )
2021-08-02 18:55:30 +07:00
config := & schema . Configuration {
Server : schema . ServerConfiguration {
Path : "apple" ,
} ,
2021-03-22 16:04:09 +07:00
}
2021-08-02 18:55:30 +07:00
ValidateServer ( config , validator )
2021-03-22 16:04:09 +07:00
2021-08-02 18:55:30 +07:00
assert . Len ( t , validator . Errors ( ) , 0 )
assert . Len ( t , validator . Warnings ( ) , 0 )
assert . Equal ( t , "/apple" , config . Server . Path )
2021-03-22 16:04:09 +07:00
}
2020-04-30 09:03:05 +07:00
func TestShouldRaiseOnNegativeValues ( t * testing . T ) {
validator := schema . NewStructValidator ( )
2021-08-02 18:55:30 +07:00
config := & schema . Configuration {
Server : schema . ServerConfiguration {
ReadBufferSize : - 1 ,
WriteBufferSize : - 1 ,
} ,
2020-04-30 09:03:05 +07:00
}
2021-08-02 18:55:30 +07:00
ValidateServer ( config , validator )
2020-04-30 09:03:05 +07:00
require . Len ( t , validator . Errors ( ) , 2 )
2021-08-02 18:55:30 +07:00
2020-04-30 09:03:05 +07:00
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "server read buffer size must be above 0" )
assert . EqualError ( t , validator . Errors ( ) [ 1 ] , "server write buffer size must be above 0" )
}
2020-05-21 09:20:55 +07:00
func TestShouldRaiseOnNonAlphanumericCharsInPath ( t * testing . T ) {
validator := schema . NewStructValidator ( )
2021-08-02 18:55:30 +07:00
config := & schema . Configuration {
Server : schema . ServerConfiguration {
Path : "app le" ,
} ,
2020-05-21 09:20:55 +07:00
}
2021-08-02 18:55:30 +07:00
ValidateServer ( config , validator )
2020-05-21 09:20:55 +07:00
require . Len ( t , validator . Errors ( ) , 1 )
2021-08-02 18:55:30 +07:00
2020-05-21 09:20:55 +07:00
assert . Error ( t , validator . Errors ( ) [ 0 ] , "server path must only be alpha numeric characters" )
}
func TestShouldRaiseOnForwardSlashInPath ( t * testing . T ) {
validator := schema . NewStructValidator ( )
2021-08-02 18:55:30 +07:00
config := & schema . Configuration {
Server : schema . ServerConfiguration {
Path : "app/le" ,
} ,
2020-05-21 09:20:55 +07:00
}
2021-08-02 18:55:30 +07:00
ValidateServer ( config , validator )
2020-05-21 09:20:55 +07:00
assert . Len ( t , validator . Errors ( ) , 1 )
2021-08-02 18:55:30 +07:00
2020-05-21 09:20:55 +07:00
assert . Error ( t , validator . Errors ( ) [ 0 ] , "server path must not contain any forward slashes" )
}
2021-08-02 18:55:30 +07:00
func TestShouldValidateAndUpdateHost ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
config . Server . Host = ""
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , "0.0.0.0" , config . Server . Host )
}
func TestShouldRaiseErrorWhenTLSCertWithoutKeyIsProvided ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
config . Server . TLS . Certificate = testTLSCert
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 1 )
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "server: no TLS key provided to accompany the TLS certificate, please configure the 'server.tls.key' option" )
}
func TestShouldRaiseErrorWhenTLSKeyWithoutCertIsProvided ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
config . Server . TLS . Key = testTLSKey
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 1 )
assert . EqualError ( t , validator . Errors ( ) [ 0 ] , "server: no TLS certificate provided to accompany the TLS key, please configure the 'server.tls.certificate' option" )
}
func TestShouldNotRaiseErrorWhenBothTLSCertificateAndKeyAreProvided ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
config . Server . TLS . Certificate = testTLSCert
config . Server . TLS . Key = testTLSKey
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 0 )
}
func TestShouldNotUpdateConfig ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , 9090 , config . Server . Port )
assert . Equal ( t , loopback , config . Server . Host )
}
func TestShouldValidateAndUpdatePort ( t * testing . T ) {
validator := schema . NewStructValidator ( )
config := newDefaultConfig ( )
config . Server . Port = 0
ValidateServer ( & config , validator )
require . Len ( t , validator . Errors ( ) , 0 )
assert . Equal ( t , 9091 , config . Server . Port )
}