mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-20 13:06:51 +00:00
* feat: add globalresourcequota api Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
71 lines
2.0 KiB
Go
71 lines
2.0 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package rulestatus
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
|
|
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
|
"github.com/projectcapsule/capsule/pkg/api/rules"
|
|
)
|
|
|
|
func TestReconcileExcludesQuotaFromRuleStatus(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
unnamedQuota := rules.ResourceQuotaRule{
|
|
ResourceQuotaSpec: corev1.ResourceQuotaSpec{Hard: corev1.ResourceList{
|
|
corev1.ResourceRequestsCPU: resource.MustParse("1"),
|
|
}},
|
|
}
|
|
instance := &capsulev1beta2.RuleStatus{
|
|
Spec: []*rules.NamespaceRuleBodyNamespace{
|
|
{Quota: []rules.ResourceQuotaRule{unnamedQuota}},
|
|
{
|
|
Quota: []rules.ResourceQuotaRule{unnamedQuota},
|
|
Enforce: &rules.NamespaceRuleEnforceBody{Action: rules.ActionTypeDeny},
|
|
},
|
|
},
|
|
}
|
|
|
|
if err := (Manager{}).reconcile(context.Background(), instance); err != nil {
|
|
t.Fatalf("reconcile() error = %v", err)
|
|
}
|
|
if len(instance.Status.Rules) != 1 {
|
|
t.Fatalf("status rules = %d, want one enforcement rule", len(instance.Status.Rules))
|
|
}
|
|
if len(instance.Status.Rules[0].Quota) != 0 {
|
|
t.Fatalf("status quota = %#v, want none", instance.Status.Rules[0].Quota)
|
|
}
|
|
if instance.Status.Rules[0].Enforce == nil {
|
|
t.Fatal("status enforcement rule was removed")
|
|
}
|
|
}
|
|
|
|
func TestRemoveQuotaDefinitionsCleansLegacyStatus(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
status := &capsulev1beta2.RuleStatusStatus{
|
|
Rule: rules.NamespaceRuleBodyNamespace{Quota: []rules.ResourceQuotaRule{{}}},
|
|
Rules: []*rules.NamespaceRuleBodyNamespace{
|
|
nil,
|
|
{Quota: []rules.ResourceQuotaRule{{}}},
|
|
},
|
|
}
|
|
|
|
if changed := removeQuotaDefinitions(status); !changed {
|
|
t.Fatal("legacy quota definitions were not reported as changed")
|
|
}
|
|
|
|
if len(status.Rule.Quota) != 0 || len(status.Rules[1].Quota) != 0 {
|
|
t.Fatalf("legacy quota definitions were not removed: %#v", status)
|
|
}
|
|
if changed := removeQuotaDefinitions(status); changed {
|
|
t.Fatal("clean status was reported as changed")
|
|
}
|
|
}
|