Open alvaroaleman opened 5 years ago
I'm all ears for a good way to do this
@DirectXMan12 So what I had in mind would be something like:
pkg/manager/fake
that exposes a NewFakeManager(obj ...runtime.Object)
manager
except for GetClient
and GetFieldIndexer
will error or panicGetClient
and GetFieldIndexer
can be used to create and use an index, something along the lines of https://github.com/kubernetes/test-infra/blob/f0e45d49993ce6aec651c981bbed9805d016ccc3/prow/tide/tide_test.go#L3192-L3252WDYT?
All methods on that manager except for GetClient and GetFieldIndexer will error or panic
:-/ I'm not a huge fan of this, but if we can't figure out a better method, it might be a viable way forward. Usually, this means that there's an overbroad interface, but in this case it's "set of available dependencies", so it might be fine.
/help /priority backlog
@vincepri: This request has been marked as needing help from a contributor.
Please ensure the request meets the requirements listed here.
If this request no longer meets these requirements, the label can be removed
by commenting with the /remove-help
command.
Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale
.
Stale issues rot after an additional 30d of inactivity and eventually close.
If this issue is safe to close now please do so with /close
.
Send feedback to sig-testing, kubernetes/test-infra and/or fejta. /lifecycle stale
/lifecycle frozen
For posterity, I did built something for this out-of tree some time ago that might be used as inspiration to add this to controller-runtime directly: https://github.com/kubernetes/test-infra/blob/682727078f0c86e556d9d766bd4ffbf3e2980a56/prow/tide/tide_test.go#L3836-L3923
It should also be mentioned that the "interact with cluster" part has been decoupled form the "run stuff" part and moved into pkg/cluster from pkg/manager in the meantime. So having something like a pkg/cluster/fake might be a good way forward here
Currently, the only way of testing if:
is to use
envtest
, which spins up an etcd and apiserver. Doing so works fine, but requires more setup (the binaries must be available) and has a decent chance of flaking in CI, e.G. due to CPU starvation.It would be nice if there was a way to test the two cases above via pure unittests.
Discussion originally started here: https://github.com/kubernetes/test-infra/pull/14830#discussion_r336232996 /kind feature