Commit 0e5478ef authored by k8s-merge-robot's avatar k8s-merge-robot

Merge pull request #15269 from brendandburns/apis

Auto commit by PR queue bot
parents 04f055c4 deb3514c
...@@ -71,15 +71,18 @@ func ExtractList(obj Object) ([]Object, error) { ...@@ -71,15 +71,18 @@ func ExtractList(obj Object) ([]Object, error) {
list := make([]Object, items.Len()) list := make([]Object, items.Len())
for i := range list { for i := range list {
raw := items.Index(i) raw := items.Index(i)
var found bool switch item := raw.Interface().(type) {
switch raw.Kind() { case Object:
case reflect.Interface, reflect.Ptr: list[i] = item
list[i], found = raw.Interface().(Object) case RawExtension:
list[i] = &Unknown{
RawJSON: item.RawJSON,
}
default: default:
list[i], found = raw.Addr().Interface().(Object) var found bool
} if list[i], found = raw.Addr().Interface().(Object); !found {
if !found { return nil, fmt.Errorf("%v: item[%v]: Expected object, got %#v(%s)", obj, i, raw.Interface(), raw.Kind())
return nil, fmt.Errorf("item[%v]: Expected object, got %#v(%s)", i, raw.Interface(), raw.Kind()) }
} }
} }
return list, nil return list, nil
......
...@@ -22,6 +22,7 @@ import ( ...@@ -22,6 +22,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util"
...@@ -87,6 +88,28 @@ func TestExtractListGeneric(t *testing.T) { ...@@ -87,6 +88,28 @@ func TestExtractListGeneric(t *testing.T) {
} }
} }
func TestExtractListGenericV1(t *testing.T) {
pl := &v1.List{
Items: []runtime.RawExtension{
{RawJSON: []byte("foo")},
{RawJSON: []byte("bar")},
},
}
list, err := runtime.ExtractList(pl)
if err != nil {
t.Fatalf("Unexpected error %v", err)
}
if e, a := len(list), len(pl.Items); e != a {
t.Fatalf("Expected %v, got %v", e, a)
}
if obj, ok := list[0].(*runtime.Unknown); !ok {
t.Fatalf("Expected list[0] to be *runtime.Unknown, it is %#v", obj)
}
if obj, ok := list[1].(*runtime.Unknown); !ok {
t.Fatalf("Expected list[1] to be *runtime.Unknown, it is %#v", obj)
}
}
type fakePtrInterfaceList struct { type fakePtrInterfaceList struct {
Items *[]runtime.Object Items *[]runtime.Object
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment