From 20fd433f750e6748d2ecbcbe2a5e49e3ed559715 Mon Sep 17 00:00:00 2001 From: guineveresaenger Date: Fri, 29 Jun 2018 15:44:00 -0700 Subject: [PATCH] Add tests --- pkg/commands/addannotation.go | 8 +-- pkg/commands/addannotation_test.go | 111 ++++++++++++++++++++++++++++- pkg/commands/addlabel.go | 13 ++-- pkg/commands/addlabel_test.go | 111 ++++++++++++++++++++++++++++- pkg/commands/commands.go | 3 - 5 files changed, 228 insertions(+), 18 deletions(-) diff --git a/pkg/commands/addannotation.go b/pkg/commands/addannotation.go index 225a1f335..0658eeb1e 100644 --- a/pkg/commands/addannotation.go +++ b/pkg/commands/addannotation.go @@ -19,8 +19,8 @@ package commands import ( "errors" "fmt" - "strings" "regexp" + "strings" "github.com/spf13/cobra" @@ -64,9 +64,9 @@ func (o *addAnnotationOptions) Validate(args []string) error { if len(args) > 1 { return errors.New("annotations must be comma-separated, with no spaces. See help text for example.") } - inputs := strings.Split(args[0],",") + inputs := strings.Split(args[0], ",") for _, input := range inputs { - ok, err := regexp.MatchString(`\A([a-zA-Z0-9_.-]+):([a-zA-Z0-9_.-]+)\z`, input) + ok, err := regexp.MatchString(`\A([a-zA-Z0-9_.-]+):([a-zA-Z0-9_.-]+)\z`, input) if err != nil { return err } @@ -95,7 +95,7 @@ func (o *addAnnotationOptions) RunAddAnnotation(fsys fs.FileSystem) error { return err } - if m.CommonAnnotations == nil{ + if m.CommonAnnotations == nil { m.CommonAnnotations = make(map[string]string) } annotations := strings.Split(o.annotations, ",") diff --git a/pkg/commands/addannotation_test.go b/pkg/commands/addannotation_test.go index d40208840..faa9b7813 100644 --- a/pkg/commands/addannotation_test.go +++ b/pkg/commands/addannotation_test.go @@ -14,4 +14,113 @@ See the License for the specific language governing permissions and limitations under the License. */ -package commands \ No newline at end of file +package commands + +import ( + "testing" + + "strings" + + "github.com/kubernetes-sigs/kustomize/pkg/constants" + "github.com/kubernetes-sigs/kustomize/pkg/fs" +) + +func TestAnnotationsValid(t *testing.T) { + var testcases = []struct { + input string + valid bool + name string + }{ + { + input: "owls:great,unicorns:magical", + valid: true, + name: "Adds two annotations", + }, + { + input: "owls:great", + valid: false, + name: "Annotation keys must be unique", + }, + { + input: "otters:cute", + valid: true, + name: "Adds single annotation", + }, + { + input: "dogs,cats", + valid: false, + name: "Does not contain colon", + }, + { + input: ":noKey", + valid: false, + name: "Missing key", + }, + { + input: "noValue:", + valid: false, + name: "Missing value", + }, + } + fakeFS := fs.MakeFakeFS() + fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent)) + cmd := newCmdAddAnnotation(fakeFS) + + for _, tc := range testcases { + annotations := strings.Split(tc.input, ",") + //run command with test input + args := []string{tc.input} + err := cmd.RunE(cmd, args) + + if err != nil && tc.valid { + t.Errorf("for test case %s, unexpected cmd error: %v", tc.name, err) + } + if err == nil && !tc.valid { + t.Errorf("unexpected error: expected invalid annotation format error for test case %v", tc.name) + } + if err == nil && (tc.name == "Annotation keys must be unique") { + t.Errorf("unexpected error: for test case %s, expected already there problem", tc.name) + } + + content, readErr := fakeFS.ReadFile(constants.KustomizationFileName) + if readErr != nil { + t.Errorf("unexpected read error: %v", readErr) + } + //check if valid input was added to commonAnnotations + for _, annotation := range annotations { + key := strings.Split(annotation, ":")[0] + if !strings.Contains(string(content), key) && tc.valid { + t.Errorf("unexpected error: for test case %s, expected key to be in file.", tc.name) + } + } + + } + +} + +func TestAddAnnotationNoArgs(t *testing.T) { + fakeFS := fs.MakeFakeFS() + + cmd := newCmdAddAnnotation(fakeFS) + err := cmd.Execute() + if err == nil { + t.Errorf("expected an error but error is %v", err) + } + if err != nil && err.Error() != "must specify an annotation" { + t.Errorf("incorrect error: %v", err.Error()) + } +} + +func TestAddAnnotationMultipleArgs(t *testing.T) { + fakeFS := fs.MakeFakeFS() + fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent)) + cmd := newCmdAddAnnotation(fakeFS) + args := []string{"this:input", "has:spaces"} + err := cmd.RunE(cmd, args) + if err == nil { + t.Errorf("expected an error but error is %v", err) + } + if err != nil && err.Error() != "annotations must be comma-separated, with no spaces. See help text for example." { + t.Errorf("incorrect error: %v", err.Error()) + } +} diff --git a/pkg/commands/addlabel.go b/pkg/commands/addlabel.go index 80accf280..7f794e4b5 100644 --- a/pkg/commands/addlabel.go +++ b/pkg/commands/addlabel.go @@ -17,9 +17,9 @@ limitations under the License. package commands import ( - "regexp" "errors" "fmt" + "regexp" "strings" "github.com/spf13/cobra" @@ -57,21 +57,16 @@ func newCmdAddLabel(fsys fs.FileSystem) *cobra.Command { } // Validate validates addLabel command. -// TODO: make sure label is of correct format key:value func (o *addLabelOptions) Validate(args []string) error { - for _, arg := range args { - fmt.Println(arg + "****") - } - if len(args) < 1 { return errors.New("must specify a label") } if len(args) > 1 { return errors.New("labels must be comma-separated, with no spaces. See help text for example.") } - inputs := strings.Split(args[0],",") + inputs := strings.Split(args[0], ",") for _, input := range inputs { - ok, err := regexp.MatchString(`\A([a-zA-Z0-9_.-]+):([a-zA-Z0-9_.-]+)\z`, input) + ok, err := regexp.MatchString(`\A([a-zA-Z0-9_.-]+):([a-zA-Z0-9_.-]+)\z`, input) if err != nil { return err } @@ -102,7 +97,7 @@ func (o *addLabelOptions) RunAddLabel(fsys fs.FileSystem) error { return err } - if m.CommonLabels == nil{ + if m.CommonLabels == nil { m.CommonLabels = make(map[string]string) } diff --git a/pkg/commands/addlabel_test.go b/pkg/commands/addlabel_test.go index d40208840..97309a5f4 100644 --- a/pkg/commands/addlabel_test.go +++ b/pkg/commands/addlabel_test.go @@ -14,4 +14,113 @@ See the License for the specific language governing permissions and limitations under the License. */ -package commands \ No newline at end of file +package commands + +import ( + "testing" + + "strings" + + "github.com/kubernetes-sigs/kustomize/pkg/constants" + "github.com/kubernetes-sigs/kustomize/pkg/fs" +) + +func TestLabelsValid(t *testing.T) { + var testcases = []struct { + input string + valid bool + name string + }{ + { + input: "owls:great,unicorns:magical", + valid: true, + name: "Adds two labels", + }, + { + input: "owls:great", + valid: false, + name: "Label keys must be unique", + }, + { + input: "otters:cute", + valid: true, + name: "Adds single label", + }, + { + input: "dogs,cats", + valid: false, + name: "Does not contain colon", + }, + { + input: ":noKey", + valid: false, + name: "Missing key", + }, + { + input: "noValue:", + valid: false, + name: "Missing value", + }, + } + fakeFS := fs.MakeFakeFS() + fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent)) + cmd := newCmdAddLabel(fakeFS) + + for _, tc := range testcases { + labels := strings.Split(tc.input, ",") + //run command with test input + args := []string{tc.input} + err := cmd.RunE(cmd, args) + + if err != nil && tc.valid { + t.Errorf("for test case %s, unexpected cmd error: %v", tc.name, err) + } + if err == nil && !tc.valid { + t.Errorf("unexpected error: expected invalid annotation format error for test case %v", tc.name) + } + if err == nil && (tc.name == "Label keys must be unique") { + t.Errorf("unexpected error: for test case %s, expected already there problem", tc.name) + } + + content, readErr := fakeFS.ReadFile(constants.KustomizationFileName) + if readErr != nil { + t.Errorf("unexpected read error: %v", readErr) + } + //check if valid input was added to commonLabels + for _, label := range labels { + key := strings.Split(label, ":")[0] + if !strings.Contains(string(content), key) && tc.valid { + t.Errorf("unexpected error: for test case %s, expected key to be in file.", tc.name) + } + } + + } + +} + +func TestAddLabelNoArgs(t *testing.T) { + fakeFS := fs.MakeFakeFS() + + cmd := newCmdAddLabel(fakeFS) + err := cmd.Execute() + if err == nil { + t.Errorf("expected an error but error is: %v", err) + } + if err != nil && err.Error() != "must specify a label" { + t.Errorf("incorrect error: %v", err.Error()) + } +} + +func TestAddLabelMultipleArgs(t *testing.T) { + fakeFS := fs.MakeFakeFS() + fakeFS.WriteFile(constants.KustomizationFileName, []byte(kustomizationContent)) + cmd := newCmdAddLabel(fakeFS) + args := []string{"this:input", "has:spaces"} + err := cmd.RunE(cmd, args) + if err == nil { + t.Errorf("expected an error but error is: %v", err) + } + if err != nil && err.Error() != "labels must be comma-separated, with no spaces. See help text for example." { + t.Errorf("incorrect error: %v", err.Error()) + } +} diff --git a/pkg/commands/commands.go b/pkg/commands/commands.go index ba6dcdbea..dd2180d57 100644 --- a/pkg/commands/commands.go +++ b/pkg/commands/commands.go @@ -96,15 +96,12 @@ func newCmdAdd(fsys fs.FileSystem) *cobra.Command { # Adds one or more base directories to the kustomization kustomize edit add base kustomize edit add base ,, -<<<<<<< HEAD -======= # Adds one or more commonLabels to the kustomization kustomize edit add label {labelKey1:labelValue1},{labelKey2:labelValue2} # Adds one or more commonAnnotations to the kustomization kustomize edit add annotation {annotationKey1:annotationValue1},{annotationKey2:annotationValue2} ->>>>>>> Implements labels and annotations as subcommands of edit `, Args: cobra.MinimumNArgs(1), }