2021-01-19 15:52:12 +00:00
// Copyright 2020-2021 the Pinniped contributors. All Rights Reserved.
2020-10-15 19:40:56 +00:00
// SPDX-License-Identifier: Apache-2.0
package supervisor
import (
"io/ioutil"
"os"
"testing"
2021-05-12 20:20:00 +00:00
"k8s.io/utils/pointer"
2020-10-15 19:40:56 +00:00
"github.com/stretchr/testify/require"
"go.pinniped.dev/internal/here"
)
func TestFromPath ( t * testing . T ) {
tests := [ ] struct {
name string
yaml string
wantConfig * Config
2020-10-28 18:56:50 +00:00
wantError string
2020-10-15 19:40:56 +00:00
} {
{
name : "Happy" ,
yaml : here . Doc ( `
-- -
2021-01-19 15:52:12 +00:00
apiGroupSuffix : some . suffix . com
2020-10-15 19:40:56 +00:00
labels :
myLabelKey1 : myLabelValue1
myLabelKey2 : myLabelValue2
2020-10-28 18:56:50 +00:00
names :
defaultTLSCertificateSecret : my - secret - name
2020-10-15 19:40:56 +00:00
` ) ,
wantConfig : & Config {
2021-05-12 20:20:00 +00:00
APIGroupSuffix : pointer . StringPtr ( "some.suffix.com" ) ,
2020-10-15 19:40:56 +00:00
Labels : map [ string ] string {
"myLabelKey1" : "myLabelValue1" ,
"myLabelKey2" : "myLabelValue2" ,
} ,
2020-10-28 18:56:50 +00:00
NamesConfig : NamesConfigSpec {
DefaultTLSCertificateSecret : "my-secret-name" ,
} ,
2020-10-15 19:40:56 +00:00
} ,
} ,
{
name : "When only the required fields are present, causes other fields to be defaulted" ,
yaml : here . Doc ( `
-- -
2020-10-28 18:56:50 +00:00
names :
defaultTLSCertificateSecret : my - secret - name
2020-10-15 19:40:56 +00:00
` ) ,
wantConfig : & Config {
2021-05-12 20:20:00 +00:00
APIGroupSuffix : pointer . StringPtr ( "pinniped.dev" ) ,
2021-01-19 15:52:12 +00:00
Labels : map [ string ] string { } ,
2020-10-28 18:56:50 +00:00
NamesConfig : NamesConfigSpec {
DefaultTLSCertificateSecret : "my-secret-name" ,
} ,
2020-10-15 19:40:56 +00:00
} ,
} ,
2020-10-28 18:56:50 +00:00
{
name : "Missing defaultTLSCertificateSecret name" ,
yaml : here . Doc ( `
-- -
` ) ,
wantError : "validate names: missing required names: defaultTLSCertificateSecret" ,
} ,
2021-01-13 01:27:41 +00:00
{
name : "apiGroupSuffix is prefixed with '.'" ,
yaml : here . Doc ( `
-- -
apiGroupSuffix : . starts . with . dot
names :
defaultTLSCertificateSecret : my - secret - name
` ) ,
2021-02-05 17:56:05 +00:00
wantError : "validate apiGroupSuffix: a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')" ,
2021-01-13 01:27:41 +00:00
} ,
2020-10-15 19:40:56 +00:00
}
for _ , test := range tests {
test := test
t . Run ( test . name , func ( t * testing . T ) {
// Write yaml to temp file
f , err := ioutil . TempFile ( "" , "pinniped-test-config-yaml-*" )
require . NoError ( t , err )
defer func ( ) {
err := os . Remove ( f . Name ( ) )
require . NoError ( t , err )
} ( )
_ , err = f . WriteString ( test . yaml )
require . NoError ( t , err )
err = f . Close ( )
require . NoError ( t , err )
// Test FromPath()
config , err := FromPath ( f . Name ( ) )
2020-10-28 18:56:50 +00:00
if test . wantError != "" {
require . EqualError ( t , err , test . wantError )
} else {
require . NoError ( t , err )
require . Equal ( t , test . wantConfig , config )
}
2020-10-15 19:40:56 +00:00
} )
}
}