From db035d6ff8977a7dcf54613f59ad4949eafefe0b Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Tue, 22 Sep 2020 15:11:03 -0700 Subject: [PATCH 1/2] Show how null is inserted when struct is removed --- merge/nested_test.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/merge/nested_test.go b/merge/nested_test.go index 367adca2..1282de61 100644 --- a/merge/nested_test.go +++ b/merge/nested_test.go @@ -44,6 +44,15 @@ var nestedTypeParser = func() Parser { - name: mapOfMapsRecursive type: namedType: mapOfMapsRecursive + - name: recursiveStruct + type: + namedType: recursiveStruct +- name: recursiveStruct + map: + fields: + - name: name + type: + scalar: string - name: listOfLists list: elementType: @@ -500,6 +509,30 @@ func TestUpdateNestedType(t *testing.T) { ), }, }, + "recursiveStruct_remove_dangling": { + Ops: []Operation{ + Apply{ + Manager: "default", + Object: ` + recursiveStruct: + name: a + `, + APIVersion: "v1", + }, + Apply{ + Manager: "default", + Object: ` + `, + APIVersion: "v1", + }, + }, + // TODO: This is wrong, we're expecting an empty object. + Object: ` + recursiveStruct: null + `, + APIVersion: "v1", + Managed: fieldpath.ManagedFields{}, + }, } for name, test := range tests { From 6c65c03f04eb3b20ef42e18b9034ac372c9ffca7 Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Tue, 29 Sep 2020 14:12:37 -0700 Subject: [PATCH 2/2] Add example to show that sub-structures are owned --- merge/nested_test.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/merge/nested_test.go b/merge/nested_test.go index 1282de61..7adb78e9 100644 --- a/merge/nested_test.go +++ b/merge/nested_test.go @@ -509,7 +509,7 @@ func TestUpdateNestedType(t *testing.T) { ), }, }, - "recursiveStruct_remove_dangling": { + "recursiveStruct_remove_nested_dangling": { Ops: []Operation{ Apply{ Manager: "default", @@ -533,6 +533,31 @@ func TestUpdateNestedType(t *testing.T) { APIVersion: "v1", Managed: fieldpath.ManagedFields{}, }, + "recursiveStruct_remove_dangling": { + Ops: []Operation{ + Apply{ + Manager: "default", + Object: ` + recursiveStruct: + name: a + `, + APIVersion: "v1", + }, + Apply{ + Manager: "default", + Object: ` + recursiveStruct: + `, + APIVersion: "v1", + }, + }, + // If person applies the empty struct, we should keep it. + Object: ` + recursiveStruct: + `, + APIVersion: "v1", + Managed: fieldpath.ManagedFields{}, + }, } for name, test := range tests {