Commit 1ec3457f authored by Tim Hockin's avatar Tim Hockin

Beef up validation tests

parent 8b42534f
...@@ -338,7 +338,22 @@ func TestValidateRestartPolicy(t *testing.T) { ...@@ -338,7 +338,22 @@ func TestValidateRestartPolicy(t *testing.T) {
if noPolicySpecified.Always == nil { if noPolicySpecified.Always == nil {
t.Errorf("expected Always policy specified") t.Errorf("expected Always policy specified")
} }
}
func TestValidateDNSPolicy(t *testing.T) {
successCases := []api.DNSPolicy{api.DNSClusterFirst, api.DNSDefault, api.DNSPolicy("")}
for _, policy := range successCases {
if errs := validateDNSPolicy(&policy); len(errs) != 0 {
t.Errorf("expected success: %v", errs)
}
}
errorCases := []api.DNSPolicy{api.DNSPolicy("invalid")}
for _, policy := range errorCases {
if errs := validateDNSPolicy(&policy); len(errs) == 0 {
t.Errorf("expected failure for %v", policy)
}
}
} }
func TestValidateManifest(t *testing.T) { func TestValidateManifest(t *testing.T) {
...@@ -404,59 +419,109 @@ func TestValidateManifest(t *testing.T) { ...@@ -404,59 +419,109 @@ func TestValidateManifest(t *testing.T) {
} }
} }
func TestValidatePod(t *testing.T) { func TestValidatePodSpec(t *testing.T) {
errs := ValidatePod(&api.Pod{ successCases := []api.PodSpec{
ObjectMeta: api.ObjectMeta{ {}, // empty is valid, if not very useful */
Name: "foo", Namespace: api.NamespaceDefault, { // Populate basic fields, leave defaults for most.
Labels: map[string]string{ Volumes: []api.Volume{{Name: "vol"}},
"foo": "bar", Containers: []api.Container{{Name: "ctr", Image: "image"}},
},
}, },
Spec: api.PodSpec{ { // Populate all fields.
RestartPolicy: api.RestartPolicy{ Volumes: []api.Volume{
Always: &api.RestartPolicyAlways{}, {Name: "vol"},
}, },
Containers: []api.Container{{Name: "ctr", Image: "image"}},
RestartPolicy: api.RestartPolicy{Always: &api.RestartPolicyAlways{}},
DNSPolicy: api.DNSClusterFirst,
NodeSelector: map[string]string{
"key": "value",
},
Host: "foobar",
}, },
})
if len(errs) != 0 {
t.Errorf("Unexpected non-zero error list: %#v", errs)
} }
errs = ValidatePod(&api.Pod{ for i := range successCases {
ObjectMeta: api.ObjectMeta{ if errs := ValidatePodSpec(&successCases[i]); len(errs) != 0 {
Name: "foo", t.Errorf("expected success: %v", errs)
Namespace: api.NamespaceDefault, }
Labels: map[string]string{ }
"foo": "bar",
}, failureCases := map[string]api.PodSpec{
"bad volume": {
Volumes: []api.Volume{{}},
},
"bad container": {
Containers: []api.Container{{}},
},
"bad DNS policy": {
DNSPolicy: api.DNSPolicy("invalid"),
}, },
Spec: api.PodSpec{}, }
}) for k, v := range failureCases {
if len(errs) != 0 { if errs := ValidatePodSpec(&v); len(errs) == 0 {
t.Errorf("Unexpected non-zero error list: %#v", errs) t.Errorf("expected failure for %q", k)
}
} }
errs = ValidatePodSpec(&api.PodSpec{ defaultPod := api.PodSpec{} // all empty fields
RestartPolicy: api.RestartPolicy{ if errs := ValidatePodSpec(&defaultPod); len(errs) != 0 {
Always: &api.RestartPolicyAlways{}, t.Errorf("expected success: %v", errs)
Never: &api.RestartPolicyNever{}, }
if util.AllPtrFieldsNil(defaultPod.RestartPolicy) {
t.Errorf("expected a default RestartPolicy")
}
if defaultPod.DNSPolicy == "" {
t.Errorf("expected a default DNSPolicy")
}
}
func TestValidatePod(t *testing.T) {
successCases := []api.Pod{
{ // Mostly empty.
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "ns"},
}, },
}) { // Basic fields.
if len(errs) != 1 { ObjectMeta: api.ObjectMeta{Name: "123", Namespace: "ns"},
t.Errorf("Unexpected error list: %#v", errs) Spec: api.PodSpec{
Volumes: []api.Volume{{Name: "vol"}},
Containers: []api.Container{{Name: "ctr", Image: "image"}},
},
},
{ // Just about everything.
ObjectMeta: api.ObjectMeta{Name: "abc.123.do-re-mi", Namespace: "ns"},
Spec: api.PodSpec{
Volumes: []api.Volume{
{Name: "vol"},
},
Containers: []api.Container{{Name: "ctr", Image: "image"}},
RestartPolicy: api.RestartPolicy{Always: &api.RestartPolicyAlways{}},
DNSPolicy: api.DNSClusterFirst,
NodeSelector: map[string]string{
"key": "value",
},
Host: "foobar",
},
},
}
for _, pod := range successCases {
if errs := ValidatePod(&pod); len(errs) != 0 {
t.Errorf("expected success: %v", errs)
}
} }
errs = ValidatePod(&api.Pod{
ObjectMeta: api.ObjectMeta{ errorCases := map[string]api.Pod{
Name: "foo", "bad name": {ObjectMeta: api.ObjectMeta{Name: "", Namespace: "ns"}},
Namespace: api.NamespaceDefault, "bad namespace": {ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}},
Labels: map[string]string{ "bad spec": {
"1/2/3/4/5": "bar", // invalid ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "ns"},
"valid": "bar", // good Spec: api.PodSpec{
Containers: []api.Container{{}},
}, },
}, },
Spec: api.PodSpec{}, }
}) for k, v := range errorCases {
if len(errs) != 1 { if errs := ValidatePod(&v); len(errs) == 0 {
t.Errorf("Unexpected error list: %#v", errs) t.Errorf("expected failure for %s", k)
}
} }
} }
...@@ -623,6 +688,57 @@ func TestValidatePodUpdate(t *testing.T) { ...@@ -623,6 +688,57 @@ func TestValidatePodUpdate(t *testing.T) {
} }
} }
func TestValidateBoundPods(t *testing.T) {
successCases := []api.BoundPod{
{ // Mostly empty.
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "ns"},
},
{ // Basic fields.
ObjectMeta: api.ObjectMeta{Name: "123", Namespace: "ns"},
Spec: api.PodSpec{
Volumes: []api.Volume{{Name: "vol"}},
Containers: []api.Container{{Name: "ctr", Image: "image"}},
},
},
{ // Just about everything.
ObjectMeta: api.ObjectMeta{Name: "abc.123.do-re-mi", Namespace: "ns"},
Spec: api.PodSpec{
Volumes: []api.Volume{
{Name: "vol"},
},
Containers: []api.Container{{Name: "ctr", Image: "image"}},
RestartPolicy: api.RestartPolicy{Always: &api.RestartPolicyAlways{}},
DNSPolicy: api.DNSClusterFirst,
NodeSelector: map[string]string{
"key": "value",
},
Host: "foobar",
},
},
}
for _, pod := range successCases {
if errs := ValidateBoundPod(&pod); len(errs) != 0 {
t.Errorf("expected success: %v", errs)
}
}
errorCases := map[string]api.Pod{
"bad name": {ObjectMeta: api.ObjectMeta{Name: "", Namespace: "ns"}},
"bad namespace": {ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: ""}},
"bad spec": {
ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "ns"},
Spec: api.PodSpec{
Containers: []api.Container{{}},
},
},
}
for k, v := range errorCases {
if errs := ValidatePod(&v); len(errs) == 0 {
t.Errorf("expected failure for %s", k)
}
}
}
func TestValidateService(t *testing.T) { func TestValidateService(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment