mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-07-18 04:54:54 +00:00
Merge pull request #134271 from Jefftree/scheme-nil
Add nil scheme check in GetReference
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user