mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-20 13:06:51 +00:00
* chore * perfromance improvements Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * perfromance improvements Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat(performance): removed duplicate client calls from all admission paths Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package utils
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
"sigs.k8s.io/controller-runtime/pkg/client/fake"
|
|
|
|
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
|
)
|
|
|
|
type countingReader struct {
|
|
client.Reader
|
|
|
|
gets int
|
|
}
|
|
|
|
func (r *countingReader) Get(
|
|
ctx context.Context,
|
|
key client.ObjectKey,
|
|
obj client.Object,
|
|
opts ...client.GetOption,
|
|
) error {
|
|
r.gets++
|
|
|
|
return r.Reader.Get(ctx, key, obj, opts...)
|
|
}
|
|
|
|
func TestTenantCachingReaderDeduplicatesTenantGets(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
scheme := runtime.NewScheme()
|
|
if err := capsulev1beta2.AddToScheme(scheme); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
base := fake.NewClientBuilder().
|
|
WithScheme(scheme).
|
|
WithObjects(&capsulev1beta2.Tenant{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "solar"},
|
|
}).
|
|
Build()
|
|
counting := &countingReader{Reader: base}
|
|
reader := NewTenantCachingReader(counting)
|
|
|
|
first := &capsulev1beta2.Tenant{}
|
|
if err := reader.Get(context.Background(), client.ObjectKey{Name: "solar"}, first); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
first.Labels = map[string]string{"mutated": "true"}
|
|
|
|
second := &capsulev1beta2.Tenant{}
|
|
if err := reader.Get(context.Background(), client.ObjectKey{Name: "solar"}, second); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if counting.gets != 1 {
|
|
t.Fatalf("underlying Tenant gets = %d, want 1", counting.gets)
|
|
}
|
|
|
|
if second.Labels["mutated"] != "" {
|
|
t.Fatal("cached Tenant result was not deep-copied")
|
|
}
|
|
}
|