|
|
|
@ -30,7 +30,7 @@ import (
|
|
|
|
|
"github.com/hashicorp/golang-lru"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func getResourceList(cpu, memory string) api.ResourceList {
|
|
|
|
|
func getComputeResourceList(cpu, memory string) api.ResourceList {
|
|
|
|
|
res := api.ResourceList{}
|
|
|
|
|
if cpu != "" {
|
|
|
|
|
res[api.ResourceCPU] = resource.MustParse(cpu)
|
|
|
|
@ -41,6 +41,14 @@ func getResourceList(cpu, memory string) api.ResourceList {
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func getStorageResourceList(storage string) api.ResourceList {
|
|
|
|
|
res := api.ResourceList{}
|
|
|
|
|
if storage != "" {
|
|
|
|
|
res[api.ResourceStorage] = resource.MustParse(storage)
|
|
|
|
|
}
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func getResourceRequirements(requests, limits api.ResourceList) api.ResourceRequirements {
|
|
|
|
|
res := api.ResourceRequirements{}
|
|
|
|
|
res.Requests = requests
|
|
|
|
@ -80,15 +88,15 @@ func validLimitRange() api.LimitRange {
|
|
|
|
|
Limits: []api.LimitRangeItem{
|
|
|
|
|
{
|
|
|
|
|
Type: api.LimitTypePod,
|
|
|
|
|
Max: getResourceList("200m", "4Gi"),
|
|
|
|
|
Min: getResourceList("50m", "2Mi"),
|
|
|
|
|
Max: getComputeResourceList("200m", "4Gi"),
|
|
|
|
|
Min: getComputeResourceList("50m", "2Mi"),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Type: api.LimitTypeContainer,
|
|
|
|
|
Max: getResourceList("100m", "2Gi"),
|
|
|
|
|
Min: getResourceList("25m", "1Mi"),
|
|
|
|
|
Default: getResourceList("75m", "10Mi"),
|
|
|
|
|
DefaultRequest: getResourceList("50m", "5Mi"),
|
|
|
|
|
Max: getComputeResourceList("100m", "2Gi"),
|
|
|
|
|
Min: getComputeResourceList("25m", "1Mi"),
|
|
|
|
|
Default: getComputeResourceList("75m", "10Mi"),
|
|
|
|
|
DefaultRequest: getComputeResourceList("50m", "5Mi"),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -105,13 +113,13 @@ func validLimitRangeNoDefaults() api.LimitRange {
|
|
|
|
|
Limits: []api.LimitRangeItem{
|
|
|
|
|
{
|
|
|
|
|
Type: api.LimitTypePod,
|
|
|
|
|
Max: getResourceList("200m", "4Gi"),
|
|
|
|
|
Min: getResourceList("50m", "2Mi"),
|
|
|
|
|
Max: getComputeResourceList("200m", "4Gi"),
|
|
|
|
|
Min: getComputeResourceList("50m", "2Mi"),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
Type: api.LimitTypeContainer,
|
|
|
|
|
Max: getResourceList("100m", "2Gi"),
|
|
|
|
|
Min: getResourceList("25m", "1Mi"),
|
|
|
|
|
Max: getComputeResourceList("100m", "2Gi"),
|
|
|
|
|
Min: getComputeResourceList("25m", "1Mi"),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
@ -148,8 +156,8 @@ func validPodInit(pod api.Pod, resources ...api.ResourceRequirements) api.Pod {
|
|
|
|
|
func TestDefaultContainerResourceRequirements(t *testing.T) {
|
|
|
|
|
limitRange := validLimitRange()
|
|
|
|
|
expected := api.ResourceRequirements{
|
|
|
|
|
Requests: getResourceList("50m", "5Mi"),
|
|
|
|
|
Limits: getResourceList("75m", "10Mi"),
|
|
|
|
|
Requests: getComputeResourceList("50m", "5Mi"),
|
|
|
|
|
Limits: getComputeResourceList("75m", "10Mi"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
actual := defaultContainerResourceRequirements(&limitRange)
|
|
|
|
@ -180,7 +188,7 @@ func TestMergePodResourceRequirements(t *testing.T) {
|
|
|
|
|
limitRange := validLimitRange()
|
|
|
|
|
|
|
|
|
|
// pod with no resources enumerated should get each resource from default request
|
|
|
|
|
expected := getResourceRequirements(getResourceList("", ""), getResourceList("", ""))
|
|
|
|
|
expected := getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", ""))
|
|
|
|
|
pod := validPod("empty-resources", 1, expected)
|
|
|
|
|
defaultRequirements := defaultContainerResourceRequirements(&limitRange)
|
|
|
|
|
mergePodResourceRequirements(&pod, &defaultRequirements)
|
|
|
|
@ -193,7 +201,7 @@ func TestMergePodResourceRequirements(t *testing.T) {
|
|
|
|
|
verifyAnnotation(t, &pod, "LimitRanger plugin set: cpu, memory request for container foo-0; cpu, memory limit for container foo-0")
|
|
|
|
|
|
|
|
|
|
// pod with some resources enumerated should only merge empty
|
|
|
|
|
input := getResourceRequirements(getResourceList("", "512Mi"), getResourceList("", ""))
|
|
|
|
|
input := getResourceRequirements(getComputeResourceList("", "512Mi"), getComputeResourceList("", ""))
|
|
|
|
|
pod = validPodInit(validPod("limit-memory", 1, input), input)
|
|
|
|
|
expected = api.ResourceRequirements{
|
|
|
|
|
Requests: api.ResourceList{
|
|
|
|
@ -218,8 +226,8 @@ func TestMergePodResourceRequirements(t *testing.T) {
|
|
|
|
|
verifyAnnotation(t, &pod, "LimitRanger plugin set: cpu request for container foo-0; cpu, memory limit for container foo-0")
|
|
|
|
|
|
|
|
|
|
// pod with all resources enumerated should not merge anything
|
|
|
|
|
input = getResourceRequirements(getResourceList("100m", "512Mi"), getResourceList("200m", "1G"))
|
|
|
|
|
initInputs := []api.ResourceRequirements{getResourceRequirements(getResourceList("200m", "1G"), getResourceList("400m", "2G"))}
|
|
|
|
|
input = getResourceRequirements(getComputeResourceList("100m", "512Mi"), getComputeResourceList("200m", "1G"))
|
|
|
|
|
initInputs := []api.ResourceRequirements{getResourceRequirements(getComputeResourceList("200m", "1G"), getComputeResourceList("400m", "2G"))}
|
|
|
|
|
pod = validPodInit(validPod("limit-memory", 1, input), initInputs...)
|
|
|
|
|
expected = input
|
|
|
|
|
mergePodResourceRequirements(&pod, &defaultRequirements)
|
|
|
|
@ -246,106 +254,106 @@ func TestPodLimitFunc(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
successCases := []testCase{
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-cpu-request", 1, getResourceRequirements(getResourceList("100m", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-cpu-request", 1, getResourceRequirements(getComputeResourceList("100m", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-cpu-request-limit", 1, getResourceRequirements(getResourceList("100m", ""), getResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-cpu-request-limit", 1, getResourceRequirements(getComputeResourceList("100m", ""), getComputeResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-memory-request", 1, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-memory-request", 1, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-memory-request-limit", 1, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-memory-request-limit", 1, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-request-limit", 1, getResourceRequirements(getResourceList("500m", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-cpu-request-limit", 1, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-cpu-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-mem-request-limit", 1, getResourceRequirements(getResourceList("", "250Mi"), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-mem-request-limit", 1, getResourceRequirements(getComputeResourceList("", "250Mi"), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-ratio", 1, getResourceRequirements(getResourceList("500m", ""), getResourceList("750m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, getResourceList("1.5", "")),
|
|
|
|
|
pod: validPod("ctr-max-cpu-ratio", 1, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("750m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, getComputeResourceList("1.5", "")),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-mem-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-mem-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-cpu-request", 2, getResourceRequirements(getResourceList("75m", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-cpu-request", 2, getResourceRequirements(getComputeResourceList("75m", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-cpu-request-limit", 2, getResourceRequirements(getResourceList("75m", ""), getResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-cpu-request-limit", 2, getResourceRequirements(getComputeResourceList("75m", ""), getComputeResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-memory-request", 2, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-memory-request", 2, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-memory-request-limit", 2, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-memory-request-limit", 2, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPodInit(
|
|
|
|
|
validPod("pod-init-min-memory-request", 2, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", ""))),
|
|
|
|
|
getResourceRequirements(getResourceList("", "100Mi"), getResourceList("", "")),
|
|
|
|
|
validPod("pod-init-min-memory-request", 2, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", ""))),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("", "100Mi"), getComputeResourceList("", "")),
|
|
|
|
|
),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPodInit(
|
|
|
|
|
validPod("pod-init-min-memory-request-limit", 2, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", "100Mi"))),
|
|
|
|
|
getResourceRequirements(getResourceList("", "80Mi"), getResourceList("", "100Mi")),
|
|
|
|
|
validPod("pod-init-min-memory-request-limit", 2, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", "100Mi"))),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("", "80Mi"), getComputeResourceList("", "100Mi")),
|
|
|
|
|
),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-cpu-request-limit", 2, getResourceRequirements(getResourceList("500m", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-cpu-request-limit", 2, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-cpu-limit", 2, getResourceRequirements(getResourceList("", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-cpu-limit", 2, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPodInit(
|
|
|
|
|
validPod("pod-init-max-cpu-request-limit", 2, getResourceRequirements(getResourceList("500m", ""), getResourceList("1", ""))),
|
|
|
|
|
getResourceRequirements(getResourceList("1", ""), getResourceList("2", "")),
|
|
|
|
|
getResourceRequirements(getResourceList("1", ""), getResourceList("1", "")),
|
|
|
|
|
validPod("pod-init-max-cpu-request-limit", 2, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("1", ""), getComputeResourceList("2", "")),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("1", ""), getComputeResourceList("1", "")),
|
|
|
|
|
),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPodInit(
|
|
|
|
|
validPod("pod-init-max-cpu-limit", 2, getResourceRequirements(getResourceList("", ""), getResourceList("1", ""))),
|
|
|
|
|
getResourceRequirements(getResourceList("", ""), getResourceList("2", "")),
|
|
|
|
|
getResourceRequirements(getResourceList("", ""), getResourceList("2", "")),
|
|
|
|
|
validPod("pod-init-max-cpu-limit", 2, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("2", "")),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("2", "")),
|
|
|
|
|
),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-request-limit", 2, getResourceRequirements(getResourceList("", "250Mi"), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-mem-request-limit", 2, getResourceRequirements(getComputeResourceList("", "250Mi"), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-limit", 2, getResourceRequirements(getResourceList("", ""), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-mem-limit", 2, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-ratio", 3, getResourceRequirements(getResourceList("", "300Mi"), getResourceList("", "450Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "2Gi"), api.ResourceList{}, api.ResourceList{}, getResourceList("", "1.5")),
|
|
|
|
|
pod: validPod("pod-max-mem-ratio", 3, getResourceRequirements(getComputeResourceList("", "300Mi"), getComputeResourceList("", "450Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "2Gi"), api.ResourceList{}, api.ResourceList{}, getComputeResourceList("", "1.5")),
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for i := range successCases {
|
|
|
|
@ -358,99 +366,99 @@ func TestPodLimitFunc(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
errorCases := []testCase{
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-cpu-request", 1, getResourceRequirements(getResourceList("40m", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-cpu-request", 1, getResourceRequirements(getComputeResourceList("40m", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-cpu-request-limit", 1, getResourceRequirements(getResourceList("40m", ""), getResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-cpu-request-limit", 1, getResourceRequirements(getComputeResourceList("40m", ""), getComputeResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-cpu-no-request-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-cpu-no-request-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("50m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-memory-request", 1, getResourceRequirements(getResourceList("", "40Mi"), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-memory-request", 1, getResourceRequirements(getComputeResourceList("", "40Mi"), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-memory-request-limit", 1, getResourceRequirements(getResourceList("", "40Mi"), getResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-memory-request-limit", 1, getResourceRequirements(getComputeResourceList("", "40Mi"), getComputeResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-min-memory-no-request-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-min-memory-no-request-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, getComputeResourceList("", "50Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-request-limit", 1, getResourceRequirements(getResourceList("500m", ""), getResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-cpu-request-limit", 1, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-cpu-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-no-request-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-cpu-no-request-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-cpu-ratio", 1, getResourceRequirements(getResourceList("1250m", ""), getResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, getResourceList("1", "")),
|
|
|
|
|
pod: validPod("ctr-max-cpu-ratio", 1, getResourceRequirements(getComputeResourceList("1250m", ""), getComputeResourceList("2500m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, getComputeResourceList("1", "")),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-mem-request-limit", 1, getResourceRequirements(getResourceList("", "250Mi"), getResourceList("", "2Gi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-mem-request-limit", 1, getResourceRequirements(getComputeResourceList("", "250Mi"), getComputeResourceList("", "2Gi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-mem-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", "2Gi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-mem-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "2Gi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("ctr-max-mem-no-request-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("ctr-max-mem-no-request-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypeContainer, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-cpu-request", 1, getResourceRequirements(getResourceList("75m", ""), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-cpu-request", 1, getResourceRequirements(getComputeResourceList("75m", ""), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-cpu-request-limit", 1, getResourceRequirements(getResourceList("75m", ""), getResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-cpu-request-limit", 1, getResourceRequirements(getComputeResourceList("75m", ""), getComputeResourceList("200m", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("100m", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-memory-request", 1, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-memory-request", 1, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-min-memory-request-limit", 1, getResourceRequirements(getResourceList("", "60Mi"), getResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-min-memory-request-limit", 1, getResourceRequirements(getComputeResourceList("", "60Mi"), getComputeResourceList("", "100Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, getComputeResourceList("", "100Mi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-cpu-request-limit", 3, getResourceRequirements(getResourceList("500m", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-cpu-request-limit", 3, getResourceRequirements(getComputeResourceList("500m", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-cpu-limit", 3, getResourceRequirements(getResourceList("", ""), getResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-cpu-limit", 3, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("1", ""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("2", ""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-request-limit", 3, getResourceRequirements(getResourceList("", "250Mi"), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-mem-request-limit", 3, getResourceRequirements(getComputeResourceList("", "250Mi"), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-limit", 3, getResourceRequirements(getResourceList("", ""), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
pod: validPod("pod-max-mem-limit", 3, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPodInit(
|
|
|
|
|
validPod("pod-init-max-mem-limit", 1, getResourceRequirements(getResourceList("", ""), getResourceList("", "500Mi"))),
|
|
|
|
|
getResourceRequirements(getResourceList("", ""), getResourceList("", "1.5Gi")),
|
|
|
|
|
validPod("pod-init-max-mem-limit", 1, getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
getResourceRequirements(getComputeResourceList("", ""), getComputeResourceList("", "1.5Gi")),
|
|
|
|
|
),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pod: validPod("pod-max-mem-ratio", 3, getResourceRequirements(getResourceList("", "250Mi"), getResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getResourceList("", "2Gi"), api.ResourceList{}, api.ResourceList{}, getResourceList("", "1.5")),
|
|
|
|
|
pod: validPod("pod-max-mem-ratio", 3, getResourceRequirements(getComputeResourceList("", "250Mi"), getComputeResourceList("", "500Mi"))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePod, api.ResourceList{}, getComputeResourceList("", "2Gi"), api.ResourceList{}, api.ResourceList{}, getComputeResourceList("", "1.5")),
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for i := range errorCases {
|
|
|
|
@ -634,3 +642,64 @@ func TestLimitRangerCacheAndLRUExpiredMisses(t *testing.T) {
|
|
|
|
|
t.Errorf("Should have ignored calls to any subresource of pod %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func validPersistentVolumeClaim(name string, resources api.ResourceRequirements) api.PersistentVolumeClaim {
|
|
|
|
|
pvc := api.PersistentVolumeClaim{
|
|
|
|
|
ObjectMeta: api.ObjectMeta{Name: name, Namespace: "test"},
|
|
|
|
|
Spec: api.PersistentVolumeClaimSpec{
|
|
|
|
|
Resources: resources,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
return pvc
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestPersistentVolumeClaimLimitFunc(t *testing.T) {
|
|
|
|
|
type testCase struct {
|
|
|
|
|
pvc api.PersistentVolumeClaim
|
|
|
|
|
limitRange api.LimitRange
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
successCases := []testCase{
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-is-min-storage-request", getResourceRequirements(getStorageResourceList("1Gi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, getStorageResourceList("1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-is-max-storage-request", getResourceRequirements(getStorageResourceList("1Gi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, api.ResourceList{}, getStorageResourceList("1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-no-minmax-storage-request", getResourceRequirements(getStorageResourceList("100Gi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, getStorageResourceList(""), getStorageResourceList(""), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-within-minmax-storage-request", getResourceRequirements(getStorageResourceList("5Gi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, getStorageResourceList("1Gi"), getStorageResourceList("10Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for i := range successCases {
|
|
|
|
|
test := successCases[i]
|
|
|
|
|
err := PersistentVolumeClaimLimitFunc(&test.limitRange, &test.pvc)
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Errorf("Unexpected error for pvc: %s, %v", test.pvc.Name, err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
errorCases := []testCase{
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-below-min-storage-request", getResourceRequirements(getStorageResourceList("500Mi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, getStorageResourceList("1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
pvc: validPersistentVolumeClaim("pvc-exceeds-max-storage-request", getResourceRequirements(getStorageResourceList("100Gi"), getStorageResourceList(""))),
|
|
|
|
|
limitRange: createLimitRange(api.LimitTypePersistentVolumeClaim, getStorageResourceList("1Gi"), getStorageResourceList("1Gi"), api.ResourceList{}, api.ResourceList{}, api.ResourceList{}),
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
for i := range errorCases {
|
|
|
|
|
test := errorCases[i]
|
|
|
|
|
err := PersistentVolumeClaimLimitFunc(&test.limitRange, &test.pvc)
|
|
|
|
|
if err == nil {
|
|
|
|
|
t.Errorf("Expected error for pvc: %s", test.pvc.Name)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|