Adding ResourceRequirementSpec to v1beta1, v1beta2, and v1beta3 APIs. The old resource
quantities 'CPU' and 'Memory' will be preserved until support for v1beta1 and v1beta2 APIs are dropped. Improved resource validation in the process.
This commit is contained in:
@@ -268,6 +268,13 @@ func TestValidatePullPolicy(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func getResourceLimits(cpu, memory string) api.ResourceList {
|
||||
res := api.ResourceList{}
|
||||
res[api.ResourceCPU] = resource.MustParse(cpu)
|
||||
res[api.ResourceMemory] = resource.MustParse(memory)
|
||||
return res
|
||||
}
|
||||
|
||||
func TestValidateContainers(t *testing.T) {
|
||||
volumes := util.StringSet{}
|
||||
capabilities.SetForTests(capabilities.Capabilities{
|
||||
@@ -287,6 +294,17 @@ func TestValidateContainers(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "resources-test",
|
||||
Image: "image",
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: api.ResourceList{
|
||||
api.ResourceName(api.ResourceCPU): resource.MustParse("10"),
|
||||
api.ResourceName(api.ResourceMemory): resource.MustParse("10G"),
|
||||
api.ResourceName("my.org/resource"): resource.MustParse("10m"),
|
||||
},
|
||||
},
|
||||
},
|
||||
{Name: "abc-1234", Image: "image", Privileged: true},
|
||||
}
|
||||
if errs := validateContainers(successCase, volumes); len(errs) != 0 {
|
||||
@@ -349,6 +367,35 @@ func TestValidateContainers(t *testing.T) {
|
||||
"privilege disabled": {
|
||||
{Name: "abc", Image: "image", Privileged: true},
|
||||
},
|
||||
"invalid compute resource": {
|
||||
{
|
||||
Name: "abc-123",
|
||||
Image: "image",
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: api.ResourceList{
|
||||
"disk": resource.MustParse("10G"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"Resource CPU invalid": {
|
||||
{
|
||||
Name: "abc-123",
|
||||
Image: "image",
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: getResourceLimits("-10", "0"),
|
||||
},
|
||||
},
|
||||
},
|
||||
"Resource Memory invalid": {
|
||||
{
|
||||
Name: "abc-123",
|
||||
Image: "image",
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: getResourceLimits("0", "-10"),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for k, v := range errorCases {
|
||||
if errs := validateContainers(v, volumes); len(errs) == 0 {
|
||||
@@ -422,8 +469,12 @@ func TestValidateManifest(t *testing.T) {
|
||||
Image: "image",
|
||||
Command: []string{"foo", "bar"},
|
||||
WorkingDir: "/tmp",
|
||||
Memory: resource.MustParse("1"),
|
||||
CPU: resource.MustParse("1"),
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: api.ResourceList{
|
||||
"cpu": resource.MustParse("1"),
|
||||
"memory": resource.MustParse("1"),
|
||||
},
|
||||
},
|
||||
Ports: []api.Port{
|
||||
{Name: "p1", ContainerPort: 80, HostPort: 8080},
|
||||
{Name: "p2", ContainerPort: 81},
|
||||
@@ -711,7 +762,9 @@ func TestValidatePodUpdate(t *testing.T) {
|
||||
Containers: []api.Container{
|
||||
{
|
||||
Image: "foo:V1",
|
||||
CPU: resource.MustParse("100m"),
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: getResourceLimits("100m", "0"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -722,7 +775,9 @@ func TestValidatePodUpdate(t *testing.T) {
|
||||
Containers: []api.Container{
|
||||
{
|
||||
Image: "foo:V2",
|
||||
CPU: resource.MustParse("1000m"),
|
||||
Resources: api.ResourceRequirementSpec{
|
||||
Limits: getResourceLimits("1000m", "0"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1675,8 +1730,6 @@ func TestValidateResourceNames(t *testing.T) {
|
||||
{"", false},
|
||||
{".", false},
|
||||
{"..", false},
|
||||
{"kubernetes.io/cpu", true},
|
||||
{"kubernetes.io/disk", false},
|
||||
{"my.favorite.app.co/12345", true},
|
||||
{"my.favorite.app.co/_12345", false},
|
||||
{"my.favorite.app.co/12345_", false},
|
||||
@@ -1687,7 +1740,7 @@ func TestValidateResourceNames(t *testing.T) {
|
||||
{"kubernetes.io/will/not/work/", false},
|
||||
}
|
||||
for _, item := range table {
|
||||
err := ValidateResourceName(item.input)
|
||||
err := validateResourceName(item.input)
|
||||
if len(err) != 0 && item.success {
|
||||
t.Errorf("expected no failure for input %q", item.input)
|
||||
} else if len(err) == 0 && !item.success {
|
||||
|
Reference in New Issue
Block a user