mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Merge pull request #46057 from mengqiy/improvePatchTypeError
Automatic merge from submit-queue improve type assertion error Per discussion https://github.com/kubernetes/kubernetes/pull/45980#issuecomment-302524829. ```release-note NONE ```
This commit is contained in:
commit
4d6ef25f64
@ -19,6 +19,7 @@ package mergepatch
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -31,8 +32,25 @@ func ErrNoMergeKey(m map[string]interface{}, k string) error {
|
|||||||
return fmt.Errorf("map: %v does not contain declared merge key: %s", m, k)
|
return fmt.Errorf("map: %v does not contain declared merge key: %s", m, k)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ErrBadArgType(expected, actual string) error {
|
func ErrBadArgType(expected, actual interface{}) error {
|
||||||
return fmt.Errorf("expected a %s, but received a %s", expected, actual)
|
return fmt.Errorf("expected a %s, but received a %s",
|
||||||
|
reflect.TypeOf(expected),
|
||||||
|
reflect.TypeOf(actual))
|
||||||
|
}
|
||||||
|
|
||||||
|
func ErrBadArgKind(expected, actual interface{}) error {
|
||||||
|
var expectedKindString, actualKindString string
|
||||||
|
if expected == nil {
|
||||||
|
expectedKindString = "nil"
|
||||||
|
} else {
|
||||||
|
expectedKindString = reflect.TypeOf(expected).Kind().String()
|
||||||
|
}
|
||||||
|
if actual == nil {
|
||||||
|
actualKindString = "nil"
|
||||||
|
} else {
|
||||||
|
actualKindString = reflect.TypeOf(actual).Kind().String()
|
||||||
|
}
|
||||||
|
return fmt.Errorf("expected a %s, but received a %s", expectedKindString, actualKindString)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ErrBadPatchType(t interface{}, m map[string]interface{}) error {
|
func ErrBadPatchType(t interface{}, m map[string]interface{}) error {
|
||||||
|
@ -505,8 +505,7 @@ func diffListsOfMaps(original, modified []interface{}, t reflect.Type, mergeKey
|
|||||||
func getMapAndMergeKeyValueByIndex(index int, mergeKey string, listOfMaps []interface{}) (map[string]interface{}, interface{}, error) {
|
func getMapAndMergeKeyValueByIndex(index int, mergeKey string, listOfMaps []interface{}) (map[string]interface{}, interface{}, error) {
|
||||||
m, ok := listOfMaps[index].(map[string]interface{})
|
m, ok := listOfMaps[index].(map[string]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
t := reflect.TypeOf(listOfMaps[index])
|
return nil, nil, mergepatch.ErrBadArgType(m, listOfMaps[index])
|
||||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.Kind().String())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val, ok := m[mergeKey]
|
val, ok := m[mergeKey]
|
||||||
@ -568,7 +567,7 @@ func StrategicMergeMapPatch(original, patch JSONMap, dataStruct interface{}) (JS
|
|||||||
|
|
||||||
func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
||||||
if dataStruct == nil {
|
if dataStruct == nil {
|
||||||
return nil, mergepatch.ErrBadArgType("struct", "nil")
|
return nil, mergepatch.ErrBadArgKind(struct{}{}, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
t := reflect.TypeOf(dataStruct)
|
t := reflect.TypeOf(dataStruct)
|
||||||
@ -577,7 +576,7 @@ func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if t.Kind() != reflect.Struct {
|
if t.Kind() != reflect.Struct {
|
||||||
return nil, mergepatch.ErrBadArgType("struct", t.Kind().String())
|
return nil, mergepatch.ErrBadArgKind(struct{}{}, dataStruct)
|
||||||
}
|
}
|
||||||
|
|
||||||
return t, nil
|
return t, nil
|
||||||
@ -1419,13 +1418,11 @@ func CreateDeleteDirective(mergeKey string, mergeKeyValue interface{}) map[strin
|
|||||||
func mapTypeAssertion(original, patch interface{}) (map[string]interface{}, map[string]interface{}, error) {
|
func mapTypeAssertion(original, patch interface{}) (map[string]interface{}, map[string]interface{}, error) {
|
||||||
typedOriginal, ok := original.(map[string]interface{})
|
typedOriginal, ok := original.(map[string]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
t := reflect.TypeOf(original)
|
return nil, nil, mergepatch.ErrBadArgType(typedOriginal, original)
|
||||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.String())
|
|
||||||
}
|
}
|
||||||
typedPatch, ok := patch.(map[string]interface{})
|
typedPatch, ok := patch.(map[string]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
t := reflect.TypeOf(patch)
|
return nil, nil, mergepatch.ErrBadArgType(typedPatch, patch)
|
||||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.String())
|
|
||||||
}
|
}
|
||||||
return typedOriginal, typedPatch, nil
|
return typedOriginal, typedPatch, nil
|
||||||
}
|
}
|
||||||
@ -1433,13 +1430,11 @@ func mapTypeAssertion(original, patch interface{}) (map[string]interface{}, map[
|
|||||||
func sliceTypeAssertion(original, patch interface{}) ([]interface{}, []interface{}, error) {
|
func sliceTypeAssertion(original, patch interface{}) ([]interface{}, []interface{}, error) {
|
||||||
typedOriginal, ok := original.([]interface{})
|
typedOriginal, ok := original.([]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
t := reflect.TypeOf(original)
|
return nil, nil, mergepatch.ErrBadArgType(typedOriginal, original)
|
||||||
return nil, nil, mergepatch.ErrBadArgType("[]interface{}", t.String())
|
|
||||||
}
|
}
|
||||||
typedPatch, ok := patch.([]interface{})
|
typedPatch, ok := patch.([]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
t := reflect.TypeOf(patch)
|
return nil, nil, mergepatch.ErrBadArgType(typedPatch, patch)
|
||||||
return nil, nil, mergepatch.ErrBadArgType("[]interface{}", t.String())
|
|
||||||
}
|
}
|
||||||
return typedOriginal, typedPatch, nil
|
return typedOriginal, typedPatch, nil
|
||||||
}
|
}
|
||||||
|
@ -1998,9 +1998,9 @@ func TestStrategicMergePatch(t *testing.T) {
|
|||||||
testStrategicMergePatchWithCustomArguments(t, "bad patch",
|
testStrategicMergePatchWithCustomArguments(t, "bad patch",
|
||||||
"{}", "<THIS IS NOT JSON>", mergeItem, mergepatch.ErrBadJSONDoc)
|
"{}", "<THIS IS NOT JSON>", mergeItem, mergepatch.ErrBadJSONDoc)
|
||||||
testStrategicMergePatchWithCustomArguments(t, "bad struct",
|
testStrategicMergePatchWithCustomArguments(t, "bad struct",
|
||||||
"{}", "{}", []byte("<THIS IS NOT A STRUCT>"), mergepatch.ErrBadArgType("struct", "slice"))
|
"{}", "{}", []byte("<THIS IS NOT A STRUCT>"), mergepatch.ErrBadArgKind(struct{}{}, []byte{}))
|
||||||
testStrategicMergePatchWithCustomArguments(t, "nil struct",
|
testStrategicMergePatchWithCustomArguments(t, "nil struct",
|
||||||
"{}", "{}", nil, mergepatch.ErrBadArgType("struct", "nil"))
|
"{}", "{}", nil, mergepatch.ErrBadArgKind(struct{}{}, nil))
|
||||||
|
|
||||||
tc := StrategicMergePatchTestCases{}
|
tc := StrategicMergePatchTestCases{}
|
||||||
err := yaml.Unmarshal(createStrategicMergePatchTestCaseData, &tc)
|
err := yaml.Unmarshal(createStrategicMergePatchTestCaseData, &tc)
|
||||||
|
Loading…
Reference in New Issue
Block a user