mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-22 14:07:10 +00:00
* chore: save progress Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: requests and limit policies Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
114 lines
2.6 KiB
Go
114 lines
2.6 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package workloads
|
|
|
|
import (
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
)
|
|
|
|
func TestPodLevelResourceSupported(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name corev1.ResourceName
|
|
supported bool
|
|
}{
|
|
{name: corev1.ResourceCPU, supported: true},
|
|
{name: corev1.ResourceMemory, supported: true},
|
|
{name: corev1.ResourceName("hugepages-2Mi"), supported: true},
|
|
{name: corev1.ResourceEphemeralStorage, supported: false},
|
|
{name: corev1.ResourceName("example.com/gpu"), supported: false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(string(tt.name), func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if got := PodLevelResourceSupported(tt.name); got != tt.supported {
|
|
t.Fatalf("PodLevelResourceSupported(%q) = %t, want %t", tt.name, got, tt.supported)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLimitForRatio(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
resource corev1.ResourceName
|
|
request string
|
|
ratio string
|
|
want string
|
|
}{
|
|
{
|
|
name: "memory",
|
|
resource: corev1.ResourceMemory,
|
|
request: "1Gi",
|
|
ratio: "1.5",
|
|
want: "1536Mi",
|
|
},
|
|
{
|
|
name: "cpu",
|
|
resource: corev1.ResourceCPU,
|
|
request: "100m",
|
|
ratio: "1.5",
|
|
want: "150m",
|
|
},
|
|
{
|
|
name: "cpu rounds down to milliCPU",
|
|
resource: corev1.ResourceCPU,
|
|
request: "1m",
|
|
ratio: "1.5",
|
|
want: "1m",
|
|
},
|
|
{
|
|
name: "storage rounds down to bytes",
|
|
resource: corev1.ResourceEphemeralStorage,
|
|
request: "3",
|
|
ratio: "1.5",
|
|
want: "4",
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
got, err := LimitForRatio(
|
|
tt.resource,
|
|
resource.MustParse(tt.request),
|
|
resource.MustParse(tt.ratio),
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("LimitForRatio() error = %v", err)
|
|
}
|
|
|
|
want := resource.MustParse(tt.want)
|
|
if got.Cmp(want) != 0 {
|
|
t.Fatalf("LimitForRatio() = %s, want %s", got.String(), want.String())
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLimitForRatioRejectsInvalidInputs(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
if _, err := LimitForRatio(corev1.ResourceName("example.com/gpu"), resource.MustParse("1"), resource.MustParse("1.5")); err == nil {
|
|
t.Fatal("LimitForRatio() accepted an extended resource")
|
|
}
|
|
|
|
if _, err := LimitForRatio(corev1.ResourceCPU, resource.MustParse("0"), resource.MustParse("1.5")); err == nil {
|
|
t.Fatal("LimitForRatio() accepted a zero request")
|
|
}
|
|
|
|
if _, err := LimitForRatio(corev1.ResourceCPU, resource.MustParse("1"), resource.MustParse("0.5")); err == nil {
|
|
t.Fatal("LimitForRatio() accepted a ratio below one")
|
|
}
|
|
}
|