fieldmanager: Make all tests external

This commit is contained in:
Antoine Pelisse 2022-11-30 13:53:31 -08:00
parent 9c447177e8
commit 56cac64655
6 changed files with 45 additions and 39 deletions

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"bytes" "bytes"
@ -29,18 +29,19 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"sigs.k8s.io/structured-merge-diff/v4/fieldpath" "sigs.k8s.io/structured-merge-diff/v4/fieldpath"
) )
type fakeManager struct{} type fakeManager struct{}
var _ Manager = &fakeManager{} var _ fieldmanager.Manager = &fakeManager{}
func (*fakeManager) Update(_, newObj runtime.Object, managed Managed, _ string) (runtime.Object, Managed, error) { func (*fakeManager) Update(_, newObj runtime.Object, managed fieldmanager.Managed, _ string) (runtime.Object, fieldmanager.Managed, error) {
return newObj, managed, nil return newObj, managed, nil
} }
func (*fakeManager) Apply(_, _ runtime.Object, _ Managed, _ string, _ bool) (runtime.Object, Managed, error) { func (*fakeManager) Apply(_, _ runtime.Object, _ fieldmanager.Managed, _ string, _ bool) (runtime.Object, fieldmanager.Managed, error) {
panic("not implemented") panic("not implemented")
return nil, nil, nil return nil, nil, nil
} }
@ -48,8 +49,8 @@ func (*fakeManager) Apply(_, _ runtime.Object, _ Managed, _ string, _ bool) (run
func TestCapManagersManagerMergesEntries(t *testing.T) { func TestCapManagersManagerMergesEntries(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
"", "",
func(m Manager) Manager { func(m fieldmanager.Manager) fieldmanager.Manager {
return NewCapManagersManager(m, 3) return fieldmanager.NewCapManagersManager(m, 3)
}) })
podWithLabels := func(labels ...string) runtime.Object { podWithLabels := func(labels ...string) runtime.Object {
@ -114,8 +115,8 @@ func TestCapManagersManagerMergesEntries(t *testing.T) {
func TestCapUpdateManagers(t *testing.T) { func TestCapUpdateManagers(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
"", "",
func(m Manager) Manager { func(m fieldmanager.Manager) fieldmanager.Manager {
return NewCapManagersManager(m, 3) return fieldmanager.NewCapManagersManager(m, 3)
}) })
set := func(fields ...string) *metav1.FieldsV1 { set := func(fields ...string) *metav1.FieldsV1 {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"errors" "errors"
@ -36,6 +36,7 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/runtime/serializer"
yamlutil "k8s.io/apimachinery/pkg/util/yaml" yamlutil "k8s.io/apimachinery/pkg/util/yaml"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
"k8s.io/kube-openapi/pkg/util/proto" "k8s.io/kube-openapi/pkg/util/proto"
prototesting "k8s.io/kube-openapi/pkg/util/proto/testing" prototesting "k8s.io/kube-openapi/pkg/util/proto/testing"
@ -89,7 +90,7 @@ func (sameVersionConverter) IsMissingVersionError(error) bool {
} }
type TestFieldManager struct { type TestFieldManager struct {
fieldManager *FieldManager fieldManager *fieldmanager.FieldManager
apiVersion string apiVersion string
emptyObj runtime.Object emptyObj runtime.Object
liveObj runtime.Object liveObj runtime.Object
@ -99,12 +100,12 @@ func NewDefaultTestFieldManager(gvk schema.GroupVersionKind) TestFieldManager {
return NewTestFieldManager(gvk, "", nil) return NewTestFieldManager(gvk, "", nil)
} }
func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainFieldManager func(Manager) Manager) TestFieldManager { func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager {
m := NewFakeOpenAPIModels() m := NewFakeOpenAPIModels()
typeConverter := NewFakeTypeConverter(m) typeConverter := NewFakeTypeConverter(m)
apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String()) apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion} objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion}
f, err := NewStructuredMergeManager( f, err := fieldmanager.NewStructuredMergeManager(
typeConverter, typeConverter,
objectConverter, objectConverter,
&fakeObjectDefaulter{}, &fakeObjectDefaulter{},
@ -118,14 +119,14 @@ func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainF
live := &unstructured.Unstructured{} live := &unstructured.Unstructured{}
live.SetKind(gvk.Kind) live.SetKind(gvk.Kind)
live.SetAPIVersion(gvk.GroupVersion().String()) live.SetAPIVersion(gvk.GroupVersion().String())
f = NewLastAppliedUpdater( f = fieldmanager.NewLastAppliedUpdater(
NewLastAppliedManager( fieldmanager.NewLastAppliedManager(
NewProbabilisticSkipNonAppliedManager( fieldmanager.NewProbabilisticSkipNonAppliedManager(
NewBuildManagerInfoManager( fieldmanager.NewBuildManagerInfoManager(
NewManagedFieldsUpdater( fieldmanager.NewManagedFieldsUpdater(
NewStripMetaManager(f), fieldmanager.NewStripMetaManager(f),
), gvk.GroupVersion(), subresource, ), gvk.GroupVersion(), subresource,
), &fakeObjectCreater{gvk: gvk}, gvk, DefaultTrackOnCreateProbability, ), &fakeObjectCreater{gvk: gvk}, gvk, fieldmanager.DefaultTrackOnCreateProbability,
), typeConverter, objectConverter, gvk.GroupVersion(), ), typeConverter, objectConverter, gvk.GroupVersion(),
), ),
) )
@ -133,15 +134,15 @@ func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainF
f = chainFieldManager(f) f = chainFieldManager(f)
} }
return TestFieldManager{ return TestFieldManager{
fieldManager: NewFieldManager(f, subresource), fieldManager: fieldmanager.NewFieldManager(f, subresource),
apiVersion: gvk.GroupVersion().String(), apiVersion: gvk.GroupVersion().String(),
emptyObj: live, emptyObj: live,
liveObj: live.DeepCopyObject(), liveObj: live.DeepCopyObject(),
} }
} }
func NewFakeTypeConverter(m proto.Models) TypeConverter { func NewFakeTypeConverter(m proto.Models) fieldmanager.TypeConverter {
tc, err := NewTypeConverter(m, false) tc, err := fieldmanager.NewTypeConverter(m, false)
if err != nil { if err != nil {
panic(fmt.Sprintf("Failed to build TypeConverter: %v", err)) panic(fmt.Sprintf("Failed to build TypeConverter: %v", err))
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"fmt" "fmt"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"fmt" "fmt"
@ -26,14 +26,15 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
func TestLastAppliedUpdater(t *testing.T) { func TestLastAppliedUpdater(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"), f := NewTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"),
"", "",
func(m Manager) Manager { func(m fieldmanager.Manager) fieldmanager.Manager {
return NewLastAppliedUpdater(m) return fieldmanager.NewLastAppliedUpdater(m)
}) })
originalLastApplied := `nonempty` originalLastApplied := `nonempty`
@ -189,8 +190,8 @@ func TestLargeLastApplied(t *testing.T) {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"), f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"),
"", "",
func(m Manager) Manager { func(m fieldmanager.Manager) fieldmanager.Manager {
return NewLastAppliedUpdater(m) return fieldmanager.NewLastAppliedUpdater(m)
}) })
if err := f.Apply(test.oldObject, "kubectl", false); err != nil { if err := f.Apply(test.oldObject, "kubectl", false); err != nil {

View File

@ -14,19 +14,21 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"fmt" "fmt"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"reflect" "reflect"
"testing" "testing"
"time" "time"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal" "k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@ -425,11 +427,11 @@ func TestTakingOverManagedFieldsDuringApplyDoesNotModifyPreviousManagerTime(t *t
type NoopManager struct{} type NoopManager struct{}
func (NoopManager) Apply(liveObj, appliedObj runtime.Object, managed Managed, fieldManager string, force bool) (runtime.Object, Managed, error) { func (NoopManager) Apply(liveObj, appliedObj runtime.Object, managed fieldmanager.Managed, fieldManager string, force bool) (runtime.Object, fieldmanager.Managed, error) {
return nil, managed, nil return nil, managed, nil
} }
func (NoopManager) Update(liveObj, newObj runtime.Object, managed Managed, manager string) (runtime.Object, Managed, error) { func (NoopManager) Update(liveObj, newObj runtime.Object, managed fieldmanager.Managed, manager string) (runtime.Object, fieldmanager.Managed, error) {
return nil, nil, nil return nil, nil, nil
} }
@ -495,12 +497,12 @@ func TestNilNewObjectReplacedWithDeepCopyExcludingManagedFields(t *testing.T) {
} }
// Decode the managed fields in the live object, since it isn't allowed in the patch. // Decode the managed fields in the live object, since it isn't allowed in the patch.
managed, err := DecodeManagedFields(accessor.GetManagedFields()) managed, err := fieldmanager.DecodeManagedFields(accessor.GetManagedFields())
if err != nil { if err != nil {
t.Fatalf("failed to decode managed fields: %v", err) t.Fatalf("failed to decode managed fields: %v", err)
} }
updater := NewManagedFieldsUpdater(NoopManager{}) updater := fieldmanager.NewManagedFieldsUpdater(NoopManager{})
newObject, _, err := updater.Apply(obj, obj.DeepCopyObject(), managed, "some_manager", false) newObject, _, err := updater.Apply(obj, obj.DeepCopyObject(), managed, "some_manager", false)
if err != nil { if err != nil {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package fieldmanager package fieldmanager_test
import ( import (
"strings" "strings"
@ -25,6 +25,7 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@ -42,8 +43,8 @@ func (f *fakeObjectCreater) New(_ schema.GroupVersionKind) (runtime.Object, erro
} }
func TestNoUpdateBeforeFirstApply(t *testing.T) { func TestNoUpdateBeforeFirstApply(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m Manager) Manager { f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
return NewSkipNonAppliedManager( return fieldmanager.NewSkipNonAppliedManager(
m, m,
&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}}, &fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
schema.GroupVersionKind{}, schema.GroupVersionKind{},
@ -82,8 +83,8 @@ func TestNoUpdateBeforeFirstApply(t *testing.T) {
} }
func TestUpdateBeforeFirstApply(t *testing.T) { func TestUpdateBeforeFirstApply(t *testing.T) {
f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m Manager) Manager { f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
return NewSkipNonAppliedManager( return fieldmanager.NewSkipNonAppliedManager(
m, m,
&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}}, &fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
schema.GroupVersionKind{}, schema.GroupVersionKind{},