mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	remove registry from testing/fixture.go; update client-gen to not use
registry in the generated clients
This commit is contained in:
		@@ -123,12 +123,11 @@ func PackageForClientset(customArgs clientgenargs.Args, fakeClientsetPackage str
 | 
			
		||||
					DefaultGen: generator.DefaultGen{
 | 
			
		||||
						OptionalName: "register",
 | 
			
		||||
					},
 | 
			
		||||
					InputPackages:  customArgs.GroupVersionToInputPath,
 | 
			
		||||
					OutputPackage:  fakeClientsetPackage,
 | 
			
		||||
					Groups:         customArgs.Groups,
 | 
			
		||||
					ImportTracker:  generator.NewImportTracker(),
 | 
			
		||||
					PrivateScheme:  true,
 | 
			
		||||
					CreateRegistry: true, // needed to know about root resources and for RESTMapper
 | 
			
		||||
					InputPackages: customArgs.GroupVersionToInputPath,
 | 
			
		||||
					OutputPackage: fakeClientsetPackage,
 | 
			
		||||
					Groups:        customArgs.Groups,
 | 
			
		||||
					ImportTracker: generator.NewImportTracker(),
 | 
			
		||||
					PrivateScheme: true,
 | 
			
		||||
				},
 | 
			
		||||
			}
 | 
			
		||||
			return generators
 | 
			
		||||
 
 | 
			
		||||
@@ -108,7 +108,7 @@ var common = `
 | 
			
		||||
// without applying any validations and/or defaults. It shouldn't be considered a replacement
 | 
			
		||||
// for a real clientset and is mostly useful in simple unit tests.
 | 
			
		||||
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
 | 
			
		||||
	o := testing.NewObjectTracker(registry, scheme, codecs.UniversalDecoder())
 | 
			
		||||
	o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder())
 | 
			
		||||
	for _, obj := range objects {
 | 
			
		||||
		if err := o.Add(obj); err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
@@ -116,7 +116,7 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fakePtr := testing.Fake{}
 | 
			
		||||
	fakePtr.AddReactor("*", "*", testing.ObjectReaction(o, registry.RESTMapper()))
 | 
			
		||||
	fakePtr.AddReactor("*", "*", testing.ObjectReaction(o))
 | 
			
		||||
 | 
			
		||||
	fakePtr.AddWatchReactor("*", testing.DefaultWatchReactor(watch.NewFake(), nil))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -120,6 +120,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
 | 
			
		||||
		"GetOptions":           c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/apis/meta/v1", Name: "GetOptions"}),
 | 
			
		||||
		"Everything":           c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/labels", Name: "Everything"}),
 | 
			
		||||
		"GroupVersionResource": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionResource"}),
 | 
			
		||||
		"GroupVersionKind":     c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionKind"}),
 | 
			
		||||
		"PatchType":            c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}),
 | 
			
		||||
		"watchInterface":       c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}),
 | 
			
		||||
 | 
			
		||||
@@ -156,6 +157,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
 | 
			
		||||
 | 
			
		||||
	if !noMethods {
 | 
			
		||||
		sw.Do(resource, m)
 | 
			
		||||
		sw.Do(kind, m)
 | 
			
		||||
		sw.Do(createTemplate, m)
 | 
			
		||||
		sw.Do(updateTemplate, m)
 | 
			
		||||
		// Generate the UpdateStatus method if the type has a status
 | 
			
		||||
@@ -198,11 +200,15 @@ var resource = `
 | 
			
		||||
var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"}
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
var kind = `
 | 
			
		||||
var $.type|allLowercasePlural$Kind = $.GroupVersionKind|raw${Group: "$.groupName$", Version: "$.version$", Kind: "$.type|public$"}
 | 
			
		||||
`
 | 
			
		||||
 | 
			
		||||
var listTemplate = `
 | 
			
		||||
func (c *Fake$.type|publicPlural$) List(opts $.ListOptions|raw$) (result *$.type|raw$List, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		$if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, c.ns, opts), &$.type|raw$List{})
 | 
			
		||||
		$else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, opts), &$.type|raw$List{})$end$
 | 
			
		||||
		$if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, c.ns, opts), &$.type|raw$List{})
 | 
			
		||||
		$else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, opts), &$.type|raw$List{})$end$
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -213,8 +219,8 @@ func (c *Fake$.type|publicPlural$) List(opts $.ListOptions|raw$) (result *$.type
 | 
			
		||||
var listUsingOptionsTemplate = `
 | 
			
		||||
func (c *Fake$.type|publicPlural$) List(opts $.ListOptions|raw$) (result *$.type|raw$List, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		$if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, c.ns, opts), &$.type|raw$List{})
 | 
			
		||||
		$else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, opts), &$.type|raw$List{})$end$
 | 
			
		||||
		$if .namespaced$Invokes($.NewListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, c.ns, opts), &$.type|raw$List{})
 | 
			
		||||
		$else$Invokes($.NewRootListAction|raw$($.type|allLowercasePlural$Resource, $.type|allLowercasePlural$Kind, opts), &$.type|raw$List{})$end$
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -67,9 +67,9 @@ func (c *FakeEvents) PatchWithEventNamespace(event *v1.Event, data []byte) (*v1.
 | 
			
		||||
 | 
			
		||||
// Search returns a list of events matching the specified object.
 | 
			
		||||
func (c *FakeEvents) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) {
 | 
			
		||||
	action := core.NewRootListAction(eventsResource, metav1.ListOptions{})
 | 
			
		||||
	action := core.NewRootListAction(eventsResource, eventsKind, metav1.ListOptions{})
 | 
			
		||||
	if c.ns != "" {
 | 
			
		||||
		action = core.NewListAction(eventsResource, c.ns, metav1.ListOptions{})
 | 
			
		||||
		action = core.NewListAction(eventsResource, eventsKind, c.ns, metav1.ListOptions{})
 | 
			
		||||
	}
 | 
			
		||||
	obj, err := c.Fake.Invokes(action, &v1.EventList{})
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -67,9 +67,9 @@ func (c *FakeEvents) PatchWithEventNamespace(event *api.Event, data []byte) (*ap
 | 
			
		||||
 | 
			
		||||
// Search returns a list of events matching the specified object.
 | 
			
		||||
func (c *FakeEvents) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*api.EventList, error) {
 | 
			
		||||
	action := core.NewRootListAction(eventsResource, metav1.ListOptions{})
 | 
			
		||||
	action := core.NewRootListAction(eventsResource, eventsKind, metav1.ListOptions{})
 | 
			
		||||
	if c.ns != "" {
 | 
			
		||||
		action = core.NewListAction(eventsResource, c.ns, metav1.ListOptions{})
 | 
			
		||||
		action = core.NewListAction(eventsResource, eventsKind, c.ns, metav1.ListOptions{})
 | 
			
		||||
	}
 | 
			
		||||
	obj, err := c.Fake.Invokes(action, &api.EventList{})
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,6 +19,7 @@ package util
 | 
			
		||||
import (
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
@@ -31,7 +32,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type fakeClientAccessFactory struct {
 | 
			
		||||
@@ -52,6 +52,7 @@ func newFakeClientAccessFactory(objs []runtime.Object) *fakeClientAccessFactory
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	podsResource = schema.GroupVersionResource{Resource: "pods"}
 | 
			
		||||
	podsKind     = schema.GroupVersionKind{Kind: "Pod"}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestLogsForObject(t *testing.T) {
 | 
			
		||||
@@ -82,7 +83,7 @@ func TestLogsForObject(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			pods: []runtime.Object{testPod()},
 | 
			
		||||
			actions: []testclient.Action{
 | 
			
		||||
				testclient.NewListAction(podsResource, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				testclient.NewListAction(podsResource, podsKind, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				getLogsAction("test", nil),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
@@ -96,7 +97,7 @@ func TestLogsForObject(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			pods: []runtime.Object{testPod()},
 | 
			
		||||
			actions: []testclient.Action{
 | 
			
		||||
				testclient.NewListAction(podsResource, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				testclient.NewListAction(podsResource, podsKind, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				getLogsAction("test", nil),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
@@ -110,7 +111,7 @@ func TestLogsForObject(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			pods: []runtime.Object{testPod()},
 | 
			
		||||
			actions: []testclient.Action{
 | 
			
		||||
				testclient.NewListAction(podsResource, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				testclient.NewListAction(podsResource, podsKind, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				getLogsAction("test", nil),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
@@ -124,7 +125,7 @@ func TestLogsForObject(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			pods: []runtime.Object{testPod()},
 | 
			
		||||
			actions: []testclient.Action{
 | 
			
		||||
				testclient.NewListAction(podsResource, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				testclient.NewListAction(podsResource, podsKind, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				getLogsAction("test", nil),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
@@ -138,7 +139,7 @@ func TestLogsForObject(t *testing.T) {
 | 
			
		||||
			},
 | 
			
		||||
			pods: []runtime.Object{testPod()},
 | 
			
		||||
			actions: []testclient.Action{
 | 
			
		||||
				testclient.NewListAction(podsResource, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				testclient.NewListAction(podsResource, podsKind, "test", metav1.ListOptions{LabelSelector: "foo=bar"}),
 | 
			
		||||
				getLogsAction("test", nil),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
@@ -47,20 +47,22 @@ func NewGetAction(resource schema.GroupVersionResource, namespace, name string)
 | 
			
		||||
	return action
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewRootListAction(resource schema.GroupVersionResource, opts interface{}) ListActionImpl {
 | 
			
		||||
func NewRootListAction(resource schema.GroupVersionResource, kind schema.GroupVersionKind, opts interface{}) ListActionImpl {
 | 
			
		||||
	action := ListActionImpl{}
 | 
			
		||||
	action.Verb = "list"
 | 
			
		||||
	action.Resource = resource
 | 
			
		||||
	action.Kind = kind
 | 
			
		||||
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
			
		||||
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
			
		||||
 | 
			
		||||
	return action
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewListAction(resource schema.GroupVersionResource, namespace string, opts interface{}) ListActionImpl {
 | 
			
		||||
func NewListAction(resource schema.GroupVersionResource, kind schema.GroupVersionKind, namespace string, opts interface{}) ListActionImpl {
 | 
			
		||||
	action := ListActionImpl{}
 | 
			
		||||
	action.Verb = "list"
 | 
			
		||||
	action.Resource = resource
 | 
			
		||||
	action.Kind = kind
 | 
			
		||||
	action.Namespace = namespace
 | 
			
		||||
	labelSelector, fieldSelector, _ := ExtractFromListOptions(opts)
 | 
			
		||||
	action.ListRestrictions = ListRestrictions{labelSelector, fieldSelector}
 | 
			
		||||
@@ -375,9 +377,14 @@ func (a GetActionImpl) GetName() string {
 | 
			
		||||
 | 
			
		||||
type ListActionImpl struct {
 | 
			
		||||
	ActionImpl
 | 
			
		||||
	Kind             schema.GroupVersionKind
 | 
			
		||||
	ListRestrictions ListRestrictions
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a ListActionImpl) GetKind() schema.GroupVersionKind {
 | 
			
		||||
	return a.Kind
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a ListActionImpl) GetListRestrictions() ListRestrictions {
 | 
			
		||||
	return a.ListRestrictions
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ import (
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/errors"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apimachinery/registered"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
@@ -39,22 +38,22 @@ type ObjectTracker interface {
 | 
			
		||||
	Add(obj runtime.Object) error
 | 
			
		||||
 | 
			
		||||
	// Get retrieves the object by its kind, namespace and name.
 | 
			
		||||
	Get(gvk schema.GroupVersionKind, ns, name string) (runtime.Object, error)
 | 
			
		||||
	Get(gvr schema.GroupVersionResource, ns, name string) (runtime.Object, error)
 | 
			
		||||
 | 
			
		||||
	// Create adds an object to the tracker in the specified namespace.
 | 
			
		||||
	Create(obj runtime.Object, ns string) error
 | 
			
		||||
	Create(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error
 | 
			
		||||
 | 
			
		||||
	// Update updates an existing object in the tracker in the specified namespace.
 | 
			
		||||
	Update(obj runtime.Object, ns string) error
 | 
			
		||||
	Update(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error
 | 
			
		||||
 | 
			
		||||
	// List retrieves all objects of a given kind in the given
 | 
			
		||||
	// namespace. Only non-List kinds are accepted.
 | 
			
		||||
	List(gvk schema.GroupVersionKind, ns string) (runtime.Object, error)
 | 
			
		||||
	List(gvr schema.GroupVersionResource, gvk schema.GroupVersionKind, ns string) (runtime.Object, error)
 | 
			
		||||
 | 
			
		||||
	// Delete deletes an existing object from the tracker. If object
 | 
			
		||||
	// didn't exist in the tracker prior to deletion, Delete returns
 | 
			
		||||
	// no error.
 | 
			
		||||
	Delete(gvk schema.GroupVersionKind, ns, name string) error
 | 
			
		||||
	Delete(gvr schema.GroupVersionResource, ns, name string) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObjectScheme abstracts the implementation of common operations on objects.
 | 
			
		||||
@@ -66,25 +65,11 @@ type ObjectScheme interface {
 | 
			
		||||
 | 
			
		||||
// ObjectReaction returns a ReactionFunc that applies core.Action to
 | 
			
		||||
// the given tracker.
 | 
			
		||||
func ObjectReaction(tracker ObjectTracker, mapper meta.RESTMapper) ReactionFunc {
 | 
			
		||||
func ObjectReaction(tracker ObjectTracker) ReactionFunc {
 | 
			
		||||
	return func(action Action) (bool, runtime.Object, error) {
 | 
			
		||||
		ns := action.GetNamespace()
 | 
			
		||||
		gvr := action.GetResource()
 | 
			
		||||
 | 
			
		||||
		gvk, err := mapper.KindFor(gvr)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return false, nil, fmt.Errorf("error getting kind for resource %q: %s", gvr, err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// This is a temporary fix. Because there is no internal resource, so
 | 
			
		||||
		// the caller has no way to express that it expects to get an internal
 | 
			
		||||
		// kind back. A more proper fix will be directly specify the Kind when
 | 
			
		||||
		// build the action.
 | 
			
		||||
		gvk.Version = gvr.Version
 | 
			
		||||
		if len(gvk.Version) == 0 {
 | 
			
		||||
			gvk.Version = runtime.APIVersionInternal
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Here and below we need to switch on implementation types,
 | 
			
		||||
		// not on interfaces, as some interfaces are identical
 | 
			
		||||
		// (e.g. UpdateAction and CreateAction), so if we use them,
 | 
			
		||||
@@ -92,11 +77,11 @@ func ObjectReaction(tracker ObjectTracker, mapper meta.RESTMapper) ReactionFunc
 | 
			
		||||
		switch action := action.(type) {
 | 
			
		||||
 | 
			
		||||
		case ListActionImpl:
 | 
			
		||||
			obj, err := tracker.List(gvk, ns)
 | 
			
		||||
			obj, err := tracker.List(gvr, action.GetKind(), ns)
 | 
			
		||||
			return true, obj, err
 | 
			
		||||
 | 
			
		||||
		case GetActionImpl:
 | 
			
		||||
			obj, err := tracker.Get(gvk, ns, action.GetName())
 | 
			
		||||
			obj, err := tracker.Get(gvr, ns, action.GetName())
 | 
			
		||||
			return true, obj, err
 | 
			
		||||
 | 
			
		||||
		case CreateActionImpl:
 | 
			
		||||
@@ -105,17 +90,17 @@ func ObjectReaction(tracker ObjectTracker, mapper meta.RESTMapper) ReactionFunc
 | 
			
		||||
				return true, nil, err
 | 
			
		||||
			}
 | 
			
		||||
			if action.GetSubresource() == "" {
 | 
			
		||||
				err = tracker.Create(action.GetObject(), ns)
 | 
			
		||||
				err = tracker.Create(gvr, action.GetObject(), ns)
 | 
			
		||||
			} else {
 | 
			
		||||
				// TODO: Currently we're handling subresource creation as an update
 | 
			
		||||
				// on the enclosing resource. This works for some subresources but
 | 
			
		||||
				// might not be generic enough.
 | 
			
		||||
				err = tracker.Update(action.GetObject(), ns)
 | 
			
		||||
				err = tracker.Update(gvr, action.GetObject(), ns)
 | 
			
		||||
			}
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return true, nil, err
 | 
			
		||||
			}
 | 
			
		||||
			obj, err := tracker.Get(gvk, ns, objMeta.GetName())
 | 
			
		||||
			obj, err := tracker.Get(gvr, ns, objMeta.GetName())
 | 
			
		||||
			return true, obj, err
 | 
			
		||||
 | 
			
		||||
		case UpdateActionImpl:
 | 
			
		||||
@@ -123,15 +108,15 @@ func ObjectReaction(tracker ObjectTracker, mapper meta.RESTMapper) ReactionFunc
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return true, nil, err
 | 
			
		||||
			}
 | 
			
		||||
			err = tracker.Update(action.GetObject(), ns)
 | 
			
		||||
			err = tracker.Update(gvr, action.GetObject(), ns)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return true, nil, err
 | 
			
		||||
			}
 | 
			
		||||
			obj, err := tracker.Get(gvk, ns, objMeta.GetName())
 | 
			
		||||
			obj, err := tracker.Get(gvr, ns, objMeta.GetName())
 | 
			
		||||
			return true, obj, err
 | 
			
		||||
 | 
			
		||||
		case DeleteActionImpl:
 | 
			
		||||
			err := tracker.Delete(gvk, ns, action.GetName())
 | 
			
		||||
			err := tracker.Delete(gvr, ns, action.GetName())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return true, nil, err
 | 
			
		||||
			}
 | 
			
		||||
@@ -144,32 +129,35 @@ func ObjectReaction(tracker ObjectTracker, mapper meta.RESTMapper) ReactionFunc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type tracker struct {
 | 
			
		||||
	registry *registered.APIRegistrationManager
 | 
			
		||||
	scheme   ObjectScheme
 | 
			
		||||
	decoder  runtime.Decoder
 | 
			
		||||
	lock     sync.RWMutex
 | 
			
		||||
	objects  map[schema.GroupVersionKind][]runtime.Object
 | 
			
		||||
	scheme  ObjectScheme
 | 
			
		||||
	decoder runtime.Decoder
 | 
			
		||||
	lock    sync.RWMutex
 | 
			
		||||
	objects map[schema.GroupVersionResource][]runtime.Object
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ ObjectTracker = &tracker{}
 | 
			
		||||
 | 
			
		||||
// NewObjectTracker returns an ObjectTracker that can be used to keep track
 | 
			
		||||
// of objects for the fake clientset. Mostly useful for unit tests.
 | 
			
		||||
func NewObjectTracker(registry *registered.APIRegistrationManager, scheme ObjectScheme, decoder runtime.Decoder) ObjectTracker {
 | 
			
		||||
func NewObjectTracker(scheme ObjectScheme, decoder runtime.Decoder) ObjectTracker {
 | 
			
		||||
	return &tracker{
 | 
			
		||||
		registry: registry,
 | 
			
		||||
		scheme:   scheme,
 | 
			
		||||
		decoder:  decoder,
 | 
			
		||||
		objects:  make(map[schema.GroupVersionKind][]runtime.Object),
 | 
			
		||||
		scheme:  scheme,
 | 
			
		||||
		decoder: decoder,
 | 
			
		||||
		objects: make(map[schema.GroupVersionResource][]runtime.Object),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) List(gvk schema.GroupVersionKind, ns string) (runtime.Object, error) {
 | 
			
		||||
func (t *tracker) List(gvr schema.GroupVersionResource, gvk schema.GroupVersionKind, ns string) (runtime.Object, error) {
 | 
			
		||||
	// Heuristic for list kind: original kind + List suffix. Might
 | 
			
		||||
	// not always be true but this tracker has a pretty limited
 | 
			
		||||
	// understanding of the actual API model.
 | 
			
		||||
	listGVK := gvk
 | 
			
		||||
	listGVK.Kind = listGVK.Kind + "List"
 | 
			
		||||
	// GVK does have the concept of "internal version". The scheme recognizes
 | 
			
		||||
	// the runtime.APIVersionInternal, but not the empty string.
 | 
			
		||||
	if listGVK.Version == "" {
 | 
			
		||||
		listGVK.Version = runtime.APIVersionInternal
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list, err := t.scheme.New(listGVK)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -183,7 +171,7 @@ func (t *tracker) List(gvk schema.GroupVersionKind, ns string) (runtime.Object,
 | 
			
		||||
	t.lock.RLock()
 | 
			
		||||
	defer t.lock.RUnlock()
 | 
			
		||||
 | 
			
		||||
	objs, ok := t.objects[gvk]
 | 
			
		||||
	objs, ok := t.objects[gvr]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return list, nil
 | 
			
		||||
	}
 | 
			
		||||
@@ -201,17 +189,13 @@ func (t *tracker) List(gvk schema.GroupVersionKind, ns string) (runtime.Object,
 | 
			
		||||
	return list, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Get(gvk schema.GroupVersionKind, ns, name string) (runtime.Object, error) {
 | 
			
		||||
	if err := checkNamespace(t.registry, gvk, ns); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	errNotFound := errors.NewNotFound(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, name)
 | 
			
		||||
func (t *tracker) Get(gvr schema.GroupVersionResource, ns, name string) (runtime.Object, error) {
 | 
			
		||||
	errNotFound := errors.NewNotFound(gvr.GroupResource(), name)
 | 
			
		||||
 | 
			
		||||
	t.lock.RLock()
 | 
			
		||||
	defer t.lock.RUnlock()
 | 
			
		||||
 | 
			
		||||
	objs, ok := t.objects[gvk]
 | 
			
		||||
	objs, ok := t.objects[gvr]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return nil, errNotFound
 | 
			
		||||
	}
 | 
			
		||||
@@ -224,7 +208,7 @@ func (t *tracker) Get(gvk schema.GroupVersionKind, ns, name string) (runtime.Obj
 | 
			
		||||
		return nil, errNotFound
 | 
			
		||||
	}
 | 
			
		||||
	if len(matchingObjs) > 1 {
 | 
			
		||||
		return nil, fmt.Errorf("more than one object matched gvk %s, ns: %q name: %q", gvk, ns, name)
 | 
			
		||||
		return nil, fmt.Errorf("more than one object matched gvr %s, ns: %q name: %q", gvr, ns, name)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Only one object should match in the tracker if it works
 | 
			
		||||
@@ -236,9 +220,6 @@ func (t *tracker) Get(gvk schema.GroupVersionKind, ns, name string) (runtime.Obj
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if status, ok := obj.(*metav1.Status); ok {
 | 
			
		||||
		if status.Details != nil {
 | 
			
		||||
			status.Details.Kind = gvk.Kind
 | 
			
		||||
		}
 | 
			
		||||
		if status.Status != metav1.StatusSuccess {
 | 
			
		||||
			return nil, &errors.StatusError{ErrStatus: *status}
 | 
			
		||||
		}
 | 
			
		||||
@@ -251,23 +232,10 @@ func (t *tracker) Add(obj runtime.Object) error {
 | 
			
		||||
	if meta.IsListType(obj) {
 | 
			
		||||
		return t.addList(obj, false)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	objMeta, err := meta.Accessor(obj)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return t.add(obj, objMeta.GetNamespace(), false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Create(obj runtime.Object, ns string) error {
 | 
			
		||||
	return t.add(obj, ns, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Update(obj runtime.Object, ns string) error {
 | 
			
		||||
	return t.add(obj, ns, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) add(obj runtime.Object, ns string, replaceExisting bool) error {
 | 
			
		||||
	gvks, _, err := t.scheme.ObjectKinds(obj)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@@ -275,66 +243,84 @@ func (t *tracker) add(obj runtime.Object, ns string, replaceExisting bool) error
 | 
			
		||||
	if len(gvks) == 0 {
 | 
			
		||||
		return fmt.Errorf("no registered kinds for %v", obj)
 | 
			
		||||
	}
 | 
			
		||||
	for _, gvk := range gvks {
 | 
			
		||||
		// NOTE: UnsafeGuessKindToResource is a heuristic and default match. The
 | 
			
		||||
		// actual registration in apiserver can specify arbitrary route for a
 | 
			
		||||
		// gvk. If a test uses such objects, it cannot preset the tracker with
 | 
			
		||||
		// objects via Add(). Instead, it should trigger the Create() function
 | 
			
		||||
		// of the tracker, where an arbitrary gvr can be specified.
 | 
			
		||||
		gvr, _ := meta.UnsafeGuessKindToResource(gvk)
 | 
			
		||||
		// Resource doesn't have the concept of "__internal" version, just set it to "".
 | 
			
		||||
		if gvr.Version == runtime.APIVersionInternal {
 | 
			
		||||
			gvr.Version = ""
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err := t.add(gvr, obj, objMeta.GetNamespace(), false)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Create(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error {
 | 
			
		||||
	return t.add(gvr, obj, ns, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Update(gvr schema.GroupVersionResource, obj runtime.Object, ns string) error {
 | 
			
		||||
	return t.add(gvr, obj, ns, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) add(gvr schema.GroupVersionResource, obj runtime.Object, ns string, replaceExisting bool) error {
 | 
			
		||||
	t.lock.Lock()
 | 
			
		||||
	defer t.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	for _, gvk := range gvks {
 | 
			
		||||
		gr := schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}
 | 
			
		||||
	gr := gvr.GroupResource()
 | 
			
		||||
 | 
			
		||||
		// To avoid the object from being accidentally modified by caller
 | 
			
		||||
		// after it's been added to the tracker, we always store the deep
 | 
			
		||||
		// copy.
 | 
			
		||||
		obj, err = t.scheme.Copy(obj)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if status, ok := obj.(*metav1.Status); ok && status.Details != nil {
 | 
			
		||||
			gvk.Kind = status.Details.Kind
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		newMeta, err := meta.Accessor(obj)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Propagate namespace to the new object if hasn't already been set.
 | 
			
		||||
		if len(newMeta.GetNamespace()) == 0 {
 | 
			
		||||
			newMeta.SetNamespace(ns)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ns != newMeta.GetNamespace() {
 | 
			
		||||
			msg := fmt.Sprintf("request namespace does not match object namespace, request: %q object: %q", ns, newMeta.GetNamespace())
 | 
			
		||||
			return errors.NewBadRequest(msg)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err := checkNamespace(t.registry, gvk, newMeta.GetNamespace()); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for i, existingObj := range t.objects[gvk] {
 | 
			
		||||
			oldMeta, err := meta.Accessor(existingObj)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			if oldMeta.GetNamespace() == newMeta.GetNamespace() && oldMeta.GetName() == newMeta.GetName() {
 | 
			
		||||
				if replaceExisting {
 | 
			
		||||
					t.objects[gvk][i] = obj
 | 
			
		||||
					return nil
 | 
			
		||||
				}
 | 
			
		||||
				return errors.NewAlreadyExists(gr, newMeta.GetName())
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if replaceExisting {
 | 
			
		||||
			// Tried to update but no matching object was found.
 | 
			
		||||
			return errors.NewNotFound(gr, newMeta.GetName())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		t.objects[gvk] = append(t.objects[gvk], obj)
 | 
			
		||||
	// To avoid the object from being accidentally modified by caller
 | 
			
		||||
	// after it's been added to the tracker, we always store the deep
 | 
			
		||||
	// copy.
 | 
			
		||||
	obj, err := t.scheme.Copy(obj)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	newMeta, err := meta.Accessor(obj)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Propagate namespace to the new object if hasn't already been set.
 | 
			
		||||
	if len(newMeta.GetNamespace()) == 0 {
 | 
			
		||||
		newMeta.SetNamespace(ns)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ns != newMeta.GetNamespace() {
 | 
			
		||||
		msg := fmt.Sprintf("request namespace does not match object namespace, request: %q object: %q", ns, newMeta.GetNamespace())
 | 
			
		||||
		return errors.NewBadRequest(msg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, existingObj := range t.objects[gvr] {
 | 
			
		||||
		oldMeta, err := meta.Accessor(existingObj)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if oldMeta.GetNamespace() == newMeta.GetNamespace() && oldMeta.GetName() == newMeta.GetName() {
 | 
			
		||||
			if replaceExisting {
 | 
			
		||||
				t.objects[gvr][i] = obj
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
			return errors.NewAlreadyExists(gr, newMeta.GetName())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if replaceExisting {
 | 
			
		||||
		// Tried to update but no matching object was found.
 | 
			
		||||
		return errors.NewNotFound(gr, newMeta.GetName())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	t.objects[gvr] = append(t.objects[gvr], obj)
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -348,35 +334,26 @@ func (t *tracker) addList(obj runtime.Object, replaceExisting bool) error {
 | 
			
		||||
		return errs[0]
 | 
			
		||||
	}
 | 
			
		||||
	for _, obj := range list {
 | 
			
		||||
		objMeta, err := meta.Accessor(obj)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		err = t.add(obj, objMeta.GetNamespace(), replaceExisting)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
		if err := t.Add(obj); err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Delete(gvk schema.GroupVersionKind, ns, name string) error {
 | 
			
		||||
	if err := checkNamespace(t.registry, gvk, ns); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
func (t *tracker) Delete(gvr schema.GroupVersionResource, ns, name string) error {
 | 
			
		||||
	t.lock.Lock()
 | 
			
		||||
	defer t.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	found := false
 | 
			
		||||
 | 
			
		||||
	for i, existingObj := range t.objects[gvk] {
 | 
			
		||||
	for i, existingObj := range t.objects[gvr] {
 | 
			
		||||
		objMeta, err := meta.Accessor(existingObj)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		if objMeta.GetNamespace() == ns && objMeta.GetName() == name {
 | 
			
		||||
			t.objects[gvk] = append(t.objects[gvk][:i], t.objects[gvk][i+1:]...)
 | 
			
		||||
			t.objects[gvr] = append(t.objects[gvr][:i], t.objects[gvr][i+1:]...)
 | 
			
		||||
			found = true
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
@@ -386,7 +363,7 @@ func (t *tracker) Delete(gvk schema.GroupVersionKind, ns, name string) error {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return errors.NewNotFound(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, name)
 | 
			
		||||
	return errors.NewNotFound(gvr.GroupResource(), name)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// filterByNamespaceAndName returns all objects in the collection that
 | 
			
		||||
@@ -412,37 +389,6 @@ func filterByNamespaceAndName(objs []runtime.Object, ns, name string) ([]runtime
 | 
			
		||||
	return res, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// checkNamespace makes sure that the scope of gvk matches ns. It
 | 
			
		||||
// returns an error if namespace is empty but gvk is a namespaced
 | 
			
		||||
// kind, or if ns is non-empty and gvk is a namespaced kind.
 | 
			
		||||
func checkNamespace(registry *registered.APIRegistrationManager, gvk schema.GroupVersionKind, ns string) error {
 | 
			
		||||
	group, err := registry.Group(gvk.Group)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	mapping, err := group.RESTMapper.RESTMapping(gvk.GroupKind(), gvk.Version)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	switch mapping.Scope.Name() {
 | 
			
		||||
	case meta.RESTScopeNameRoot:
 | 
			
		||||
		if ns != "" {
 | 
			
		||||
			return fmt.Errorf("namespace specified for a non-namespaced kind %s", gvk)
 | 
			
		||||
		}
 | 
			
		||||
	case meta.RESTScopeNameNamespace:
 | 
			
		||||
		if ns == "" {
 | 
			
		||||
			// Skipping this check for Events, since
 | 
			
		||||
			// controllers emit events that have no namespace,
 | 
			
		||||
			// even though Event is a namespaced resource.
 | 
			
		||||
			if gvk.Kind != "Event" {
 | 
			
		||||
				return fmt.Errorf("no namespace specified for a namespaced kind %s", gvk)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DefaultWatchReactor(watchInterface watch.Interface, err error) WatchReactionFunc {
 | 
			
		||||
	return func(action Action) (bool, watch.Interface, error) {
 | 
			
		||||
		return true, watchInterface, err
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ import (
 | 
			
		||||
// without applying any validations and/or defaults. It shouldn't be considered a replacement
 | 
			
		||||
// for a real clientset and is mostly useful in simple unit tests.
 | 
			
		||||
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
 | 
			
		||||
	o := testing.NewObjectTracker(api.Registry, api.Scheme, api.Codecs.UniversalDecoder())
 | 
			
		||||
	o := testing.NewObjectTracker(api.Scheme, api.Codecs.UniversalDecoder())
 | 
			
		||||
	for _, obj := range objects {
 | 
			
		||||
		if err := o.Add(obj); err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
@@ -41,7 +41,7 @@ func NewSimpleClientset(objects ...runtime.Object) *Clientset {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fakePtr := testing.Fake{}
 | 
			
		||||
	fakePtr.AddReactor("*", "*", testing.ObjectReaction(o, api.Registry.RESTMapper()))
 | 
			
		||||
	fakePtr.AddReactor("*", "*", testing.ObjectReaction(o))
 | 
			
		||||
 | 
			
		||||
	fakePtr.AddWatchReactor("*", testing.DefaultWatchReactor(watch.NewFake(), nil))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,8 @@ type FakeNodeMetricses struct {
 | 
			
		||||
 | 
			
		||||
var nodemetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "nodemetricses"}
 | 
			
		||||
 | 
			
		||||
var nodemetricsesKind = schema.GroupVersionKind{Group: "metrics", Version: "v1alpha1", Kind: "NodeMetrics"}
 | 
			
		||||
 | 
			
		||||
func (c *FakeNodeMetricses) Get(name string, options v1.GetOptions) (result *v1alpha1.NodeMetrics, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		Invokes(testing.NewRootGetAction(nodemetricsesResource, name), &v1alpha1.NodeMetrics{})
 | 
			
		||||
@@ -43,7 +45,7 @@ func (c *FakeNodeMetricses) Get(name string, options v1.GetOptions) (result *v1a
 | 
			
		||||
 | 
			
		||||
func (c *FakeNodeMetricses) List(opts v1.ListOptions) (result *v1alpha1.NodeMetricsList, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		Invokes(testing.NewRootListAction(nodemetricsesResource, opts), &v1alpha1.NodeMetricsList{})
 | 
			
		||||
		Invokes(testing.NewRootListAction(nodemetricsesResource, nodemetricsesKind, opts), &v1alpha1.NodeMetricsList{})
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,8 @@ type FakePodMetricses struct {
 | 
			
		||||
 | 
			
		||||
var podmetricsesResource = schema.GroupVersionResource{Group: "metrics", Version: "v1alpha1", Resource: "podmetricses"}
 | 
			
		||||
 | 
			
		||||
var podmetricsesKind = schema.GroupVersionKind{Group: "metrics", Version: "v1alpha1", Kind: "PodMetrics"}
 | 
			
		||||
 | 
			
		||||
func (c *FakePodMetricses) Get(name string, options v1.GetOptions) (result *v1alpha1.PodMetrics, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		Invokes(testing.NewGetAction(podmetricsesResource, c.ns, name), &v1alpha1.PodMetrics{})
 | 
			
		||||
@@ -45,7 +47,7 @@ func (c *FakePodMetricses) Get(name string, options v1.GetOptions) (result *v1al
 | 
			
		||||
 | 
			
		||||
func (c *FakePodMetricses) List(opts v1.ListOptions) (result *v1alpha1.PodMetricsList, err error) {
 | 
			
		||||
	obj, err := c.Fake.
 | 
			
		||||
		Invokes(testing.NewListAction(podmetricsesResource, c.ns, opts), &v1alpha1.PodMetricsList{})
 | 
			
		||||
		Invokes(testing.NewListAction(podmetricsesResource, podmetricsesKind, c.ns, opts), &v1alpha1.PodMetricsList{})
 | 
			
		||||
 | 
			
		||||
	if obj == nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
 
 | 
			
		||||
@@ -19,9 +19,9 @@ package fake
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/labels"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/client-go/pkg/api"
 | 
			
		||||
	"k8s.io/client-go/testing"
 | 
			
		||||
	"k8s.io/metrics/pkg/apis/custom_metrics/v1alpha1"
 | 
			
		||||
	cmclient "k8s.io/metrics/pkg/client/custom_metrics"
 | 
			
		||||
@@ -52,13 +52,12 @@ func (i GetForActionImpl) GetSubresource() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewGetForAction(groupKind schema.GroupKind, namespace, name string, metricName string, labelSelector labels.Selector) GetForActionImpl {
 | 
			
		||||
	mapping, err := api.Registry.RESTMapper().RESTMapping(groupKind)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(fmt.Sprintf("unable to get REST mapping for groupKind %s while building GetFor action: %v", groupKind.String, err))
 | 
			
		||||
	}
 | 
			
		||||
	// the version doesn't matter
 | 
			
		||||
	gvk := groupKind.WithVersion("")
 | 
			
		||||
	gvr, _ := meta.UnsafeGuessKindToResource(gvk)
 | 
			
		||||
	groupResourceForKind := schema.GroupResource{
 | 
			
		||||
		Group:    mapping.GroupVersionKind.Group,
 | 
			
		||||
		Resource: mapping.Resource,
 | 
			
		||||
		Group:    gvr.Group,
 | 
			
		||||
		Resource: gvr.Resource,
 | 
			
		||||
	}
 | 
			
		||||
	resource := schema.GroupResource{
 | 
			
		||||
		Group:    v1alpha1.SchemeGroupVersion.Group,
 | 
			
		||||
@@ -72,13 +71,12 @@ func NewGetForAction(groupKind schema.GroupKind, namespace, name string, metricN
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewRootGetForAction(groupKind schema.GroupKind, name string, metricName string, labelSelector labels.Selector) GetForActionImpl {
 | 
			
		||||
	mapping, err := api.Registry.RESTMapper().RESTMapping(groupKind)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(fmt.Sprintf("unable to get REST mapping for groupKind %s while building GetFor action: %v", groupKind.String, err))
 | 
			
		||||
	}
 | 
			
		||||
	// the version doesn't matter
 | 
			
		||||
	gvk := groupKind.WithVersion("")
 | 
			
		||||
	gvr, _ := meta.UnsafeGuessKindToResource(gvk)
 | 
			
		||||
	groupResourceForKind := schema.GroupResource{
 | 
			
		||||
		Group:    mapping.GroupVersionKind.Group,
 | 
			
		||||
		Resource: mapping.Resource,
 | 
			
		||||
		Group:    gvr.Group,
 | 
			
		||||
		Resource: gvr.Resource,
 | 
			
		||||
	}
 | 
			
		||||
	resource := schema.GroupResource{
 | 
			
		||||
		Group:    v1alpha1.SchemeGroupVersion.Group,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user