Files
cozystack/cmd/cozystack-controller/main_test.go
T
Aleksei Sviridkin 8a4184bb0e feat(cozystack-controller): serve the GPU webhooks with GPU enabled
A replica must not receive fail-closed admission traffic until its
webhook server serves. Otherwise startup and rollout can block GPU VM
creation.

GPU resource names requested only by pods cannot always be inferred from
a class or the KubeVirt permitted-device table. The hoster needs a way
to identify them for admission.

Assisted-by: LLM
Signed-off-by: Aleksei Sviridkin <f@lex.la>
2026-11-03 14:45:59 +03:00

54 lines
1.9 KiB
Go

/*
Copyright 2026 The Cozystack Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"slices"
"testing"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
internalv1alpha1 "github.com/cozystack/cozystack/api/internalapi/v1alpha1"
)
// TestSchemeRegistersReconciledKinds pins that the manager scheme init() builds
// resolves the kinds the CA-extraction controller reconciles For(). A kind
// missing here is not a build error — it fails at runtime: SetupWithManager
// cannot resolve the GVK for its field index or its For() source, returns an
// error, and main() calls os.Exit(1), taking the whole binary (and every other
// controller) down with it. The scheme is the package-level var init() populates.
func TestSchemeRegistersReconciledKinds(t *testing.T) {
for name, obj := range map[string]runtime.Object{
"TenantProjection": &internalv1alpha1.TenantProjection{},
"TenantProjectionList": &internalv1alpha1.TenantProjectionList{},
} {
if _, err := apiutil.GVKForObject(obj, scheme); err != nil {
t.Errorf("manager scheme does not register %s, so the CA-extraction controller cannot start: %v", name, err)
}
}
}
func TestSplitNames(t *testing.T) {
if got := splitNames(" nvidia.com/gpu, ,amd.com/gpu,"); !slices.Equal(got, []string{"nvidia.com/gpu", "amd.com/gpu"}) {
t.Errorf("splitNames = %v", got)
}
if got := splitNames(""); got != nil {
t.Errorf("splitNames of an empty flag = %v", got)
}
}