* Copyright (c) 2024 China Unicom Digital Technology Co., Ltd.
* openFuyao is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* Author: YuXiang Guo
* Date: 2025-09-05
*/
package apps
import (
"reflect"
"testing"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
colocationv1 "openfuyao.com/colocation-management/pkg/apis/v1"
)
func TestSchemeRegistered(t *testing.T) {
allKnownTypes := GetScheme().AllKnownTypes()
expectedGVKs := []schema.GroupVersionKind{
{
Group: "",
Version: "v1",
Kind: "Pod",
},
{
Group: colocationv1.GroupVersion.Group,
Version: colocationv1.GroupVersion.Version,
Kind: "ContainerCheckpoint",
},
{
Group: v1.SchemeGroupVersion.Group,
Version: v1.SchemeGroupVersion.Version,
Kind: "UpdateOptions",
},
{
Group: v1.SchemeGroupVersion.Group,
Version: v1.SchemeGroupVersion.Version,
Kind: "DeleteOptions",
},
{
Group: v1.SchemeGroupVersion.Group,
Version: v1.SchemeGroupVersion.Version,
Kind: "CreateOptions",
},
}
for _, expectedGVK := range expectedGVKs {
if _, exists := allKnownTypes[expectedGVK]; !exists {
t.Errorf("Expected GVK %s to be registered in the scheme, but it was not found", expectedGVK.String())
}
}
testObject, err := GetScheme().New(schema.GroupVersionKind{
Group: colocationv1.GroupVersion.Group,
Version: colocationv1.GroupVersion.Version,
Kind: "ContainerCheckpoint",
})
if err != nil {
t.Errorf("Failed to create new object of custom kind: %v", err)
} else {
expectedType := reflect.TypeOf(&colocationv1.ContainerCheckpoint{}).Elem()
actualType := reflect.TypeOf(testObject).Elem()
if actualType != expectedType {
t.Errorf("Expected type %v, but got %v", expectedType, actualType)
}
}
}
func TestInitFunction(t *testing.T) {
if GetScheme() == nil {
t.Fatal("Scheme should not be nil after init()")
}
ContainerCheckpoint := schema.GroupVersionKind{
Group: colocationv1.GroupVersion.Group,
Version: colocationv1.GroupVersion.Version,
Kind: "ContainerCheckpoint",
}
_, err := GetScheme().New(ContainerCheckpoint)
if err != nil {
t.Errorf("Scheme should know about YourCRDKind type, failed to create new instance: %v", err)
}
updateOptionsGVK := schema.GroupVersionKind{Group: "", Version: "v1", Kind: "UpdateOptions"}
_, err = GetScheme().New(updateOptionsGVK)
if err != nil {
t.Errorf("Scheme should know about UpdateOptions type, failed to create new instance: %v", err)
}
}