mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 10:20:51 +00:00
Merge pull request #114835 from apelisse/testfield-configurable-typeconverter
Give TypeConverter to TestFieldManager
This commit is contained in:
commit
cd1115ced0
@ -48,7 +48,7 @@ func (*fakeManager) Apply(_, _ runtime.Object, _ fieldmanager.Managed, _ string,
|
||||
}
|
||||
|
||||
func TestCapManagersManagerMergesEntries(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"),
|
||||
"",
|
||||
func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewCapManagersManager(m, 3)
|
||||
@ -114,7 +114,7 @@ func TestCapManagersManagerMergesEntries(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCapUpdateManagers(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"),
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"),
|
||||
"",
|
||||
func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewCapManagersManager(m, 3)
|
||||
|
@ -17,9 +17,11 @@ limitations under the License.
|
||||
package fieldmanager_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
@ -34,15 +36,34 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
yamlutil "k8s.io/apimachinery/pkg/util/yaml"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanagertest"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
|
||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
var fakeTypeConverter = func() fieldmanager.TypeConverter {
|
||||
data, err := ioutil.ReadFile(filepath.Join(strings.Repeat(".."+string(filepath.Separator), 8),
|
||||
"api", "openapi-spec", "swagger.json"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
spec := spec.Swagger{}
|
||||
if err := json.Unmarshal(data, &spec); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
typeConverter, err := fieldmanager.NewTypeConverter(&spec, false)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return typeConverter
|
||||
}()
|
||||
|
||||
// TestUpdateApplyConflict tests that applying to an object, which
|
||||
// wasn't created by apply, will give conflicts
|
||||
func TestUpdateApplyConflict(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
patch := []byte(`{
|
||||
"apiVersion": "apps/v1",
|
||||
@ -103,7 +124,7 @@ func TestUpdateApplyConflict(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestApplyStripsFields(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
newObj := &unstructured.Unstructured{
|
||||
Object: map[string]interface{}{
|
||||
@ -135,7 +156,7 @@ func TestApplyStripsFields(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVersionCheck(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -175,7 +196,7 @@ func TestVersionCheck(t *testing.T) {
|
||||
}
|
||||
}
|
||||
func TestVersionCheckDoesNotPanic(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -214,7 +235,7 @@ func TestVersionCheckDoesNotPanic(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestApplyDoesNotStripLabels(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -268,7 +289,7 @@ func TestApplyNewObject(t *testing.T) {
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.gvk.String(), func(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(test.gvk)
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, test.gvk)
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal(test.obj, &appliedObj.Object); err != nil {
|
||||
@ -306,7 +327,7 @@ func BenchmarkNewObject(b *testing.B) {
|
||||
}
|
||||
for _, test := range tests {
|
||||
b.Run(test.gvk.Kind, func(b *testing.B) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(test.gvk)
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, test.gvk)
|
||||
|
||||
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion())
|
||||
newObj, err := runtime.Decode(decoder, test.obj)
|
||||
@ -412,8 +433,6 @@ func BenchmarkConvertObjectToTyped(b *testing.B) {
|
||||
for _, test := range tests {
|
||||
b.Run(test.gvk.Kind, func(b *testing.B) {
|
||||
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion())
|
||||
typeConverter := fieldmanagertest.NewBuiltinTypeConverter()
|
||||
|
||||
structured, err := runtime.Decode(decoder, test.obj)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to parse yaml object: %v", err)
|
||||
@ -422,7 +441,7 @@ func BenchmarkConvertObjectToTyped(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
_, err := typeConverter.ObjectToTyped(structured)
|
||||
_, err := fakeTypeConverter.ObjectToTyped(structured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
@ -435,7 +454,7 @@ func BenchmarkConvertObjectToTyped(b *testing.B) {
|
||||
b.ReportAllocs()
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
_, err := typeConverter.ObjectToTyped(unstructured)
|
||||
_, err := fakeTypeConverter.ObjectToTyped(unstructured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
@ -473,17 +492,15 @@ func BenchmarkCompare(b *testing.B) {
|
||||
for _, test := range tests {
|
||||
b.Run(test.gvk.Kind, func(b *testing.B) {
|
||||
decoder := serializer.NewCodecFactory(scheme).UniversalDecoder(test.gvk.GroupVersion())
|
||||
typeConverter := fieldmanagertest.NewBuiltinTypeConverter()
|
||||
|
||||
structured, err := runtime.Decode(decoder, test.obj)
|
||||
if err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
tv1, err := typeConverter.ObjectToTyped(structured)
|
||||
tv1, err := fakeTypeConverter.ObjectToTyped(structured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
tv2, err := typeConverter.ObjectToTyped(structured)
|
||||
tv2, err := fakeTypeConverter.ObjectToTyped(structured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
@ -499,11 +516,11 @@ func BenchmarkCompare(b *testing.B) {
|
||||
})
|
||||
|
||||
unstructured := toUnstructured(b, structured)
|
||||
utv1, err := typeConverter.ObjectToTyped(unstructured)
|
||||
utv1, err := fakeTypeConverter.ObjectToTyped(unstructured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
utv2, err := typeConverter.ObjectToTyped(unstructured)
|
||||
utv2, err := fakeTypeConverter.ObjectToTyped(unstructured)
|
||||
if err != nil {
|
||||
b.Errorf("Error in ObjectToTyped: %v", err)
|
||||
}
|
||||
@ -523,7 +540,7 @@ func BenchmarkCompare(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkRepeatedUpdate(b *testing.B) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
podBytes := getObjectBytes("pod.yaml")
|
||||
|
||||
var obj *corev1.Pod
|
||||
@ -562,7 +579,7 @@ func BenchmarkRepeatedUpdate(b *testing.B) {
|
||||
}
|
||||
|
||||
func TestApplyFailsWithManagedFields(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -587,7 +604,7 @@ func TestApplyFailsWithManagedFields(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
appliedObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -610,7 +627,7 @@ func TestApplySuccessWithNoManagedFields(t *testing.T) {
|
||||
|
||||
// Run an update and apply, and make sure that nothing has changed.
|
||||
func TestNoOpChanges(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -661,7 +678,7 @@ func TestNoOpChanges(t *testing.T) {
|
||||
// Tests that one can reset the managedFields by sending either an empty
|
||||
// list
|
||||
func TestResetManagedFieldsEmptyList(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -702,7 +719,7 @@ func TestResetManagedFieldsEmptyList(t *testing.T) {
|
||||
|
||||
// Tests that one can reset the managedFields by sending either a list with one empty item.
|
||||
func TestResetManagedFieldsEmptyItem(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -742,7 +759,7 @@ func TestResetManagedFieldsEmptyItem(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestServerSideApplyWithInvalidLastApplied(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
// create object with client-side apply
|
||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
@ -821,7 +838,7 @@ spec:
|
||||
}
|
||||
|
||||
func TestInteropForClientSideApplyAndServerSideApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
// create object with client-side apply
|
||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
@ -905,7 +922,7 @@ spec:
|
||||
}
|
||||
|
||||
func TestNoTrackManagedFieldsForClientSideApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
// create object
|
||||
newObj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
@ -1085,7 +1102,7 @@ func getLastApplied(obj runtime.Object) (string, error) {
|
||||
}
|
||||
|
||||
func TestUpdateViaSubresources(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "scale", nil)
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "scale", nil)
|
||||
|
||||
obj := &unstructured.Unstructured{Object: map[string]interface{}{}}
|
||||
if err := yaml.Unmarshal([]byte(`{
|
||||
@ -1140,7 +1157,7 @@ func TestUpdateViaSubresources(t *testing.T) {
|
||||
// Ensures that a no-op Apply does not mutate managed fields
|
||||
func TestApplyDoesNotChangeManagedFields(t *testing.T) {
|
||||
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter,
|
||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
newObj := &unstructured.Unstructured{
|
||||
Object: map[string]interface{}{},
|
||||
@ -1234,7 +1251,7 @@ func TestApplyDoesNotChangeManagedFields(t *testing.T) {
|
||||
// Ensures that a no-op Update does not mutate managed fields
|
||||
func TestUpdateDoesNotChangeManagedFields(t *testing.T) {
|
||||
originalManagedFields := []metav1.ManagedFieldsEntry{}
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter,
|
||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
newObj := &unstructured.Unstructured{
|
||||
Object: map[string]interface{}{},
|
||||
@ -1306,7 +1323,7 @@ func TestUpdateDoesNotChangeManagedFields(t *testing.T) {
|
||||
// This test makes sure that the liveObject during a patch does not mutate
|
||||
// its managed fields.
|
||||
func TestLiveObjectManagedFieldsNotRemoved(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter,
|
||||
schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
newObj := &unstructured.Unstructured{
|
||||
Object: map[string]interface{}{},
|
||||
|
@ -17,12 +17,8 @@ limitations under the License.
|
||||
package fieldmanagertest
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@ -30,36 +26,11 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager"
|
||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
|
||||
"sigs.k8s.io/structured-merge-diff/v4/merge"
|
||||
"sigs.k8s.io/structured-merge-diff/v4/typed"
|
||||
)
|
||||
|
||||
var builtinConverter = func() fieldmanager.TypeConverter {
|
||||
data, err := ioutil.ReadFile(filepath.Join(
|
||||
strings.Repeat(".."+string(filepath.Separator), 8),
|
||||
"api", "openapi-spec", "swagger.json"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
spec := spec.Swagger{}
|
||||
if err := json.Unmarshal(data, &spec); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
tc, err := fieldmanager.NewTypeConverter(&spec, false)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("Failed to build TypeConverter: %v", err))
|
||||
}
|
||||
return tc
|
||||
}()
|
||||
|
||||
// NewBuiltinTypeConverter creates a TypeConverter with all the built-in
|
||||
// types defined, given the committed kubernetes swagger.json.
|
||||
func NewBuiltinTypeConverter() fieldmanager.TypeConverter {
|
||||
return builtinConverter
|
||||
}
|
||||
|
||||
type fakeObjectConvertor struct {
|
||||
converter merge.Converter
|
||||
apiVersion fieldpath.APIVersion
|
||||
@ -132,13 +103,12 @@ type TestFieldManager struct {
|
||||
|
||||
// NewDefaultTestFieldManager returns a new TestFieldManager built for
|
||||
// the given gvk, on the main resource.
|
||||
func NewDefaultTestFieldManager(gvk schema.GroupVersionKind) TestFieldManager {
|
||||
return NewTestFieldManager(gvk, "", nil)
|
||||
func NewDefaultTestFieldManager(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind) TestFieldManager {
|
||||
return NewTestFieldManager(typeConverter, gvk, "", nil)
|
||||
}
|
||||
|
||||
// NewTestFieldManager creates a new manager for the given GVK.
|
||||
func NewTestFieldManager(gvk schema.GroupVersionKind, subresource string, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager {
|
||||
typeConverter := NewBuiltinTypeConverter()
|
||||
func NewTestFieldManager(typeConverter fieldmanager.TypeConverter, gvk schema.GroupVersionKind, subresource string, chainFieldManager func(fieldmanager.Manager) fieldmanager.Manager) TestFieldManager {
|
||||
apiVersion := fieldpath.APIVersion(gvk.GroupVersion().String())
|
||||
objectConverter := &fakeObjectConvertor{sameVersionConverter{}, apiVersion}
|
||||
f, err := fieldmanager.NewStructuredMergeManager(
|
||||
|
@ -44,7 +44,7 @@ type testArgs struct {
|
||||
// created with the client-side apply last-applied annotation
|
||||
// will not give conflicts
|
||||
func TestApplyUsingLastAppliedAnnotation(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"))
|
||||
|
||||
tests := []testArgs{
|
||||
{
|
||||
@ -564,7 +564,7 @@ spec:
|
||||
}
|
||||
|
||||
func TestServiceApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Service"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Service"))
|
||||
|
||||
tests := []testArgs{
|
||||
{
|
||||
@ -675,7 +675,7 @@ spec:
|
||||
}
|
||||
|
||||
func TestReplicationControllerApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ReplicationController"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ReplicationController"))
|
||||
|
||||
tests := []testArgs{
|
||||
{
|
||||
@ -738,7 +738,7 @@ spec:
|
||||
}
|
||||
|
||||
func TestPodApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"))
|
||||
|
||||
tests := []testArgs{
|
||||
{
|
||||
|
@ -32,7 +32,7 @@ import (
|
||||
)
|
||||
|
||||
func TestLastAppliedUpdater(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("apps/v1", "Deployment"),
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("apps/v1", "Deployment"),
|
||||
"",
|
||||
func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewLastAppliedUpdater(m)
|
||||
@ -189,7 +189,7 @@ func TestLargeLastApplied(t *testing.T) {
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"),
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"),
|
||||
"",
|
||||
func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewLastAppliedUpdater(m)
|
||||
|
@ -36,7 +36,7 @@ import (
|
||||
|
||||
func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = updateObject(&f, "fieldmanager_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -77,7 +77,7 @@ func TestManagedFieldsUpdateDoesModifyTime(t *testing.T) {
|
||||
|
||||
func TestManagedFieldsApplyDoesModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = applyObject(&f, "fieldmanager_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -118,7 +118,7 @@ func TestManagedFieldsApplyDoesModifyTime(t *testing.T) {
|
||||
|
||||
func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = updateObject(&f, "fieldmanager_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -159,7 +159,7 @@ func TestManagedFieldsUpdateWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||
|
||||
func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = applyObject(&f, "fieldmanager_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -200,7 +200,7 @@ func TestManagedFieldsApplyWithoutChangesDoesNotModifyTime(t *testing.T) {
|
||||
|
||||
func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = updateObject(&f, "fieldmanager_a_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -263,7 +263,7 @@ func TestNonManagedFieldsUpdateDoesNotModifyTime(t *testing.T) {
|
||||
|
||||
func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = applyObject(&f, "fieldmanager_a_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -326,7 +326,7 @@ func TestNonManagedFieldsApplyDoesNotModifyTime(t *testing.T) {
|
||||
|
||||
func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = updateObject(&f, "fieldmanager_a_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
@ -377,7 +377,7 @@ func TestTakingOverManagedFieldsDuringUpdateDoesNotModifyPreviousManagerTime(t *
|
||||
|
||||
func TestTakingOverManagedFieldsDuringApplyDoesNotModifyPreviousManagerTime(t *testing.T) {
|
||||
var err error
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
f := fieldmanagertest.NewDefaultTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "ConfigMap"))
|
||||
|
||||
err = applyObject(&f, "fieldmanager_a_test", []byte(`{
|
||||
"apiVersion": "v1",
|
||||
|
@ -30,7 +30,7 @@ import (
|
||||
)
|
||||
|
||||
func TestNoUpdateBeforeFirstApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewSkipNonAppliedManager(
|
||||
m,
|
||||
fieldmanagertest.NewFakeObjectCreater(),
|
||||
@ -70,7 +70,7 @@ func TestNoUpdateBeforeFirstApply(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUpdateBeforeFirstApply(t *testing.T) {
|
||||
f := fieldmanagertest.NewTestFieldManager(schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
f := fieldmanagertest.NewTestFieldManager(fakeTypeConverter, schema.FromAPIVersionAndKind("v1", "Pod"), "", func(m fieldmanager.Manager) fieldmanager.Manager {
|
||||
return fieldmanager.NewSkipNonAppliedManager(
|
||||
m,
|
||||
fieldmanagertest.NewFakeObjectCreater(),
|
||||
|
@ -32,7 +32,7 @@ import (
|
||||
"k8s.io/kube-openapi/pkg/validation/spec"
|
||||
)
|
||||
|
||||
var testSchema = func() *spec.Swagger {
|
||||
var testTypeConverter = func() fieldmanager.TypeConverter {
|
||||
data, err := ioutil.ReadFile(filepath.Join("testdata", "swagger.json"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -41,15 +41,14 @@ var testSchema = func() *spec.Swagger {
|
||||
if err := json.Unmarshal(data, &spec); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &spec
|
||||
typeConverter, err := fieldmanager.NewTypeConverter(&spec, false)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return typeConverter
|
||||
}()
|
||||
|
||||
func TestTypeConverter(t *testing.T) {
|
||||
tc, err := fieldmanager.NewTypeConverter(testSchema, false)
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to build TypeConverter: %v", err)
|
||||
}
|
||||
|
||||
dtc := fieldmanager.DeducedTypeConverter{}
|
||||
|
||||
testCases := []struct {
|
||||
@ -119,7 +118,7 @@ spec:
|
||||
|
||||
for _, testCase := range testCases {
|
||||
t.Run(fmt.Sprintf("%v ObjectToTyped with TypeConverter", testCase.name), func(t *testing.T) {
|
||||
testObjectToTyped(t, tc, testCase.yaml)
|
||||
testObjectToTyped(t, testTypeConverter, testCase.yaml)
|
||||
})
|
||||
t.Run(fmt.Sprintf("%v ObjectToTyped with DeducedTypeConverter", testCase.name), func(t *testing.T) {
|
||||
testObjectToTyped(t, dtc, testCase.yaml)
|
||||
@ -177,18 +176,13 @@ spec:
|
||||
b.Fatalf("Failed to parse yaml object: %v", err)
|
||||
}
|
||||
|
||||
tc, err := fieldmanager.NewTypeConverter(testSchema, false)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to build TypeConverter: %v", err)
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
b.ReportAllocs()
|
||||
|
||||
var r *typed.TypedValue
|
||||
for i := 0; i < b.N; i++ {
|
||||
var err error
|
||||
r, err = tc.ObjectToTyped(obj)
|
||||
r, err = testTypeConverter.ObjectToTyped(obj)
|
||||
if err != nil {
|
||||
b.Fatalf("Failed to convert object to typed: %v", err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user