diff --git a/references/cli/addon.go b/references/cli/addon.go index b26fd593b..25a51035b 100644 --- a/references/cli/addon.go +++ b/references/cli/addon.go @@ -148,6 +148,10 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com return err } } else { + if filepath.IsAbs(addonOrDir) || strings.HasPrefix(addonOrDir, ".") || strings.HasSuffix(addonOrDir, "/") { + return fmt.Errorf("addon directory %s not found in local", addonOrDir) + } + err = enableAddon(ctx, k8sClient, config, name, addonArgs) if err != nil { return err @@ -222,6 +226,10 @@ func NewAddonUpgradeCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Co return err } } else { + if filepath.IsAbs(addonOrDir) || strings.HasPrefix(addonOrDir, ".") || strings.HasSuffix(addonOrDir, "/") { + return fmt.Errorf("addon directory %s not found in local", addonOrDir) + } + _, err = pkgaddon.FetchAddonRelatedApp(context.Background(), k8sClient, addonOrDir) if err != nil { return errors.Wrapf(err, "cannot fetch addon related addon %s", addonOrDir) diff --git a/references/cli/addon_test.go b/references/cli/addon_test.go index 24df5b245..c854d3418 100644 --- a/references/cli/addon_test.go +++ b/references/cli/addon_test.go @@ -19,6 +19,9 @@ package cli import ( "testing" + "github.com/oam-dev/kubevela/pkg/utils/common" + "github.com/oam-dev/kubevela/pkg/utils/util" + "gotest.tools/assert" ) @@ -70,3 +73,55 @@ func TestParseMap(t *testing.T) { } } } + +func TestAddonEnableCmdWithErrLocalPath(t *testing.T) { + testcase := []struct { + args []string + errMsg string + }{ + { + args: []string{"./a_local_path"}, + errMsg: "addon directory ./a_local_path not found in local", + }, + { + args: []string{"a_local_path/"}, + errMsg: "addon directory a_local_path/ not found in local", + }, + } + + ioStream := util.IOStreams{} + commandArgs := common.Args{} + cmd := NewAddonEnableCommand(commandArgs, ioStream) + + for _, s := range testcase { + cmd.SetArgs(s.args) + err := cmd.Execute() + assert.Error(t, err, s.errMsg) + } +} + +func TestAddonUpgradeCmdWithErrLocalPath(t *testing.T) { + testcase := []struct { + args []string + errMsg string + }{ + { + args: []string{"./a_local_path"}, + errMsg: "addon directory ./a_local_path not found in local", + }, + { + args: []string{"a_local_path/"}, + errMsg: "addon directory a_local_path/ not found in local", + }, + } + + ioStream := util.IOStreams{} + commandArgs := common.Args{} + cmd := NewAddonUpgradeCommand(commandArgs, ioStream) + + for _, s := range testcase { + cmd.SetArgs(s.args) + err := cmd.Execute() + assert.Error(t, err, s.errMsg) + } +}