Make versionconverter functions private
This commit is contained in:
		@@ -673,7 +673,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
 | 
				
			|||||||
	if openAPIModels != nil {
 | 
						if openAPIModels != nil {
 | 
				
			||||||
		typeConverter, err = fieldmanager.NewTypeConverter(openAPIModels, crd.Spec.PreserveUnknownFields)
 | 
							typeConverter, err = fieldmanager.NewTypeConverter(openAPIModels, crd.Spec.PreserveUnknownFields)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			typeConverter = nil
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -29,19 +29,18 @@ 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 _ fieldmanager.Manager = &fakeManager{}
 | 
					var _ Manager = &fakeManager{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*fakeManager) Update(_, newObj runtime.Object, managed fieldmanager.Managed, _ string) (runtime.Object, fieldmanager.Managed, error) {
 | 
					func (*fakeManager) Update(_, newObj runtime.Object, managed Managed, _ string) (runtime.Object, Managed, error) {
 | 
				
			||||||
	return newObj, managed, nil
 | 
						return newObj, managed, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (*fakeManager) Apply(_, _ runtime.Object, _ fieldmanager.Managed, _ string, _ bool) (runtime.Object, fieldmanager.Managed, error) {
 | 
					func (*fakeManager) Apply(_, _ runtime.Object, _ Managed, _ string, _ bool) (runtime.Object, Managed, error) {
 | 
				
			||||||
	panic("not implemented")
 | 
						panic("not implemented")
 | 
				
			||||||
	return nil, nil, nil
 | 
						return nil, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -49,8 +48,8 @@ func (*fakeManager) Apply(_, _ runtime.Object, _ fieldmanager.Managed, _ string,
 | 
				
			|||||||
func TestCapManagersManagerMergesEntries(t *testing.T) {
 | 
					func TestCapManagersManagerMergesEntries(t *testing.T) {
 | 
				
			||||||
	f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
 | 
						f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
		func(m fieldmanager.Manager) fieldmanager.Manager {
 | 
							func(m Manager) Manager {
 | 
				
			||||||
			return fieldmanager.NewCapManagersManager(m, 3)
 | 
								return NewCapManagersManager(m, 3)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	podWithLabels := func(labels ...string) runtime.Object {
 | 
						podWithLabels := func(labels ...string) runtime.Object {
 | 
				
			||||||
@@ -115,8 +114,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"),
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
		func(m fieldmanager.Manager) fieldmanager.Manager {
 | 
							func(m Manager) Manager {
 | 
				
			||||||
			return fieldmanager.NewCapManagersManager(m, 3)
 | 
								return NewCapManagersManager(m, 3)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set := func(fields ...string) *metav1.FieldsV1 {
 | 
						set := func(fields ...string) *metav1.FieldsV1 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
@@ -36,7 +36,6 @@ 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/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"
 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
				
			||||||
@@ -45,7 +44,7 @@ import (
 | 
				
			|||||||
	"sigs.k8s.io/yaml"
 | 
						"sigs.k8s.io/yaml"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fakeSchema = prototesting.Fake{
 | 
					var kubernetesSwaggerSchema = prototesting.Fake{
 | 
				
			||||||
	Path: filepath.Join(
 | 
						Path: filepath.Join(
 | 
				
			||||||
		strings.Repeat(".."+string(filepath.Separator), 8),
 | 
							strings.Repeat(".."+string(filepath.Separator), 8),
 | 
				
			||||||
		"api", "openapi-spec", "swagger.json"),
 | 
							"api", "openapi-spec", "swagger.json"),
 | 
				
			||||||
@@ -79,7 +78,7 @@ type fakeObjectDefaulter struct{}
 | 
				
			|||||||
func (d *fakeObjectDefaulter) Default(in runtime.Object) {}
 | 
					func (d *fakeObjectDefaulter) Default(in runtime.Object) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type TestFieldManager struct {
 | 
					type TestFieldManager struct {
 | 
				
			||||||
	fieldManager *fieldmanager.FieldManager
 | 
						fieldManager *FieldManager
 | 
				
			||||||
	emptyObj     runtime.Object
 | 
						emptyObj     runtime.Object
 | 
				
			||||||
	liveObj      runtime.Object
 | 
						liveObj      runtime.Object
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -92,13 +91,13 @@ func NewSubresourceTestFieldManager(gvk schema.GroupVersionKind) TestFieldManage
 | 
				
			|||||||
	return NewTestFieldManager(gvk, true, nil)
 | 
						return NewTestFieldManager(gvk, true, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewTestFieldManager(gvk schema.GroupVersionKind, ignoreManagedFieldsFromRequestObject bool, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager {
 | 
					func NewTestFieldManager(gvk schema.GroupVersionKind, ignoreManagedFieldsFromRequestObject bool, chainFieldManager func(Manager) Manager) TestFieldManager {
 | 
				
			||||||
	m := NewFakeOpenAPIModels()
 | 
						m := NewFakeOpenAPIModels()
 | 
				
			||||||
	typeConverter := NewFakeTypeConverter(m)
 | 
						typeConverter := NewFakeTypeConverter(m)
 | 
				
			||||||
	converter := fieldmanager.NewVersionConverter(typeConverter, &fakeObjectConvertor{}, gvk.GroupVersion())
 | 
						converter := newVersionConverter(typeConverter, &fakeObjectConvertor{}, gvk.GroupVersion())
 | 
				
			||||||
	apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
 | 
						apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
 | 
				
			||||||
	objectConverter := &fakeObjectConvertor{converter, apiVersion}
 | 
						objectConverter := &fakeObjectConvertor{converter, apiVersion}
 | 
				
			||||||
	f, err := fieldmanager.NewStructuredMergeManager(
 | 
						f, err := NewStructuredMergeManager(
 | 
				
			||||||
		typeConverter,
 | 
							typeConverter,
 | 
				
			||||||
		objectConverter,
 | 
							objectConverter,
 | 
				
			||||||
		&fakeObjectDefaulter{},
 | 
							&fakeObjectDefaulter{},
 | 
				
			||||||
@@ -111,24 +110,24 @@ func NewTestFieldManager(gvk schema.GroupVersionKind, ignoreManagedFieldsFromReq
 | 
				
			|||||||
	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 = fieldmanager.NewStripMetaManager(f)
 | 
						f = NewStripMetaManager(f)
 | 
				
			||||||
	f = fieldmanager.NewManagedFieldsUpdater(f)
 | 
						f = NewManagedFieldsUpdater(f)
 | 
				
			||||||
	f = fieldmanager.NewBuildManagerInfoManager(f, gvk.GroupVersion())
 | 
						f = NewBuildManagerInfoManager(f, gvk.GroupVersion())
 | 
				
			||||||
	f = fieldmanager.NewProbabilisticSkipNonAppliedManager(f, &fakeObjectCreater{gvk: gvk}, gvk, fieldmanager.DefaultTrackOnCreateProbability)
 | 
						f = NewProbabilisticSkipNonAppliedManager(f, &fakeObjectCreater{gvk: gvk}, gvk, DefaultTrackOnCreateProbability)
 | 
				
			||||||
	f = fieldmanager.NewLastAppliedManager(f, typeConverter, objectConverter, gvk.GroupVersion())
 | 
						f = NewLastAppliedManager(f, typeConverter, objectConverter, gvk.GroupVersion())
 | 
				
			||||||
	f = fieldmanager.NewLastAppliedUpdater(f)
 | 
						f = NewLastAppliedUpdater(f)
 | 
				
			||||||
	if chainFieldManager != nil {
 | 
						if chainFieldManager != nil {
 | 
				
			||||||
		f = chainFieldManager(f)
 | 
							f = chainFieldManager(f)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return TestFieldManager{
 | 
						return TestFieldManager{
 | 
				
			||||||
		fieldManager: fieldmanager.NewFieldManager(f, ignoreManagedFieldsFromRequestObject),
 | 
							fieldManager: NewFieldManager(f, ignoreManagedFieldsFromRequestObject),
 | 
				
			||||||
		emptyObj:     live,
 | 
							emptyObj:     live,
 | 
				
			||||||
		liveObj:      live.DeepCopyObject(),
 | 
							liveObj:      live.DeepCopyObject(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewFakeTypeConverter(m proto.Models) fieldmanager.TypeConverter {
 | 
					func NewFakeTypeConverter(m proto.Models) TypeConverter {
 | 
				
			||||||
	tc, err := fieldmanager.NewTypeConverter(m, false)
 | 
						tc, err := 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))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -136,7 +135,7 @@ func NewFakeTypeConverter(m proto.Models) fieldmanager.TypeConverter {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewFakeOpenAPIModels() proto.Models {
 | 
					func NewFakeOpenAPIModels() proto.Models {
 | 
				
			||||||
	d, err := fakeSchema.OpenAPISchema()
 | 
						d, err := kubernetesSwaggerSchema.OpenAPISchema()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1206,20 +1205,6 @@ func setLastAppliedFromEncoded(obj runtime.Object, lastApplied []byte) error {
 | 
				
			|||||||
	return setLastApplied(obj, lastAppliedJSON)
 | 
						return setLastApplied(obj, lastAppliedJSON)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setLastApplied(obj runtime.Object, lastApplied string) error {
 | 
					 | 
				
			||||||
	accessor := meta.NewAccessor()
 | 
					 | 
				
			||||||
	annotations, err := accessor.Annotations(obj)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return fmt.Errorf("failed to access annotations: %v", err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if annotations == nil {
 | 
					 | 
				
			||||||
		annotations = map[string]string{}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	annotations[corev1.LastAppliedConfigAnnotation] = lastApplied
 | 
					 | 
				
			||||||
	accessor.SetAnnotations(obj, annotations)
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func getLastApplied(obj runtime.Object) (string, error) {
 | 
					func getLastApplied(obj runtime.Object) (string, error) {
 | 
				
			||||||
	accessor := meta.NewAccessor()
 | 
						accessor := meta.NewAccessor()
 | 
				
			||||||
	annotations, err := accessor.Annotations(obj)
 | 
						annotations, err := accessor.Annotations(obj)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,11 +30,14 @@ import (
 | 
				
			|||||||
// definition's "extensions" map.
 | 
					// definition's "extensions" map.
 | 
				
			||||||
const groupVersionKindExtensionKey = "x-kubernetes-group-version-kind"
 | 
					const groupVersionKindExtensionKey = "x-kubernetes-group-version-kind"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GvkParser contains a Parser that allows introspecting the schema.
 | 
				
			||||||
type GvkParser struct {
 | 
					type GvkParser struct {
 | 
				
			||||||
	gvks   map[schema.GroupVersionKind]string
 | 
						gvks   map[schema.GroupVersionKind]string
 | 
				
			||||||
	parser typed.Parser
 | 
						parser typed.Parser
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Type returns a helper which can produce objects of the given type. Any
 | 
				
			||||||
 | 
					// errors are deferred until a further function is called.
 | 
				
			||||||
func (p *GvkParser) Type(gvk schema.GroupVersionKind) *typed.ParseableType {
 | 
					func (p *GvkParser) Type(gvk schema.GroupVersionKind) *typed.ParseableType {
 | 
				
			||||||
	typeName, ok := p.gvks[gvk]
 | 
						typeName, ok := p.gvks[gvk]
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
@@ -44,6 +47,9 @@ func (p *GvkParser) Type(gvk schema.GroupVersionKind) *typed.ParseableType {
 | 
				
			|||||||
	return &t
 | 
						return &t
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewGVKParser builds a GVKParser from a proto.Models. This
 | 
				
			||||||
 | 
					// will automatically find the proper version of the object, and the
 | 
				
			||||||
 | 
					// corresponding schema information.
 | 
				
			||||||
func NewGVKParser(models proto.Models, preserveUnknownFields bool) (*GvkParser, error) {
 | 
					func NewGVKParser(models proto.Models, preserveUnknownFields bool) (*GvkParser, error) {
 | 
				
			||||||
	typeSchema, err := schemaconv.ToSchemaWithPreserveUnknownFields(models, preserveUnknownFields)
 | 
						typeSchema, err := schemaconv.ToSchemaWithPreserveUnknownFields(models, preserveUnknownFields)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
@@ -22,15 +22,14 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"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"),
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
		func(m fieldmanager.Manager) fieldmanager.Manager {
 | 
							func(m Manager) Manager {
 | 
				
			||||||
			return fieldmanager.NewLastAppliedUpdater(m)
 | 
								return NewLastAppliedUpdater(m)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	originalLastApplied := `nonempty`
 | 
						originalLastApplied := `nonempty`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
@@ -25,7 +25,6 @@ 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"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,8 +42,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"), false, func(m fieldmanager.Manager) fieldmanager.Manager {
 | 
						f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), false, func(m Manager) Manager {
 | 
				
			||||||
		return fieldmanager.NewSkipNonAppliedManager(
 | 
							return NewSkipNonAppliedManager(
 | 
				
			||||||
			m,
 | 
								m,
 | 
				
			||||||
			&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
 | 
								&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
 | 
				
			||||||
			schema.GroupVersionKind{},
 | 
								schema.GroupVersionKind{},
 | 
				
			||||||
@@ -83,8 +82,8 @@ func TestNoUpdateBeforeFirstApply(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestUpdateBeforeFirstApply(t *testing.T) {
 | 
					func TestUpdateBeforeFirstApply(t *testing.T) {
 | 
				
			||||||
	f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), false, func(m fieldmanager.Manager) fieldmanager.Manager {
 | 
						f := NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), false, func(m Manager) Manager {
 | 
				
			||||||
		return fieldmanager.NewSkipNonAppliedManager(
 | 
							return NewSkipNonAppliedManager(
 | 
				
			||||||
			m,
 | 
								m,
 | 
				
			||||||
			&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
 | 
								&fakeObjectCreater{gvk: schema.GroupVersionKind{Version: "v1", Kind: "Pod"}},
 | 
				
			||||||
			schema.GroupVersionKind{},
 | 
								schema.GroupVersionKind{},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ func NewStructuredMergeManager(typeConverter TypeConverter, objectConverter runt
 | 
				
			|||||||
		groupVersion:    gv,
 | 
							groupVersion:    gv,
 | 
				
			||||||
		hubVersion:      hub,
 | 
							hubVersion:      hub,
 | 
				
			||||||
		updater: merge.Updater{
 | 
							updater: merge.Updater{
 | 
				
			||||||
			Converter: NewVersionConverter(typeConverter, objectConverter, hub), // This is the converter provided to SMD from k8s
 | 
								Converter: newVersionConverter(typeConverter, objectConverter, hub), // This is the converter provided to SMD from k8s
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -65,7 +65,7 @@ func NewCRDStructuredMergeManager(typeConverter TypeConverter, objectConverter r
 | 
				
			|||||||
		groupVersion:    gv,
 | 
							groupVersion:    gv,
 | 
				
			||||||
		hubVersion:      hub,
 | 
							hubVersion:      hub,
 | 
				
			||||||
		updater: merge.Updater{
 | 
							updater: merge.Updater{
 | 
				
			||||||
			Converter: NewCRDVersionConverter(typeConverter, objectConverter, hub),
 | 
								Converter: newCRDVersionConverter(typeConverter, objectConverter, hub),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,12 +31,12 @@ import (
 | 
				
			|||||||
	prototesting "k8s.io/kube-openapi/pkg/util/proto/testing"
 | 
						prototesting "k8s.io/kube-openapi/pkg/util/proto/testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fakeSchema2 = prototesting.Fake{
 | 
					var testSchema = prototesting.Fake{
 | 
				
			||||||
	Path: filepath.Join("testdata", "swagger.json"),
 | 
						Path: filepath.Join("testdata", "swagger.json"),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestTypeConverter(t *testing.T) {
 | 
					func TestTypeConverter(t *testing.T) {
 | 
				
			||||||
	d, err := fakeSchema2.OpenAPISchema()
 | 
						d, err := testSchema.OpenAPISchema()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
							t.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -177,7 +177,7 @@ spec:
 | 
				
			|||||||
		b.Fatalf("Failed to parse yaml object: %v", err)
 | 
							b.Fatalf("Failed to parse yaml object: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	d, err := fakeSchema2.OpenAPISchema()
 | 
						d, err := testSchema.OpenAPISchema()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		b.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
							b.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ type versionConverter struct {
 | 
				
			|||||||
var _ merge.Converter = &versionConverter{}
 | 
					var _ merge.Converter = &versionConverter{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewVersionConverter builds a VersionConverter from a TypeConverter and an ObjectConvertor.
 | 
					// NewVersionConverter builds a VersionConverter from a TypeConverter and an ObjectConvertor.
 | 
				
			||||||
func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter {
 | 
					func newVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter {
 | 
				
			||||||
	return &versionConverter{
 | 
						return &versionConverter{
 | 
				
			||||||
		typeConverter:   t,
 | 
							typeConverter:   t,
 | 
				
			||||||
		objectConvertor: o,
 | 
							objectConvertor: o,
 | 
				
			||||||
@@ -49,7 +49,7 @@ func NewVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.Gr
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewCRDVersionConverter builds a VersionConverter for CRDs from a TypeConverter and an ObjectConvertor.
 | 
					// NewCRDVersionConverter builds a VersionConverter for CRDs from a TypeConverter and an ObjectConvertor.
 | 
				
			||||||
func NewCRDVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter {
 | 
					func newCRDVersionConverter(t TypeConverter, o runtime.ObjectConvertor, h schema.GroupVersion) merge.Converter {
 | 
				
			||||||
	return &versionConverter{
 | 
						return &versionConverter{
 | 
				
			||||||
		typeConverter:   t,
 | 
							typeConverter:   t,
 | 
				
			||||||
		objectConvertor: o,
 | 
							objectConvertor: o,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,24 +14,29 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package fieldmanager_test
 | 
					package fieldmanager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"path/filepath"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"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/kube-openapi/pkg/util/proto"
 | 
						"k8s.io/kube-openapi/pkg/util/proto"
 | 
				
			||||||
 | 
						prototesting "k8s.io/kube-openapi/pkg/util/proto/testing"
 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var testSchema = prototesting.Fake{
 | 
				
			||||||
 | 
						Path: filepath.Join("testdata", "swagger.json"),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestVersionConverter tests the version converter
 | 
					// TestVersionConverter tests the version converter
 | 
				
			||||||
func TestVersionConverter(t *testing.T) {
 | 
					func TestVersionConverter(t *testing.T) {
 | 
				
			||||||
	d, err := fakeSchema2.OpenAPISchema()
 | 
						d, err := testSchema.OpenAPISchema()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
							t.Fatalf("Failed to parse OpenAPI schema: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -39,7 +44,7 @@ func TestVersionConverter(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Failed to build OpenAPI models: %v", err)
 | 
							t.Fatalf("Failed to build OpenAPI models: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	tc, err := fieldmanager.NewTypeConverter(m, false)
 | 
						tc, err := NewTypeConverter(m, false)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("Failed to build TypeConverter: %v", err)
 | 
							t.Fatalf("Failed to build TypeConverter: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -47,7 +52,7 @@ func TestVersionConverter(t *testing.T) {
 | 
				
			|||||||
		gvkForVersion("v1beta1"): objForGroupVersion("apps/v1beta1"),
 | 
							gvkForVersion("v1beta1"): objForGroupVersion("apps/v1beta1"),
 | 
				
			||||||
		gvkForVersion("v1"):      objForGroupVersion("apps/v1"),
 | 
							gvkForVersion("v1"):      objForGroupVersion("apps/v1"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vc := fieldmanager.NewVersionConverter(tc, oc, schema.GroupVersion{Group: "apps", Version: runtime.APIVersionInternal})
 | 
						vc := newVersionConverter(tc, oc, schema.GroupVersion{Group: "apps", Version: runtime.APIVersionInternal})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	input, err := tc.ObjectToTyped(objForGroupVersion("apps/v1beta1"))
 | 
						input, err := tc.ObjectToTyped(objForGroupVersion("apps/v1beta1"))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user