mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 04:06:03 +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 (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
func ErrBadArgType(expected, actual string) error {
|
||||
return fmt.Errorf("expected a %s, but received a %s", expected, actual)
|
||||
func ErrBadArgType(expected, actual interface{}) error {
|
||||
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 {
|
||||
|
@ -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) {
|
||||
m, ok := listOfMaps[index].(map[string]interface{})
|
||||
if !ok {
|
||||
t := reflect.TypeOf(listOfMaps[index])
|
||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.Kind().String())
|
||||
return nil, nil, mergepatch.ErrBadArgType(m, listOfMaps[index])
|
||||
}
|
||||
|
||||
val, ok := m[mergeKey]
|
||||
@ -568,7 +567,7 @@ func StrategicMergeMapPatch(original, patch JSONMap, dataStruct interface{}) (JS
|
||||
|
||||
func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
||||
if dataStruct == nil {
|
||||
return nil, mergepatch.ErrBadArgType("struct", "nil")
|
||||
return nil, mergepatch.ErrBadArgKind(struct{}{}, nil)
|
||||
}
|
||||
|
||||
t := reflect.TypeOf(dataStruct)
|
||||
@ -577,7 +576,7 @@ func getTagStructType(dataStruct interface{}) (reflect.Type, error) {
|
||||
}
|
||||
|
||||
if t.Kind() != reflect.Struct {
|
||||
return nil, mergepatch.ErrBadArgType("struct", t.Kind().String())
|
||||
return nil, mergepatch.ErrBadArgKind(struct{}{}, dataStruct)
|
||||
}
|
||||
|
||||
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) {
|
||||
typedOriginal, ok := original.(map[string]interface{})
|
||||
if !ok {
|
||||
t := reflect.TypeOf(original)
|
||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.String())
|
||||
return nil, nil, mergepatch.ErrBadArgType(typedOriginal, original)
|
||||
}
|
||||
typedPatch, ok := patch.(map[string]interface{})
|
||||
if !ok {
|
||||
t := reflect.TypeOf(patch)
|
||||
return nil, nil, mergepatch.ErrBadArgType("map[string]interface{}", t.String())
|
||||
return nil, nil, mergepatch.ErrBadArgType(typedPatch, patch)
|
||||
}
|
||||
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) {
|
||||
typedOriginal, ok := original.([]interface{})
|
||||
if !ok {
|
||||
t := reflect.TypeOf(original)
|
||||
return nil, nil, mergepatch.ErrBadArgType("[]interface{}", t.String())
|
||||
return nil, nil, mergepatch.ErrBadArgType(typedOriginal, original)
|
||||
}
|
||||
typedPatch, ok := patch.([]interface{})
|
||||
if !ok {
|
||||
t := reflect.TypeOf(patch)
|
||||
return nil, nil, mergepatch.ErrBadArgType("[]interface{}", t.String())
|
||||
return nil, nil, mergepatch.ErrBadArgType(typedPatch, patch)
|
||||
}
|
||||
return typedOriginal, typedPatch, nil
|
||||
}
|
||||
|
@ -1998,9 +1998,9 @@ func TestStrategicMergePatch(t *testing.T) {
|
||||
testStrategicMergePatchWithCustomArguments(t, "bad patch",
|
||||
"{}", "<THIS IS NOT JSON>", mergeItem, mergepatch.ErrBadJSONDoc)
|
||||
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",
|
||||
"{}", "{}", nil, mergepatch.ErrBadArgType("struct", "nil"))
|
||||
"{}", "{}", nil, mergepatch.ErrBadArgKind(struct{}{}, nil))
|
||||
|
||||
tc := StrategicMergePatchTestCases{}
|
||||
err := yaml.Unmarshal(createStrategicMergePatchTestCaseData, &tc)
|
||||
|
Loading…
Reference in New Issue
Block a user