diff --git a/pkg/kubectl/cmd/run.go b/pkg/kubectl/cmd/run.go index f2f4ba0af04..914b43fdbd2 100644 --- a/pkg/kubectl/cmd/run.go +++ b/pkg/kubectl/cmd/run.go @@ -56,7 +56,7 @@ Examples: usageError(cmd, fmt.Sprintf("Generator: %s not found.", generator)) } names := generator.ParamNames() - params, err := kubectl.MakeParams(cmd, names) + params := kubectl.MakeParams(cmd, names) params["name"] = args[0] err = kubectl.ValidateParams(names, params) diff --git a/pkg/kubectl/generate.go b/pkg/kubectl/generate.go index 74cb86ad33d..1344c5efd01 100644 --- a/pkg/kubectl/generate.go +++ b/pkg/kubectl/generate.go @@ -58,7 +58,7 @@ func ValidateParams(paramSpec []GeneratorParam, params map[string]string) error } // MakeParams is a utility that creates generator parameters from a command line -func MakeParams(cmd *cobra.Command, params []GeneratorParam) (map[string]string, error) { +func MakeParams(cmd *cobra.Command, params []GeneratorParam) map[string]string { result := map[string]string{} for ix := range params { f := cmd.Flags().Lookup(params[ix].Name) @@ -66,5 +66,5 @@ func MakeParams(cmd *cobra.Command, params []GeneratorParam) (map[string]string, result[params[ix].Name] = f.Value.String() } } - return result, nil + return result } diff --git a/pkg/kubectl/generate_test.go b/pkg/kubectl/generate_test.go new file mode 100644 index 00000000000..6802f9658d2 --- /dev/null +++ b/pkg/kubectl/generate_test.go @@ -0,0 +1,114 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +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 kubectl + +import ( + "reflect" + "testing" + + "github.com/spf13/cobra" +) + +func TestValidateParams(t *testing.T) { + tests := []struct { + paramSpec []GeneratorParam + params map[string]string + valid bool + }{ + { + paramSpec: []GeneratorParam{}, + params: map[string]string{}, + valid: true, + }, + { + paramSpec: []GeneratorParam{ + {Name: "foo"}, + }, + params: map[string]string{}, + valid: true, + }, + { + paramSpec: []GeneratorParam{ + {Name: "foo", Required: true}, + }, + params: map[string]string{ + "foo": "bar", + }, + valid: true, + }, + { + paramSpec: []GeneratorParam{ + {Name: "foo", Required: true}, + }, + params: map[string]string{ + "baz": "blah", + "foo": "bar", + }, + valid: true, + }, + { + paramSpec: []GeneratorParam{ + {Name: "foo", Required: true}, + {Name: "baz", Required: true}, + }, + params: map[string]string{ + "baz": "blah", + "foo": "bar", + }, + valid: true, + }, + { + paramSpec: []GeneratorParam{ + {Name: "foo", Required: true}, + {Name: "baz", Required: true}, + }, + params: map[string]string{ + "foo": "bar", + }, + valid: false, + }, + } + for _, test := range tests { + err := ValidateParams(test.paramSpec, test.params) + if test.valid && err != nil { + t.Errorf("unexpected error: %v", err) + } + if !test.valid && err == nil { + t.Errorf("unexpected non-error") + } + } +} + +func TestMakeParams(t *testing.T) { + cmd := &cobra.Command{} + cmd.Flags().String("foo", "bar", "") + cmd.Flags().String("baz", "", "") + cmd.Flags().Set("baz", "blah") + + paramSpec := []GeneratorParam{ + {Name: "foo", Required: true}, + {Name: "baz", Required: true}, + } + expected := map[string]string{ + "foo": "bar", + "baz": "blah", + } + params := MakeParams(cmd, paramSpec) + if !reflect.DeepEqual(params, expected) { + t.Errorf("\nexpected:\n%v\nsaw:\n%v", expected, params) + } +} diff --git a/pkg/kubectl/run_test.go b/pkg/kubectl/run_test.go new file mode 100644 index 00000000000..07bd523a160 --- /dev/null +++ b/pkg/kubectl/run_test.go @@ -0,0 +1,104 @@ +/* +Copyright 2014 Google Inc. All rights reserved. + +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 kubectl + +import ( + "reflect" + "testing" + + "github.com/GoogleCloudPlatform/kubernetes/pkg/api" +) + +func TestGenerate(t *testing.T) { + tests := []struct { + params map[string]string + expected *api.ReplicationController + expectErr bool + }{ + { + params: map[string]string{ + "name": "foo", + "image": "someimage", + "replicas": "1", + }, + expected: &api.ReplicationController{ + ObjectMeta: api.ObjectMeta{ + Name: "foo", + Labels: map[string]string{"run-container": "foo"}, + }, + Spec: api.ReplicationControllerSpec{ + Replicas: 1, + Selector: map[string]string{"run-container": "foo"}, + Template: &api.PodTemplateSpec{ + ObjectMeta: api.ObjectMeta{ + Labels: map[string]string{"run-container": "foo"}, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "foo", + Image: "someimage", + }, + }, + }, + }, + }, + }, + }, + { + params: map[string]string{ + "name": "foo", + "image": "someimage", + "replicas": "1", + "labels": "foo=bar,baz=blah", + }, + expected: &api.ReplicationController{ + ObjectMeta: api.ObjectMeta{ + Name: "foo", + Labels: map[string]string{"foo": "bar", "baz": "blah"}, + }, + Spec: api.ReplicationControllerSpec{ + Replicas: 1, + Selector: map[string]string{"foo": "bar", "baz": "blah"}, + Template: &api.PodTemplateSpec{ + ObjectMeta: api.ObjectMeta{ + Labels: map[string]string{"foo": "bar", "baz": "blah"}, + }, + Spec: api.PodSpec{ + Containers: []api.Container{ + { + Name: "foo", + Image: "someimage", + }, + }, + }, + }, + }, + }, + }, + } + generator := BasicReplicationController{} + for _, test := range tests { + obj, err := generator.Generate(test.params) + if !test.expectErr && err != nil { + t.Errorf("unexpected error: %v", err) + } + if !reflect.DeepEqual(obj, test.expected) { + t.Errorf("\nexpected:\n%v\nsaw:\n%v", test.expected, obj) + } + } +}