From 73c1f268ee1120d55e822cf6d37def4c54a3efa9 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Sun, 12 Apr 2020 18:17:03 -0700 Subject: [PATCH] Extend test coverage Signed-off-by: Ahmet Alp Balkan --- cmd/kubectx/current.go | 2 +- cmd/kubectx/delete.go | 2 +- cmd/kubectx/help.go | 4 ++- cmd/kubectx/kubeconfig/contextmodify_test.go | 28 ++++++++++++++++++++ cmd/kubectx/kubeconfig/contexts_test.go | 26 ++++++++++++++++++ cmd/kubectx/kubeconfig/kubeconfig_test.go | 22 ++++++++++++++- cmd/kubectx/unset.go | 2 +- 7 files changed, 81 insertions(+), 5 deletions(-) diff --git a/cmd/kubectx/current.go b/cmd/kubectx/current.go index 131e26f..a8e44bb 100644 --- a/cmd/kubectx/current.go +++ b/cmd/kubectx/current.go @@ -24,5 +24,5 @@ func (_op CurrentOp) Run(stdout, _ io.Writer) error { return errors.New("current-context is not set") } _, err := fmt.Fprintln(stdout, v) - return err + return errors.Wrap(err, "write error") } diff --git a/cmd/kubectx/delete.go b/cmd/kubectx/delete.go index 087a5fc..4b0e784 100644 --- a/cmd/kubectx/delete.go +++ b/cmd/kubectx/delete.go @@ -55,5 +55,5 @@ func deleteContext(name string) (deleteName string, wasActiveContext bool, err e if err := kc.DeleteContextEntry(name); err != nil { return "", false, errors.Wrap(err, "failed to modify yaml doc") } - return name, wasActiveContext, errors.Wrap(kc.Save(), "failed to save kubeconfig file") + return name, wasActiveContext, errors.Wrap(kc.Save(), "failed to save modified kubeconfig file") } diff --git a/cmd/kubectx/help.go b/cmd/kubectx/help.go index dc0e437..51a99f4 100644 --- a/cmd/kubectx/help.go +++ b/cmd/kubectx/help.go @@ -3,6 +3,8 @@ package main import ( "fmt" "io" + + "github.com/pkg/errors" ) // HelpOp describes printing help. @@ -28,5 +30,5 @@ func printUsage(out io.Writer) error { kubectx -h,--help : show this message` _, err := fmt.Fprintf(out, "%s\n", help) - return err + return errors.Wrap(err, "write error") } diff --git a/cmd/kubectx/kubeconfig/contextmodify_test.go b/cmd/kubectx/kubeconfig/contextmodify_test.go index 812b024..d236d9e 100644 --- a/cmd/kubectx/kubeconfig/contextmodify_test.go +++ b/cmd/kubectx/kubeconfig/contextmodify_test.go @@ -95,6 +95,34 @@ func TestKubeconfig_ModifyCurrentContext_fieldMissing(t *testing.T) { } } +func TestKubeconfig_ModifyContextName_noContextsEntryError(t *testing.T) { + // no context entries + test := &testLoader{in: strings.NewReader( + `a: b`)} + kc := new(Kubeconfig).WithLoader(test) + if err := kc.Parse(); err != nil { + t.Fatal(err) + } + if err := kc.ModifyContextName("c1", "c2"); err == nil { + t.Fatal("was expecting error for no 'contexts' entry; got nil") + } +} + + +func TestKubeconfig_ModifyContextName_contextsEntryNotSequenceError(t *testing.T) { + // no context entries + test := &testLoader{in: strings.NewReader( + `contexts: "hello"`)} + kc := new(Kubeconfig).WithLoader(test) + if err := kc.Parse(); err != nil { + t.Fatal(err) + } + if err := kc.ModifyContextName("c1", "c2"); err == nil { + t.Fatal("was expecting error for 'context entry not a sequence'; got nil") + } +} + + func TestKubeconfig_ModifyContextName_noChange(t *testing.T) { test := &testLoader{in: strings.NewReader( `contexts: [{name: c1}, {name: c2}, {name: c3}]`)} diff --git a/cmd/kubectx/kubeconfig/contexts_test.go b/cmd/kubectx/kubeconfig/contexts_test.go index d314417..1395814 100644 --- a/cmd/kubectx/kubeconfig/contexts_test.go +++ b/cmd/kubectx/kubeconfig/contexts_test.go @@ -29,6 +29,32 @@ contexts: } } +func TestKubeconfig_ContextNames_noContextsEntry(t *testing.T) { + tl := &testLoader{in: strings.NewReader(`a: b`)} + kc := new(Kubeconfig).WithLoader(tl) + if err := kc.Parse(); err != nil { + t.Fatal(err) + } + ctx := kc.ContextNames() + var expected []string = nil + if diff := cmp.Diff(expected, ctx); diff != "" { + t.Fatalf("%s", diff) + } +} + +func TestKubeconfig_ContextNames_nonArrayContextsEntry(t *testing.T) { + tl := &testLoader{in: strings.NewReader(`contexts: "hello"`)} + kc := new(Kubeconfig).WithLoader(tl) + if err := kc.Parse(); err != nil { + t.Fatal(err) + } + ctx := kc.ContextNames() + var expected []string = nil + if diff := cmp.Diff(expected, ctx); diff != "" { + t.Fatalf("%s", diff) + } +} + func TestKubeconfig_CheckContextExists(t *testing.T) { tl := &testLoader{in: strings.NewReader(`contexts: - name: c1 diff --git a/cmd/kubectx/kubeconfig/kubeconfig_test.go b/cmd/kubectx/kubeconfig/kubeconfig_test.go index 898d5e9..c5544e0 100644 --- a/cmd/kubectx/kubeconfig/kubeconfig_test.go +++ b/cmd/kubectx/kubeconfig/kubeconfig_test.go @@ -3,10 +3,12 @@ package kubeconfig import ( "strings" "testing" + + "github.com/google/go-cmp/cmp" ) func TestParse(t *testing.T) { - err := new(Kubeconfig).WithLoader(&testLoader{in: strings.NewReader(`a:b`)}).Parse() + err := new(Kubeconfig).WithLoader(&testLoader{in: strings.NewReader(`a: [1, 2`)}).Parse() if err == nil { t.Fatal("expected error from bad yaml") } @@ -21,3 +23,21 @@ func TestParse(t *testing.T) { t.Fatal(err) } } + +func TestSave(t *testing.T) { + in := `a: [1, 2, 3]` + "\n" + test := &testLoader{in: strings.NewReader(in)} + kc := new(Kubeconfig).WithLoader(test) + defer kc.Close() + if err := kc.Parse(); err != nil { + t.Fatal(err) + } + if err := kc.ModifyCurrentContext("hello"); err != nil {t.Fatal(err)} + if err := kc.Save(); err != nil { + t.Fatal(err) + } + expected := in+"current-context: hello\n" + if diff := cmp.Diff(expected, test.out.String()); diff != "" { + t.Fatal(diff) + } +} diff --git a/cmd/kubectx/unset.go b/cmd/kubectx/unset.go index 8e33c2b..ff985f9 100644 --- a/cmd/kubectx/unset.go +++ b/cmd/kubectx/unset.go @@ -27,5 +27,5 @@ func (_ UnsetOp) Run(_, stderr io.Writer) error { } _, err := fmt.Fprintln(stderr, "Successfully unset the current context") - return err + return errors.Wrap(err, "write error") }