Use structs for container validation test

This introduces no changes to unit tests other than to switch from
map-based to struct-based tables in TestValidateContainers and
TestValidateInitContainers in order to make diffs for later commits
easier to read.
This commit is contained in:
Lee Verberne 2022-07-26 06:31:35 +02:00
parent f88f76f444
commit 4a7fd2a614

View File

@ -7169,30 +7169,62 @@ func TestValidateContainers(t *testing.T) {
capabilities.SetForTests(capabilities.Capabilities{
AllowPrivileged: false,
})
errorCases := map[string][]core.Container{
"zero-length name": {{Name: "", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
"zero-length-image": {{Name: "abc", Image: "", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
"name > 63 characters": {{Name: strings.Repeat("a", 64), Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
"name not a DNS label": {{Name: "a.b.c", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
"name not unique": {
errorCases := []struct {
title string
containers []core.Container
}{
{
"zero-length name",
[]core.Container{{Name: "", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
},
{
"zero-length-image",
[]core.Container{{Name: "abc", Image: "", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
},
{
"name > 63 characters",
[]core.Container{{Name: strings.Repeat("a", 64), Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
},
{
"name not a DNS label",
[]core.Container{{Name: "a.b.c", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
},
{
"name not unique",
[]core.Container{
{Name: "abc", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
{Name: "abc", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
},
"zero-length image": {{Name: "abc", Image: "", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
"host port not unique": {
},
{
"zero-length image",
[]core.Container{{Name: "abc", Image: "", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}},
},
{
"host port not unique",
[]core.Container{
{Name: "abc", Image: "image", Ports: []core.ContainerPort{{ContainerPort: 80, HostPort: 80, Protocol: "TCP"}},
ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
{Name: "def", Image: "image", Ports: []core.ContainerPort{{ContainerPort: 81, HostPort: 80, Protocol: "TCP"}},
ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
},
"invalid env var name": {
},
{
"invalid env var name",
[]core.Container{
{Name: "abc", Image: "image", Env: []core.EnvVar{{Name: "ev!1"}}, ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
},
"unknown volume name": {
},
{
"unknown volume name",
[]core.Container{
{Name: "abc", Image: "image", VolumeMounts: []core.VolumeMount{{Name: "anything", MountPath: "/foo"}},
ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"},
},
"invalid lifecycle, no exec command.": {
},
{
"invalid lifecycle, no exec command.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7205,7 +7237,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid lifecycle, no http path.": {
},
{
"invalid lifecycle, no http path.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7218,7 +7253,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid lifecycle, no tcp socket port.": {
},
{
"invalid lifecycle, no tcp socket port.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7231,7 +7269,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid lifecycle, zero tcp socket port.": {
},
{
"invalid lifecycle, zero tcp socket port.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7246,7 +7287,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid lifecycle, no action.": {
},
{
"invalid lifecycle, no action.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7257,7 +7301,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid readiness probe, terminationGracePeriodSeconds set.": {
},
{
"invalid readiness probe, terminationGracePeriodSeconds set.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7271,7 +7318,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid liveness probe, no tcp socket port.": {
},
{
"invalid liveness probe, no tcp socket port.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7284,7 +7334,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid liveness probe, no action.": {
},
{
"invalid liveness probe, no action.",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7295,7 +7348,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"invalid message termination policy": {
},
{
"invalid message termination policy",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7303,7 +7359,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "Unknown",
},
},
"empty message termination policy": {
},
{
"empty message termination policy",
[]core.Container{
{
Name: "life-123",
Image: "image",
@ -7311,10 +7370,16 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "",
},
},
"privilege disabled": {
},
{
"privilege disabled",
[]core.Container{
{Name: "abc", Image: "image", SecurityContext: fakeValidSecurityContext(true)},
},
"invalid compute resource": {
},
{
"invalid compute resource",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7327,7 +7392,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Resource CPU invalid": {
},
{
"Resource CPU invalid",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7338,7 +7406,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Resource Requests CPU invalid": {
},
{
"Resource Requests CPU invalid",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7349,7 +7420,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Resource Memory invalid": {
},
{
"Resource Memory invalid",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7360,7 +7434,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Request limit simple invalid": {
},
{
"Request limit simple invalid",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7372,7 +7449,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Invalid storage limit request": {
},
{
"Invalid storage limit request",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7385,7 +7465,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Request limit multiple invalid": {
},
{
"Request limit multiple invalid",
[]core.Container{
{
Name: "abc-123",
Image: "image",
@ -7397,7 +7480,10 @@ func TestValidateContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
"Invalid env from": {
},
{
"Invalid env from",
[]core.Container{
{
Name: "env-from-source",
Image: "image",
@ -7414,10 +7500,11 @@ func TestValidateContainers(t *testing.T) {
},
},
},
},
}
for k, v := range errorCases {
if errs := validateContainers(v, false, volumeDevices, field.NewPath("field"), PodValidationOptions{}); len(errs) == 0 {
t.Errorf("expected failure for %s", k)
for _, tc := range errorCases {
if errs := validateContainers(tc.containers, false, volumeDevices, field.NewPath("field"), PodValidationOptions{}); len(errs) == 0 {
t.Errorf("expected failure for %s", tc.title)
}
}
}
@ -7457,8 +7544,13 @@ func TestValidateInitContainers(t *testing.T) {
capabilities.SetForTests(capabilities.Capabilities{
AllowPrivileged: false,
})
errorCases := map[string][]core.Container{
"duplicate ports": {
errorCases := []struct {
title string
initContainers []core.Container
}{
{
"duplicate ports",
[]core.Container{
{
Name: "abc",
Image: "image",
@ -7474,10 +7566,11 @@ func TestValidateInitContainers(t *testing.T) {
TerminationMessagePolicy: "File",
},
},
},
}
for k, v := range errorCases {
if errs := validateContainers(v, true, volumeDevices, field.NewPath("field"), PodValidationOptions{}); len(errs) == 0 {
t.Errorf("expected failure for %s", k)
for _, tc := range errorCases {
if errs := validateContainers(tc.initContainers, true, volumeDevices, field.NewPath("field"), PodValidationOptions{}); len(errs) == 0 {
t.Errorf("expected failure for %s", tc.title)
}
}
}