mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-18 12:20:24 +00:00
116 lines
3.2 KiB
Go
116 lines
3.2 KiB
Go
|
/*
|
||
|
Copyright 2014 The Kubernetes Authors.
|
||
|
|
||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
you may not use this file except in compliance with the License.
|
||
|
You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package runtime_test
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
|
||
|
"k8s.io/apimachinery/pkg/runtime"
|
||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||
|
runtimetesting "k8s.io/apimachinery/pkg/runtime/testing"
|
||
|
)
|
||
|
|
||
|
func TestStringMapConversion(t *testing.T) {
|
||
|
internalGV := schema.GroupVersion{Group: "test.group", Version: runtime.APIVersionInternal}
|
||
|
externalGV := schema.GroupVersion{Group: "test.group", Version: "external"}
|
||
|
|
||
|
scheme := runtime.NewScheme()
|
||
|
scheme.Log(t)
|
||
|
scheme.AddKnownTypeWithName(internalGV.WithKind("Complex"), &runtimetesting.InternalComplex{})
|
||
|
scheme.AddKnownTypeWithName(externalGV.WithKind("Complex"), &runtimetesting.ExternalComplex{})
|
||
|
|
||
|
testCases := map[string]struct {
|
||
|
input map[string][]string
|
||
|
errFn func(error) bool
|
||
|
expected runtime.Object
|
||
|
}{
|
||
|
"ignores omitempty": {
|
||
|
input: map[string][]string{
|
||
|
"String": {"not_used"},
|
||
|
"string": {"value"},
|
||
|
"int": {"1"},
|
||
|
"Integer64": {"2"},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{String: "value", Integer: 1},
|
||
|
},
|
||
|
"returns error on bad int": {
|
||
|
input: map[string][]string{
|
||
|
"int": {"a"},
|
||
|
},
|
||
|
errFn: func(err error) bool { return err != nil },
|
||
|
expected: &runtimetesting.ExternalComplex{},
|
||
|
},
|
||
|
"parses int64": {
|
||
|
input: map[string][]string{
|
||
|
"Int64": {"-1"},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Int64: -1},
|
||
|
},
|
||
|
"returns error on bad int64": {
|
||
|
input: map[string][]string{
|
||
|
"Int64": {"a"},
|
||
|
},
|
||
|
errFn: func(err error) bool { return err != nil },
|
||
|
expected: &runtimetesting.ExternalComplex{},
|
||
|
},
|
||
|
"parses boolean true": {
|
||
|
input: map[string][]string{
|
||
|
"bool": {"true"},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Bool: true},
|
||
|
},
|
||
|
"parses boolean any value": {
|
||
|
input: map[string][]string{
|
||
|
"bool": {"foo"},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Bool: true},
|
||
|
},
|
||
|
"parses boolean false": {
|
||
|
input: map[string][]string{
|
||
|
"bool": {"false"},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Bool: false},
|
||
|
},
|
||
|
"parses boolean empty value": {
|
||
|
input: map[string][]string{
|
||
|
"bool": {""},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Bool: true},
|
||
|
},
|
||
|
"parses boolean no value": {
|
||
|
input: map[string][]string{
|
||
|
"bool": {},
|
||
|
},
|
||
|
expected: &runtimetesting.ExternalComplex{Bool: false},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for k, tc := range testCases {
|
||
|
out := &runtimetesting.ExternalComplex{}
|
||
|
if err := scheme.Convert(&tc.input, out, nil); (tc.errFn == nil && err != nil) || (tc.errFn != nil && !tc.errFn(err)) {
|
||
|
t.Errorf("%s: unexpected error: %v", k, err)
|
||
|
continue
|
||
|
} else if err != nil {
|
||
|
continue
|
||
|
}
|
||
|
if !reflect.DeepEqual(out, tc.expected) {
|
||
|
t.Errorf("%s: unexpected output: %#v", k, out)
|
||
|
}
|
||
|
}
|
||
|
}
|