Track object modifications in fake clientset
Fake clientset is used by unit tests extensively but it has some shortcomings: - no filtering on namespace and name: tests that want to test objects in multiple namespaces end up getting all objects from this clientset, as it doesn't perform any filtering based on name and namespace; - updates and deletes don't modify the clientset state, so some tests can get unexpected results if they modify/delete objects using the clientset; - it's possible to insert multiple objects with the same kind/name/namespace, this leads to confusing behavior, as retrieval is based on the insertion order, but anchors on the last added object as long as no more objects are added. This change changes core.ObjectRetriever implementation to track object adds, updates and deletes. Some unit tests were depending on the previous (and somewhat incorrect) behavior. These are fixed in the following few commits.
This commit is contained in:
@@ -111,9 +111,12 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr
|
||||
|
||||
// This part of code is version-independent, unchanging.
|
||||
var common = `
|
||||
// Clientset returns a clientset that will respond with the provided objects
|
||||
// NewSimpleClientset returns a clientset that will respond with the provided objects.
|
||||
// It's backed by a very simple object tracker that processes creates, updates and deletions as-is,
|
||||
// without applying any validations and/or defaults. It shouldn't be considered a replacement
|
||||
// for a real clientset and is mostly useful in simple unit tests.
|
||||
func NewSimpleClientset(objects ...runtime.Object) *Clientset {
|
||||
o := core.NewObjects(api.Scheme, api.Codecs.UniversalDecoder())
|
||||
o := core.NewObjectTracker(api.Scheme, api.Codecs.UniversalDecoder())
|
||||
for _, obj := range objects {
|
||||
if err := o.Add(obj); err != nil {
|
||||
panic(err)
|
||||
|
Reference in New Issue
Block a user