mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-23 22:46:59 +00:00
* 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>
70 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|