improve error message on plugin install

Signed-off-by: Philipp Stehle <philipp.stehle@sap.com>
Signed-off-by: Tom Runyon <tom@defenseunicorns.com>
pull/11623/head
Philipp Stehle 3 years ago committed by Tom Runyon
parent 4225e255d2
commit baf7d46b3b
No known key found for this signature in database
GPG Key ID: D1CF51977E0E790F

@ -22,6 +22,9 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// ErrPluginNotAFolder indicates that the plugin path is not a folder.
var ErrPluginNotAFolder = errors.New("expected plugin to be a folder")
// LocalInstaller installs plugins from the filesystem. // LocalInstaller installs plugins from the filesystem.
type LocalInstaller struct { type LocalInstaller struct {
base base
@ -43,6 +46,14 @@ func NewLocalInstaller(source string) (*LocalInstaller, error) {
// //
// Implements Installer. // Implements Installer.
func (i *LocalInstaller) Install() error { func (i *LocalInstaller) Install() error {
stat, err := os.Stat(i.Source)
if err != nil {
return err
}
if !stat.IsDir() {
return ErrPluginNotAFolder
}
if !isPlugin(i.Source) { if !isPlugin(i.Source) {
return ErrMissingMetadata return ErrMissingMetadata
} }

@ -48,3 +48,19 @@ func TestLocalInstaller(t *testing.T) {
} }
defer os.RemoveAll(filepath.Dir(helmpath.DataPath())) // helmpath.DataPath is like /tmp/helm013130971/helm defer os.RemoveAll(filepath.Dir(helmpath.DataPath())) // helmpath.DataPath is like /tmp/helm013130971/helm
} }
func TestLocalInstallerNotAFolder(t *testing.T) {
source := "../testdata/plugdir/good/echo/plugin.yaml"
i, err := NewForSource(source, "")
if err != nil {
t.Fatalf("unexpected error: %s", err)
}
err = Install(i)
if err == nil {
t.Fatal("expected error")
}
if err != ErrPluginNotAFolder {
t.Fatalf("expected error to equal: %q", err)
}
}

Loading…
Cancel
Save