mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-20 13:06:51 +00:00
* feat: implement performance optimizations --------- Signed-off-by: Oliver Baehler <oliver@sudo-i.net>
68 lines
2.1 KiB
Go
68 lines
2.1 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package tenant
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"testing"
|
|
|
|
storagev1 "k8s.io/api/storage/v1"
|
|
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"
|
|
"sigs.k8s.io/controller-runtime/pkg/event"
|
|
|
|
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
|
)
|
|
|
|
func TestTenantClassEventHandlerUpdatesClassStatusDirectly(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
scheme := runtime.NewScheme()
|
|
if err := storagev1.AddToScheme(scheme); err != nil {
|
|
t.Fatalf("add storage scheme: %v", err)
|
|
}
|
|
if err := capsulev1beta2.AddToScheme(scheme); err != nil {
|
|
t.Fatalf("add Capsule scheme: %v", err)
|
|
}
|
|
|
|
tenant := &capsulev1beta2.Tenant{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "tenant"},
|
|
Status: capsulev1beta2.TenantStatus{
|
|
TenantAvailableStatus: capsulev1beta2.TenantAvailableStatus{
|
|
Classes: capsulev1beta2.TenantAvailableClassesStatus{
|
|
PriorityClasses: []string{"high"},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
storageClass := &storagev1.StorageClass{ObjectMeta: metav1.ObjectMeta{Name: "fast"}}
|
|
cl := fake.NewClientBuilder().
|
|
WithScheme(scheme).
|
|
WithStatusSubresource(&capsulev1beta2.Tenant{}).
|
|
WithObjects(tenant, storageClass).
|
|
Build()
|
|
manager := &Manager{Client: cl, reader: cl}
|
|
h := manager.tenantClassEventHandler(manager.collectAvailableStorageClasses)
|
|
|
|
h.CreateFunc(
|
|
context.Background(),
|
|
event.TypedCreateEvent[client.Object]{Object: storageClass},
|
|
nil,
|
|
)
|
|
|
|
updated := &capsulev1beta2.Tenant{}
|
|
if err := cl.Get(context.Background(), client.ObjectKeyFromObject(tenant), updated); err != nil {
|
|
t.Fatalf("get updated Tenant: %v", err)
|
|
}
|
|
if !reflect.DeepEqual(updated.Status.Classes.StorageClasses, []string{"fast"}) {
|
|
t.Fatalf("storage classes = %#v, want [fast]", updated.Status.Classes.StorageClasses)
|
|
}
|
|
if !reflect.DeepEqual(updated.Status.Classes.PriorityClasses, []string{"high"}) {
|
|
t.Fatalf("priority classes = %#v, want preserved [high]", updated.Status.Classes.PriorityClasses)
|
|
}
|
|
}
|