diff --git a/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go index 09055a5ba..19d648b53 100644 --- a/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go +++ b/vendor/sigs.k8s.io/controller-runtime/pkg/client/fake/client.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/testing" @@ -110,7 +111,48 @@ func (c *fakeClient) List(ctx context.Context, opts *client.ListOptions, list ru } decoder := scheme.Codecs.UniversalDecoder() _, _, err = decoder.Decode(j, nil, list) - return err + if err != nil { + return err + } + + // TODO: can be removed after vendoring the controller-runtime with the PR + // https://github.com/kubernetes-sigs/controller-runtime/pull/311 + if opts.LabelSelector != nil { + objs, err := meta.ExtractList(list) + if err != nil { + return err + } + filteredObjs, err := filterWithLabels(objs, opts.LabelSelector) + if err != nil { + return err + } + err = meta.SetList(list, filteredObjs) + if err != nil { + return err + } + } + return nil +} + +// FilterWithLabels returns a copy of the items in objs matching labelSel +func filterWithLabels(objs []runtime.Object, labelSel labels.Selector) ([]runtime.Object, error) { + // TODO: can be removed after vendoring the controller-runtime with the PR + // https://github.com/kubernetes-sigs/controller-runtime/pull/311 + outItems := make([]runtime.Object, 0, len(objs)) + for _, obj := range objs { + meta, err := meta.Accessor(obj) + if err != nil { + return nil, err + } + if labelSel != nil { + lbls := labels.Set(meta.GetLabels()) + if !labelSel.Matches(lbls) { + continue + } + } + outItems = append(outItems, obj.DeepCopyObject()) + } + return outItems, nil } func (c *fakeClient) Create(ctx context.Context, obj runtime.Object) error {