diff --git a/pkg/runtime/conversion.go b/pkg/runtime/conversion.go index 8b5cb419d29..5fb90d4eb66 100644 --- a/pkg/runtime/conversion.go +++ b/pkg/runtime/conversion.go @@ -67,13 +67,17 @@ func convertStringSliceToInt(input *[]string, out *int, s conversion.Scope) erro return nil } +// converStringSliceToBool will convert a string parameter to boolean. +// Only the absence of a value, a value of "false", or a value of "0" resolve to false. +// Any other value (including empty string) resolves to true. func convertStringSliceToBool(input *[]string, out *bool, s conversion.Scope) error { if len(*input) == 0 { *out = false + return nil } switch strings.ToLower((*input)[0]) { - case "true", "1": - *out = true + case "false", "0": + *out = false default: *out = true } diff --git a/pkg/runtime/conversion_test.go b/pkg/runtime/conversion_test.go index a5a2dcfe179..926ea95dee7 100644 --- a/pkg/runtime/conversion_test.go +++ b/pkg/runtime/conversion_test.go @@ -29,6 +29,7 @@ type InternalComplex struct { Integer int Integer64 int64 Int64 int64 + Bool bool } type ExternalComplex struct { @@ -37,6 +38,7 @@ type ExternalComplex struct { Integer int `json:"int"` Integer64 int64 `json:",omitempty"` Int64 int64 + Bool bool `json:"bool"` } func (*InternalComplex) IsAnAPIObject() {} @@ -82,6 +84,36 @@ func TestStringMapConversion(t *testing.T) { errFn: func(err error) bool { return err != nil }, expected: &ExternalComplex{}, }, + "parses boolean true": { + input: map[string][]string{ + "bool": {"true"}, + }, + expected: &ExternalComplex{Bool: true}, + }, + "parses boolean any value": { + input: map[string][]string{ + "bool": {"foo"}, + }, + expected: &ExternalComplex{Bool: true}, + }, + "parses boolean false": { + input: map[string][]string{ + "bool": {"false"}, + }, + expected: &ExternalComplex{Bool: false}, + }, + "parses boolean empty value": { + input: map[string][]string{ + "bool": {""}, + }, + expected: &ExternalComplex{Bool: true}, + }, + "parses boolean no value": { + input: map[string][]string{ + "bool": {}, + }, + expected: &ExternalComplex{Bool: false}, + }, } for k, tc := range testCases {