Skip to content

Commit fc16390

Browse files
authored
Merge pull request #3022 from alvaroaleman/dont-populate
🐛 Fakeclient: Don't return items on invalid selector
2 parents 711b48b + c49e843 commit fc16390

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

pkg/client/fake/client.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -601,21 +601,22 @@ func (c *fakeClient) List(ctx context.Context, obj client.ObjectList, opts ...cl
601601
return err
602602
}
603603
zero(obj)
604-
if err := json.Unmarshal(j, obj); err != nil {
604+
objCopy := obj.DeepCopyObject().(client.ObjectList)
605+
if err := json.Unmarshal(j, objCopy); err != nil {
606+
return err
607+
}
608+
609+
objs, err := meta.ExtractList(objCopy)
610+
if err != nil {
605611
return err
606612
}
607613

608614
if listOpts.LabelSelector == nil && listOpts.FieldSelector == nil {
609-
return nil
615+
return meta.SetList(obj, objs)
610616
}
611617

612618
// If we're here, either a label or field selector are specified (or both), so before we return
613619
// the list we must filter it. If both selectors are set, they are ANDed.
614-
objs, err := meta.ExtractList(obj)
615-
if err != nil {
616-
return err
617-
}
618-
619620
filteredList, err := c.filterList(objs, gvk, listOpts.LabelSelector, listOpts.FieldSelector)
620621
if err != nil {
621622
return err

pkg/client/fake/client_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,16 +1319,20 @@ var _ = Describe("Fake client", func() {
13191319
listOpts := &client.ListOptions{
13201320
FieldSelector: fields.OneTermEqualSelector("key", "val"),
13211321
}
1322-
err := cl.List(context.Background(), &corev1.ConfigMapList{}, listOpts)
1322+
list := &corev1.ConfigMapList{}
1323+
err := cl.List(context.Background(), list, listOpts)
13231324
Expect(err).To(HaveOccurred())
1325+
Expect(list.Items).To(BeEmpty())
13241326
})
13251327

13261328
It("errors when there's no Index matching the field name", func() {
13271329
listOpts := &client.ListOptions{
13281330
FieldSelector: fields.OneTermEqualSelector("spec.paused", "false"),
13291331
}
1330-
err := cl.List(context.Background(), &appsv1.DeploymentList{}, listOpts)
1332+
list := &appsv1.DeploymentList{}
1333+
err := cl.List(context.Background(), list, listOpts)
13311334
Expect(err).To(HaveOccurred())
1335+
Expect(list.Items).To(BeEmpty())
13321336
})
13331337

13341338
It("errors when field selector uses two requirements", func() {
@@ -1337,8 +1341,10 @@ var _ = Describe("Fake client", func() {
13371341
fields.OneTermEqualSelector("spec.replicas", "1"),
13381342
fields.OneTermEqualSelector("spec.strategy.type", string(appsv1.RecreateDeploymentStrategyType)),
13391343
)}
1340-
err := cl.List(context.Background(), &appsv1.DeploymentList{}, listOpts)
1344+
list := &appsv1.DeploymentList{}
1345+
err := cl.List(context.Background(), list, listOpts)
13411346
Expect(err).To(HaveOccurred())
1347+
Expect(list.Items).To(BeEmpty())
13421348
})
13431349

13441350
It("returns two deployments that match the only field selector requirement", func() {

0 commit comments

Comments
 (0)