diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/ratcheting_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/ratcheting_test.go index baf52e439df..e71759d4b50 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/ratcheting_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/ratcheting_test.go @@ -165,12 +165,7 @@ func (a applyPatchOperation) Do(ctx *ratchetingTestContext) error { patch := &unstructured.Unstructured{} if obj, ok := a.patch.(map[string]interface{}); ok { - patch.Object = map[string]interface{}{} - - // Copy the map at the top level to avoid modifying the original. - for k, v := range obj { - patch.Object[k] = v - } + patch.Object = runtime.DeepCopyJSON(obj) } else if str, ok := a.patch.(string); ok { str = FixTabsOrDie(str) if err := utilyaml.NewYAMLOrJSONDecoder(strings.NewReader(str), len(str)).Decode(&patch.Object); err != nil { @@ -500,23 +495,23 @@ func TestRatchetingFunctionality(t *testing.T) { myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "hasMinimum": 0, - "hasMaximum": 1000, - "hasMinimumAndMaximum": 50, + "hasMinimum": int64(0), + "hasMaximum": int64(1000), + "hasMinimumAndMaximum": int64(50), }}, patchMyCRDV1Beta1Schema{ "Add stricter minimums and maximums that violate the previous object", map[string]interface{}{ "properties": map[string]interface{}{ "hasMinimum": map[string]interface{}{ - "minimum": 10, + "minimum": int64(10), }, "hasMaximum": map[string]interface{}{ - "maximum": 20, + "maximum": int64(20), }, "hasMinimumAndMaximum": map[string]interface{}{ - "minimum": 10, - "maximum": 20, + "minimum": int64(10), + "maximum": int64(20), }, "noRestrictions": map[string]interface{}{ "type": "integer", @@ -528,33 +523,33 @@ func TestRatchetingFunctionality(t *testing.T) { myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "noRestrictions": 50, + "noRestrictions": int64(50), }}, expectError{ applyPatchOperation{ "Change a single old field to be invalid", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "hasMinimum": 5, + "hasMinimum": int64(5), }}, }, expectError{ applyPatchOperation{ "Change multiple old fields to be invalid", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "hasMinimum": 5, - "hasMaximum": 21, + "hasMinimum": int64(5), + "hasMaximum": int64(21), }}, }, applyPatchOperation{ "Change single old field to be valid", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "hasMinimum": 11, + "hasMinimum": int64(11), }}, applyPatchOperation{ "Change multiple old fields to be valid", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ - "hasMaximum": 19, - "hasMinimumAndMaximum": 15, + "hasMaximum": int64(19), + "hasMinimumAndMaximum": int64(15), }}, }, }, @@ -633,8 +628,8 @@ func TestRatchetingFunctionality(t *testing.T) { "Create an instance", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "nums": map[string]interface{}{ - "num1": 1, - "num2": 1000000, + "num1": int64(1), + "num2": int64(1000000), }, "content": map[string]interface{}{ "k1": "some content", @@ -647,7 +642,7 @@ func TestRatchetingFunctionality(t *testing.T) { "properties": map[string]interface{}{ "nums": map[string]interface{}{ "additionalProperties": map[string]interface{}{ - "minimum": 1000, + "minimum": int64(1000), }, }, }, @@ -656,16 +651,16 @@ func TestRatchetingFunctionality(t *testing.T) { "updating validating field num2 to another validating value, but rachet invalid field num1", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "nums": map[string]interface{}{ - "num1": 1, - "num2": 2000, + "num1": int64(1), + "num2": int64(2000), }, }}, expectError{applyPatchOperation{ "update field num1 to different invalid value", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "nums": map[string]interface{}{ - "num1": 2, - "num2": 2000, + "num1": int64(2), + "num2": int64(2000), }, }}}, }, @@ -703,8 +698,8 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "restricted": map[string]interface{}{ - "minProperties": 1, - "maxProperties": 1, + "minProperties": int64(1), + "maxProperties": int64(1), }, }, }}, @@ -736,7 +731,7 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "restricted": map[string]interface{}{ - "minProperties": 2, + "minProperties": int64(2), "maxProperties": nil, }, }, @@ -766,7 +761,7 @@ func TestRatchetingFunctionality(t *testing.T) { "properties": map[string]interface{}{ "restricted": map[string]interface{}{ "minProperties": nil, - "maxProperties": 1, + "maxProperties": int64(1), }, }, }}, @@ -820,7 +815,7 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "array": map[string]interface{}{ - "minItems": 10, + "minItems": int64(10), }, }, }}, @@ -882,7 +877,7 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "array": map[string]interface{}{ - "maxItems": 1, + "maxItems": int64(1), }, }, }}, @@ -941,10 +936,10 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "minField": map[string]interface{}{ - "minLength": 10, + "minLength": int64(10), }, "maxField": map[string]interface{}{ - "maxLength": 15, + "maxLength": int64(15), }, }, }}, @@ -1141,17 +1136,17 @@ func TestRatchetingFunctionality(t *testing.T) { "field": []interface{}{ map[string]interface{}{ "name": "nginx", - "port": 443, + "port": int64(443), "field": "value", }, map[string]interface{}{ "name": "etcd", - "port": 2379, + "port": int64(2379), "field": "value", }, map[string]interface{}{ "name": "kube-apiserver", - "port": 6443, + "port": int64(6443), "field": "value", }, }, @@ -1161,7 +1156,7 @@ func TestRatchetingFunctionality(t *testing.T) { map[string]interface{}{ "properties": map[string]interface{}{ "field": map[string]interface{}{ - "maxItems": 2, + "maxItems": int64(2), }, }, }}, @@ -1171,17 +1166,17 @@ func TestRatchetingFunctionality(t *testing.T) { "field": []interface{}{ map[string]interface{}{ "name": "kube-apiserver", - "port": 6443, + "port": int64(6443), "field": "value", }, map[string]interface{}{ "name": "nginx", - "port": 443, + "port": int64(443), "field": "value", }, map[string]interface{}{ "name": "etcd", - "port": 2379, + "port": int64(2379), "field": "value", }, }, @@ -1193,22 +1188,22 @@ func TestRatchetingFunctionality(t *testing.T) { "field": []interface{}{ map[string]interface{}{ "name": "kube-apiserver", - "port": 6443, + "port": int64(6443), "field": "value", }, map[string]interface{}{ "name": "nginx", - "port": 443, + "port": int64(443), "field": "value", }, map[string]interface{}{ "name": "etcd", - "port": 2379, + "port": int64(2379), "field": "value", }, map[string]interface{}{ "name": "dev", - "port": 8080, + "port": int64(8080), "field": "value", }, }, @@ -1222,7 +1217,7 @@ func TestRatchetingFunctionality(t *testing.T) { "items": map[string]interface{}{ "properties": map[string]interface{}{ "port": map[string]interface{}{ - "multipleOf": 2, + "multipleOf": int64(2), }, }, }, @@ -1236,17 +1231,17 @@ func TestRatchetingFunctionality(t *testing.T) { "field": []interface{}{ map[string]interface{}{ "name": "nginx", - "port": 443, + "port": int64(443), "field": "value", }, map[string]interface{}{ "name": "etcd", - "port": 2379, + "port": int64(2379), "field": "value", }, map[string]interface{}{ "name": "kube-apiserver", - "port": 6443, + "port": int64(6443), "field": "value", }, }, @@ -1258,22 +1253,22 @@ func TestRatchetingFunctionality(t *testing.T) { "field": []interface{}{ map[string]interface{}{ "name": "nginx", - "port": 443, + "port": int64(443), "field": "value", }, map[string]interface{}{ "name": "etcd", - "port": 2379, + "port": int64(2379), "field": "value", }, map[string]interface{}{ "name": "kube-apiserver", - "port": 6443, + "port": int64(6443), "field": "this is a changed value for an an invalid but grandfathered key", }, map[string]interface{}{ "name": "dev", - "port": 8080, + "port": int64(8080), "field": "value", }, }, @@ -1316,7 +1311,7 @@ func TestRatchetingFunctionality(t *testing.T) { "values": map[string]interface{}{ "items": map[string]interface{}{ "additionalProperties": map[string]interface{}{ - "minLength": 6, + "minLength": int64(6), }, }, }, @@ -1519,15 +1514,15 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "a string", - "intField": 5, + "intField": int64(5), }, "object2": map[string]interface{}{ "stringField": "another string", - "intField": 15, + "intField": int64(15), }, "object3": map[string]interface{}{ "stringField": "a third string", - "intField": 7, + "intField": int64(7), }, }, }}, @@ -1557,19 +1552,19 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "a string", - "intField": 5, + "intField": int64(5), }, "object2": map[string]interface{}{ "stringField": "another string", - "intField": 15, + "intField": int64(15), }, "object3": map[string]interface{}{ "stringField": "a third string", - "intField": 7, + "intField": int64(7), }, "object4": map[string]interface{}{ "stringField": "k8s third string", - "intField": 7, + "intField": int64(7), }, }, }}, @@ -1579,12 +1574,12 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "a string", - "intField": 15, + "intField": int64(15), }, "object2": map[string]interface{}{ "stringField": "another string", - "intField": 10, - "otherIntField": 20, + "intField": int64(10), + "otherIntField": int64(20), }, }, }}, @@ -1629,11 +1624,11 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "a string", // invalid. even number length, no k8s prefix - "intField": 1000, + "intField": int64(1000), }, "object4": map[string]interface{}{ "stringField": "k8s third string", // invalid. even number length. ratcheted - "intField": 7000, + "intField": int64(7000), }, }, }}, @@ -1644,11 +1639,11 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "k8s third string", - "intField": 1000, + "intField": int64(1000), }, "object4": map[string]interface{}{ "stringField": "a string", - "intField": 7000, + "intField": int64(7000), }, }, }}}, @@ -1658,11 +1653,11 @@ func TestRatchetingFunctionality(t *testing.T) { "field": map[string]interface{}{ "object1": map[string]interface{}{ "stringField": "k8s a stringy", - "intField": 1000, + "intField": int64(1000), }, "object4": map[string]interface{}{ "stringField": "k8s third stringy", - "intField": 7000, + "intField": int64(7000), }, }, }}, @@ -1701,7 +1696,7 @@ func TestRatchetingFunctionality(t *testing.T) { "reate a list of numbers with duplicates using the old simple schema", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "values": map[string]interface{}{ - "dups": []interface{}{1, 2, 2, 3, 1000, 2000}, + "dups": []interface{}{int64(1), int64(2), int64(2), int64(3), int64(1000), int64(2000)}, }, }}, patchMyCRDV1Beta1Schema{ @@ -1720,15 +1715,15 @@ func TestRatchetingFunctionality(t *testing.T) { "change original without removing duplicates", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "values": map[string]interface{}{ - "dups": []interface{}{1, 2, 2, 3, 1000, 2000, 3}, + "dups": []interface{}{int64(1), int64(2), int64(2), int64(3), int64(1000), int64(2000), int64(3)}, }, }}}, expectError{applyPatchOperation{ "add another list with duplicates", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "values": map[string]interface{}{ - "dups": []interface{}{1, 2, 2, 3, 1000, 2000}, - "dups2": []interface{}{1, 2, 2, 3, 1000, 2000}, + "dups": []interface{}{int64(1), int64(2), int64(2), int64(3), int64(1000), int64(2000)}, + "dups2": []interface{}{int64(1), int64(2), int64(2), int64(3), int64(1000), int64(2000)}, }, }}}, // Can add a valid sibling field @@ -1738,8 +1733,8 @@ func TestRatchetingFunctionality(t *testing.T) { "add a valid sibling field", myCRDV1Beta1, myCRDInstanceName, map[string]interface{}{ "values": map[string]interface{}{ - "dups": []interface{}{1, 2, 2, 3, 1000, 2000}, - "otherField": []interface{}{1, 2, 3}, + "dups": []interface{}{int64(1), int64(2), int64(2), int64(3), int64(1000), int64(2000)}, + "otherField": []interface{}{int64(1), int64(2), int64(3)}, }, }}, // Can remove dups to make valid @@ -1752,8 +1747,8 @@ func TestRatchetingFunctionality(t *testing.T) { myCRDInstanceName, map[string]interface{}{ "values": map[string]interface{}{ - "dups": []interface{}{1, 3, 1000, 2000}, - "otherField": []interface{}{1, 2, 3}, + "dups": []interface{}{int64(1), int64(3), int64(1000), int64(2000)}, + "otherField": []interface{}{int64(1), int64(2), int64(3)}, }, }}, },