//go:build !integration // +build !integration package function import "testing" func Test_validateBuildEnvs(t *testing.T) { name := "name" name2 := "name2" value := "value" value2 := "value2" incorrectName := ",foo" incorrectName2 := ":foo" valueLocalEnv := "{{ env:MY_ENV }}" valueLocalEnv2 := "{{ env:MY_ENV2 }}" valueLocalEnv3 := "{{env:MY_ENV3}}" valueLocalEnvIncorrect := "{{ envs:MY_ENV }}" valueLocalEnvIncorrect2 := "{{ MY_ENV }}" valueLocalEnvIncorrect3 := "{{env:MY_ENV}}foo" tests := []struct { name string envs []Env errs int }{ { "correct entry - single env with value", []Env{ { Name: &name, Value: &value, }, }, 0, }, { "incorrect entry - missing value", []Env{ { Name: &name, }, }, 1, }, { "incorrect entry - invalid name", []Env{ { Name: &incorrectName, Value: &value, }, }, 1, }, { "incorrect entry - invalid name2", []Env{ { Name: &incorrectName2, Value: &value, }, }, 1, }, { "correct entry - multiple envs with value", []Env{ { Name: &name, Value: &value, }, { Name: &name2, Value: &value2, }, }, 0, }, { "incorrect entry - mmissing value - multiple envs", []Env{ { Name: &name, }, { Name: &name2, }, }, 2, }, { "correct entry - single env with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, }, 0, }, { "correct entry - multiple envs with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, { Name: &name, Value: &valueLocalEnv2, }, { Name: &name, Value: &valueLocalEnv3, }, }, 0, }, { "incorrect entry - multiple envs with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, { Name: &name, Value: &valueLocalEnvIncorrect, }, { Name: &name, Value: &valueLocalEnvIncorrect2, }, { Name: &name, Value: &valueLocalEnvIncorrect3, }, }, 3, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := ValidateEnvs(tt.envs); len(got) != tt.errs { t.Errorf("validateEnvs() = %v\n got %d errors but want %d", got, len(got), tt.errs) } }) } } func Test_validateEnvs(t *testing.T) { name := "name" name2 := "name2" value := "value" value2 := "value2" incorrectName := ",foo" incorrectName2 := ":foo" valueLocalEnv := "{{ env:MY_ENV }}" valueLocalEnv2 := "{{ env:MY_ENV2 }}" valueLocalEnv3 := "{{env:MY_ENV3}}" valueLocalEnvIncorrect := "{{ envs:MY_ENV }}" valueLocalEnvIncorrect2 := "{{ MY_ENV }}" valueLocalEnvIncorrect3 := "{{env:MY_ENV}}foo" valueSecretKey := "{{ secret:mysecret:key }}" valueSecretKey2 := "{{secret:my-secret:key }}" valueSecretKey3 := "{{secret:my-secret:key2}}" valueSecretKey4 := "{{secret:my-secret:key-2}}" valueSecretKey5 := "{{secret:my-secret:key.2}}" valueSecretKey6 := "{{secret:my-secret:key_2}}" valueSecretKey7 := "{{secret:my-secret:key_2-1}}" valueSecretKey8 := "{{secret:my-secret:key_2-1.3}}" valueSecretKeyIncorrect := "{{ secret:my-secret:key,key }}" valueSecretKeyIncorrect2 := "{{ my-secret:key }}" valueSecretKeyIncorrect3 := "{{ secret:my-secret:key }}foo" valueConfigMapKey := "{{ configMap:myconfigmap:key }}" valueConfigMapKey2 := "{{ configMap:myconfigmap:key }}" valueConfigMapKey3 := "{{ configMap:myconfigmap:key2 }}" valueConfigMapKey4 := "{{ configMap:myconfigmap:key-2 }}" valueConfigMapKey5 := "{{ configMap:myconfigmap:key.2 }}" valueConfigMapKey6 := "{{ configMap:myconfigmap:key_2 }}" valueConfigMapKey7 := "{{ configMap:myconfigmap:key_2-1 }}" valueConfigMapKey8 := "{{ configMap:myconfigmap:key_2.1 }}" valueSecret := "{{ secret:my-secret }}" valueSecret2 := "{{ secret:mysecret }}" valueSecret3 := "{{ secret:mysecret}}" valueSecretIncorrect := "{{ my-secret }}" valueSecretIncorrect2 := "my-secret" valueSecretIncorrect3 := "{{ secret:my-secret }}foo" valueConfigMap := "{{ configMap:myconfigmap }}" tests := []struct { name string envs []Env errs int }{ { "correct entry - single env with value", []Env{ { Name: &name, Value: &value, }, }, 0, }, { "incorrect entry - missing value", []Env{ { Name: &name, }, }, 1, }, { "incorrect entry - invalid name", []Env{ { Name: &incorrectName, Value: &value, }, }, 1, }, { "incorrect entry - invalid name2", []Env{ { Name: &incorrectName2, Value: &value, }, }, 1, }, { "correct entry - multiple envs with value", []Env{ { Name: &name, Value: &value, }, { Name: &name2, Value: &value2, }, }, 0, }, { "incorrect entry - mmissing value - multiple envs", []Env{ { Name: &name, }, { Name: &name2, }, }, 2, }, { "correct entry - single env with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, }, 0, }, { "correct entry - multiple envs with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, { Name: &name, Value: &valueLocalEnv2, }, { Name: &name, Value: &valueLocalEnv3, }, }, 0, }, { "incorrect entry - multiple envs with value Local env", []Env{ { Name: &name, Value: &valueLocalEnv, }, { Name: &name, Value: &valueLocalEnvIncorrect, }, { Name: &name, Value: &valueLocalEnvIncorrect2, }, { Name: &name, Value: &valueLocalEnvIncorrect3, }, }, 3, }, { "correct entry - single secret with key", []Env{ { Name: &name, Value: &valueSecretKey, }, }, 0, }, { "correct entry - single configMap with key", []Env{ { Name: &name, Value: &valueConfigMapKey, }, }, 0, }, { "correct entry - multiple configMaps with key", []Env{ { Name: &name, Value: &valueConfigMapKey, }, { Name: &name, Value: &valueConfigMapKey2, }, { Name: &name, Value: &valueConfigMapKey3, }, { Name: &name, Value: &valueConfigMapKey4, }, { Name: &name, Value: &valueConfigMapKey5, }, { Name: &name, Value: &valueConfigMapKey6, }, { Name: &name, Value: &valueConfigMapKey7, }, { Name: &name, Value: &valueConfigMapKey8, }, }, 0, }, { "correct entry - multiple secrets with key", []Env{ { Name: &name, Value: &valueSecretKey, }, { Name: &name, Value: &valueSecretKey2, }, { Name: &name, Value: &valueSecretKey3, }, { Name: &name, Value: &valueSecretKey4, }, { Name: &name, Value: &valueSecretKey5, }, { Name: &name, Value: &valueSecretKey6, }, { Name: &name, Value: &valueSecretKey7, }, { Name: &name, Value: &valueSecretKey8, }, }, 0, }, { "correct entry - both secret and configmap with key", []Env{ { Name: &name, Value: &valueSecretKey, }, { Name: &name, Value: &valueConfigMapKey, }, }, 0, }, { "incorrect entry - single secret with key", []Env{ { Name: &name, Value: &valueSecretKeyIncorrect, }, }, 1, }, { "incorrect entry - multiple secrets with key", []Env{ { Name: &name, Value: &valueSecretKey, }, { Name: &name, Value: &valueSecretKeyIncorrect, }, { Name: &name, Value: &valueSecretKeyIncorrect2, }, { Name: &name, Value: &valueSecretKeyIncorrect3, }, }, 3, }, { "correct entry - single whole secret", []Env{ { Value: &valueSecret, }, }, 0, }, { "correct entry - single whole configMap", []Env{ { Value: &valueConfigMap, }, }, 0, }, { "correct entry - multiple whole secret", []Env{ { Value: &valueSecret, }, { Value: &valueSecret2, }, { Value: &valueSecret3, }, }, 0, }, { "correct entry - both whole secret and configMap", []Env{ { Value: &valueSecret, }, { Value: &valueConfigMap, }, }, 0, }, { "incorrect entry - single whole secret", []Env{ { Value: &value, }, }, 1, }, { "incorrect entry - multiple whole secret", []Env{ { Value: &valueSecretIncorrect, }, { Value: &valueSecretIncorrect2, }, { Value: &valueSecretIncorrect3, }, { Value: &value, }, { Value: &valueLocalEnv, }, { Value: &valueLocalEnv2, }, { Value: &valueLocalEnv3, }, { Value: &valueSecret, }, }, 7, }, { "correct entry - all combinations", []Env{ { Name: &name, Value: &value, }, { Name: &name2, Value: &value2, }, { Name: &name, Value: &valueLocalEnv, }, { Name: &name, Value: &valueLocalEnv2, }, { Name: &name, Value: &valueLocalEnv3, }, { Value: &valueSecret, }, { Value: &valueSecret2, }, { Value: &valueSecret3, }, { Value: &valueConfigMap, }, { Name: &name, Value: &valueSecretKey, }, { Name: &name, Value: &valueSecretKey2, }, { Name: &name, Value: &valueSecretKey3, }, { Name: &name, Value: &valueConfigMapKey, }, }, 0, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := ValidateEnvs(tt.envs); len(got) != tt.errs { t.Errorf("validateEnvs() = %v\n got %d errors but want %d", got, len(got), tt.errs) } }) } }