Files
Oliver BählerandGitHub 9ee5468f47 feat: add rolebindings to rules api (#2032)
* feat: add rolebindings to rules api

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add rolebindings to rules api

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add rolebindings to rules api

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add rolebindings to rules api

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: add rolebindings to rules api

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

* feat: implement review

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>

---------

Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
2026-07-15 10:35:36 +02:00

70 lines
1.9 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package tenant
import (
"context"
"maps"
"testing"
"github.com/go-logr/logr"
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/pkg/api/rbac"
)
func TestSyncAdditionalRoleBindingDoesNotMutateSpecMetadata(t *testing.T) {
t.Parallel()
scheme := runtime.NewScheme()
if err := corev1.AddToScheme(scheme); err != nil {
t.Fatal(err)
}
if err := rbacv1.AddToScheme(scheme); err != nil {
t.Fatal(err)
}
if err := capsulev1beta2.AddToScheme(scheme); err != nil {
t.Fatal(err)
}
labels := map[string]string{"example.com/label": "value"}
annotations := map[string]string{"example.com/annotation": "value"}
originalLabels := maps.Clone(labels)
originalAnnotations := maps.Clone(annotations)
binding := rbac.AdditionalRoleBindingsSpec{
ClusterRoleName: "custom:pod-viewer",
Subjects: []rbacv1.Subject{{Kind: rbacv1.UserKind, Name: "alice"}},
Labels: labels,
Annotations: annotations,
}
manager := &Manager{Client: fake.NewClientBuilder().WithScheme(scheme).Build()}
tenant := &capsulev1beta2.Tenant{ObjectMeta: metav1.ObjectMeta{Name: "green"}}
if err := manager.syncAdditionalRoleBinding(
context.Background(),
logr.Discard(),
tenant,
"green-app",
map[string]rbac.AdditionalRoleBindingsSpec{"hash": binding},
); err != nil {
t.Fatal(err)
}
if !maps.Equal(labels, originalLabels) {
t.Fatalf("binding labels were mutated: got %v, want %v", labels, originalLabels)
}
if !maps.Equal(annotations, originalAnnotations) {
t.Fatalf("binding annotations were mutated: got %v, want %v", annotations, originalAnnotations)
}
}