package validation
import (
"testing"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/runtime"
"github.com/openshift/origin/pkg/template/api"
)
func makeParameter(name, value string) *api.Parameter {
return &api.Parameter{
Name: name,
Value: value,
}
}
func TestValidateParameter(t *testing.T) {
var tests = []struct {
ParameterName string
IsValidExpected bool
}{
{"VALname_NAME", true},
{"_valid_name_99", true},
{"10gen_valid_name", true},
{"", false},
{"INVALname NAME", false},
{"IVALname-NAME", false},
{">INVALname_NAME", false},
{"$INVALname_NAME", false},
{"${INVALname_NAME}", false},
}
for _, test := range tests {
param := makeParameter(test.ParameterName, "1")
if test.IsValidExpected && len(ValidateParameter(param, nil)) != 0 {
t.Errorf("Expected zero validation errors on valid parameter name.")
}
if !test.IsValidExpected && len(ValidateParameter(param, nil)) == 0 {
t.Errorf("Expected some validation errors on invalid parameter name.")
}
}
}
func TestValidateProcessTemplate(t *testing.T) {
var tests = []struct {
template *api.Template
isValidExpected bool
}{
{ // Empty Template, should pass
&api.Template{},
true,
},
{ // Template with name, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "templateId"},
},
true,
},
{ // Template with invalid Parameter, should fail on Parameter name
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "templateId"},
Parameters: []api.Parameter{
*(makeParameter("", "1")),
},
},
false,
},
{ // Template with valid Parameter, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "templateId"},
Parameters: []api.Parameter{
*(makeParameter("VALname_NAME", "1")),
},
},
true,
},
{ // Template with Item of unknown Kind, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "templateId"},
Parameters: []api.Parameter{
*(makeParameter("VALname_NAME", "1")),
},
Objects: []runtime.Object{},
},
true,
},
}
for i, test := range tests {
errs := ValidateProcessedTemplate(test.template)
if len(errs) != 0 && test.isValidExpected {
t.Errorf("%d: Unexpected non-empty error list: %v", i, errs.ToAggregate())
}
if len(errs) == 0 && !test.isValidExpected {
t.Errorf("%d: Unexpected empty error list: %v", i, errs.ToAggregate())
}
}
}
func TestValidateTemplate(t *testing.T) {
var tests = []struct {
template *api.Template
isValidExpected bool
}{
{ // Empty Template, should fail on empty name
&api.Template{},
false,
},
{ // Template with name, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{
Name: "template",
Namespace: kapi.NamespaceDefault,
},
},
true,
},
{ // Template without namespace, should fail
&api.Template{
ObjectMeta: kapi.ObjectMeta{
Name: "template",
},
},
false,
},
{ // Template with invalid name characters, should fail
&api.Template{
ObjectMeta: kapi.ObjectMeta{
Name: "templateId",
Namespace: kapi.NamespaceDefault,
},
},
false,
},
{ // Template with invalid Parameter, should fail on Parameter name
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "template", Namespace: kapi.NamespaceDefault},
Parameters: []api.Parameter{
*(makeParameter("", "1")),
},
},
false,
},
{ // Template with valid Parameter, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "template", Namespace: kapi.NamespaceDefault},
Parameters: []api.Parameter{
*(makeParameter("VALname_NAME", "1")),
},
},
true,
},
{ // Template with empty items, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "template", Namespace: kapi.NamespaceDefault},
Parameters: []api.Parameter{},
Objects: []runtime.Object{},
},
true,
},
{ // Template with an item that is invalid, should pass
&api.Template{
ObjectMeta: kapi.ObjectMeta{Name: "template", Namespace: kapi.NamespaceDefault},
Parameters: []api.Parameter{},
Objects: []runtime.Object{
&kapi.Service{
ObjectMeta: kapi.ObjectMeta{
GenerateName: "test",
},
Spec: kapi.ServiceSpec{
Ports: []kapi.ServicePort{{Port: 8080}},
},
},
},
},
true,
},
}
for i, test := range tests {
errs := ValidateTemplate(test.template)
if len(errs) != 0 && test.isValidExpected {
t.Errorf("%d: Unexpected non-empty error list: %v", i, errs.ToAggregate())
}
if len(errs) == 0 && !test.isValidExpected {
t.Errorf("%d: Unexpected empty error list: %v", i, errs.ToAggregate())
}
}
}