Merge pull request #134271 from Jefftree/scheme-nil

Add nil scheme check in GetReference
This commit is contained in:
Kubernetes Prow Robot
2025-09-25 14:54:15 -07:00
committed by GitHub
2 changed files with 42 additions and 1 deletions

View File

@@ -20,7 +20,7 @@ import (
"errors"
"fmt"
"k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
@@ -63,6 +63,9 @@ func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*v1.ObjectReferen
//
// TODO: This doesn't work for CRDs, which are not registered in scheme.
if gvk.Empty() {
if scheme == nil {
return nil, errors.New("scheme is required to look up gvk")
}
gvks, _, err := scheme.ObjectKinds(obj)
if err != nil {
return nil, err

View File

@@ -72,3 +72,41 @@ func TestGetReferenceRefVersion(t *testing.T) {
})
}
}
func TestGetReferenceNilScheme(t *testing.T) {
input := &TestRuntimeObj{
ObjectMeta: metav1.ObjectMeta{},
}
_, err := GetReference(nil, input)
if err == nil {
t.Fatal("expected an error")
}
if err.Error() != "scheme is required to look up gvk" {
t.Errorf("expected %q, got %q", "scheme is required to look up gvk", err.Error())
}
}
func TestGetReferenceNilSchemeWithPopulatedGVK(t *testing.T) {
input := &TestRuntimeObj{
TypeMeta: metav1.TypeMeta{
APIVersion: "foo.group/v3",
Kind: "Bar",
},
ObjectMeta: metav1.ObjectMeta{
Name: "a-name",
},
}
ref, err := GetReference(nil, input)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if ref.APIVersion != "foo.group/v3" {
t.Errorf("expected %q, got %q", "foo.group/v3", ref.APIVersion)
}
if ref.Kind != "Bar" {
t.Errorf("expected %q, got %q", "Bar", ref.Kind)
}
if ref.Name != "a-name" {
t.Errorf("expected %q, got %q", "a-name", ref.Name)
}
}