From c45bc431c3357384b0e4b88d35e265638db1b8eb Mon Sep 17 00:00:00 2001 From: Feilian Xie Date: Thu, 4 Jul 2024 17:29:57 +0800 Subject: [PATCH] Return the error returned by Invokes so the FakeDiscovery client is able to simulate any error with reactors. Signed-off-by: Feilian Xie Kubernetes-commit: 33557a2f6c82d10fa6a459d2ebac56d6a2670492 --- discovery/fake/discovery.go | 12 ++++++--- discovery/fake/discovery_test.go | 45 ++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/discovery/fake/discovery.go b/discovery/fake/discovery.go index f8a78e1e..e5d9e7f8 100644 --- a/discovery/fake/discovery.go +++ b/discovery/fake/discovery.go @@ -47,7 +47,9 @@ func (c *FakeDiscovery) ServerResourcesForGroupVersion(groupVersion string) (*me Verb: "get", Resource: schema.GroupVersionResource{Resource: "resource"}, } - c.Invokes(action, nil) + if _, err := c.Invokes(action, nil); err != nil { + return nil, err + } for _, resourceList := range c.Resources { if resourceList.GroupVersion == groupVersion { return resourceList, nil @@ -77,7 +79,9 @@ func (c *FakeDiscovery) ServerGroupsAndResources() ([]*metav1.APIGroup, []*metav Verb: "get", Resource: schema.GroupVersionResource{Resource: "resource"}, } - c.Invokes(action, nil) + if _, err = c.Invokes(action, nil); err != nil { + return resultGroups, c.Resources, err + } return resultGroups, c.Resources, nil } @@ -100,7 +104,9 @@ func (c *FakeDiscovery) ServerGroups() (*metav1.APIGroupList, error) { Verb: "get", Resource: schema.GroupVersionResource{Resource: "group"}, } - c.Invokes(action, nil) + if _, err := c.Invokes(action, nil); err != nil { + return nil, err + } groups := map[string]*metav1.APIGroup{} diff --git a/discovery/fake/discovery_test.go b/discovery/fake/discovery_test.go index 946b484f..44c5d744 100644 --- a/discovery/fake/discovery_test.go +++ b/discovery/fake/discovery_test.go @@ -63,3 +63,48 @@ func TestFakingServerVersionWithError(t *testing.T) { t.Fatal("ServerVersion should return expected error, returned different error instead") } } + +func TestFakingServerResourcesForGroupVersionWithError(t *testing.T) { + expectedError := errors.New("an error occurred") + fakeClient := fakeclientset.NewClientset() + fakeClient.Discovery().(*fakediscovery.FakeDiscovery).PrependReactor("*", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + return true, nil, expectedError + }) + + result, err := fakeClient.Discovery().ServerResourcesForGroupVersion("dummy.group.io/v1beta2") + if result != nil { + t.Errorf(`expect result to be nil but got "%v" instead`, result) + } + if !errors.Is(err, expectedError) { + t.Errorf(`expect error to be "%v" but got "%v" instead`, expectedError, err) + } +} + +func TestFakingServerGroupsWithError(t *testing.T) { + expectedError := errors.New("an error occurred") + fakeClient := fakeclientset.NewClientset() + fakeClient.Discovery().(*fakediscovery.FakeDiscovery).PrependReactor("*", "*", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + return true, nil, expectedError + }) + + result, err := fakeClient.Discovery().ServerGroups() + if result != nil { + t.Errorf(`expect result to be nil but got "%v" instead`, result) + } + if !errors.Is(err, expectedError) { + t.Errorf(`expect error to be "%v" but got "%v" instead`, expectedError, err) + } +} + +func TestFakingServerGroupsAndResourcesWithError(t *testing.T) { + expectedError := errors.New("an error occurred") + fakeClient := fakeclientset.NewClientset() + fakeClient.Discovery().(*fakediscovery.FakeDiscovery).PrependReactor("get", "resource", func(action kubetesting.Action) (handled bool, ret runtime.Object, err error) { + return true, nil, expectedError + }) + + _, _, err := fakeClient.Discovery().ServerGroupsAndResources() + if !errors.Is(err, expectedError) { + t.Errorf(`expect error to be "%v" but got "%v" instead`, expectedError, err) + } +}