-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
install watch reaction function to fake client #550
base: main
Are you sure you want to change the base?
install watch reaction function to fake client #550
Conversation
c189e97
to
c533767
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #550 +/- ##
==========================================
- Coverage 58.93% 58.85% -0.09%
==========================================
Files 33 33
Lines 2981 2987 +6
==========================================
+ Hits 1757 1758 +1
- Misses 1130 1134 +4
- Partials 94 95 +1 ☔ View full report in Codecov by Sentry. |
Hi @AshishNaware. Thanks for the contribution. This change is heading in the right direction, but is also incomplete as it has no runtime effect. Let me know if you need any pointers into the code base. |
Hey. Thanks for the feedback. Let me dig more into the code-base. I will create a thread here if i have any questions :) |
@scothis - I just took a quick glance at the code and I see a Watch method already implemented for duckAwareClientWrapper that returns a watch.Interface. I assume that we need a similar implementation for the clientWrapper as well. thoughts? |
Yep. This is also where the watch reaction funcs should be applied. |
c533767
to
16e49a3
Compare
Signed-off-by: Ashish Naware <[email protected]>
a28e461
to
9f79887
Compare
Hi @scothis - Sorry for the delay, I was busy with some other high priority tasks. Could you please review this again? I haven't written any tests for above changes. do you have any suggestions on that? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's fine to skip watches for the sub resource clients. Writing tests will be important here since this code won't be exercised in any other way. A good test will show how you expect a Watch/WatchReactor to actually be used.
err = w.reactWatcherFunc(clientgotesting.NewGetAction(gvr, namespace, name)) | ||
if err != nil { | ||
return nil, err | ||
} | ||
err = w.reactWatcherFunc(clientgotesting.NewCreateAction(gvr, namespace, list)) | ||
if err != nil { | ||
return nil, err | ||
} | ||
err = w.reactWatcherFunc(clientgotesting.NewDeleteAction(gvr, namespace, name)) | ||
if err != nil { | ||
return nil, err | ||
} | ||
err = w.reactWatcherFunc(clientgotesting.NewUpdateAction(gvr, namespace, list)) | ||
if err != nil { | ||
return nil, err | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are we trying to react to get/create/delete/update here? I would expect it to only react with watch actions. I'm not familiar enough with the mechanics of watch to know exactly what should be here.
@@ -48,9 +48,10 @@ type ReconcilerTestCase struct { | |||
|
|||
// Request identifies the object to be reconciled | |||
Request reconcilers.Request | |||
// WithReactors installs each ReactionFunc into each fake clientset. ReactionFuncs intercept | |||
// WithReactors and WithWatchReactors installs each ReactionFunc into each fake clientset. ReactionFuncs intercept |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
document each field separately, otherwise the info won't show up in tooling for WithWatchReactors.
x3
@@ -69,6 +69,9 @@ type ExpectConfig struct { | |||
// WithReactors installs each ReactionFunc into each fake clientset. ReactionFuncs intercept | |||
// each call to the clientset providing the ability to mutate the resource or inject an error. | |||
WithReactors []ReactionFunc | |||
// WithWatchReactors installs WatchReactionFunc into the fake clientset. This provides ability | |||
// to simulate events in the watcher. | |||
WithWatchReactors []WatchReactionFunc |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
May also need to define WithWatchReactors for (Sub)ReconcilerTestCase/AdmissionWebhookTestCase and pass it through when creating the ExpectConfig. Then again, I'm not sure watch makes sense in those particular contexts since reconcilers and webhooks are intended to execute at a moment in time while watches are long lived observations of change. What do you think?
This PR adds ability to install watch reaction function to the fake client. This will help in writing tests where its required to simulate behavior of the watcher.