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