diff --git a/pkg/action/install.go b/pkg/action/install.go index 8cd270693..6d42da0ab 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -669,15 +669,12 @@ func (c *ChartPathOptions) LocateChart(name string, settings *cli.EnvSettings) ( } filename, _, err := dl.DownloadTo(name, version, settings.RepositoryCache) - if err == nil { - lname, err := filepath.Abs(filename) - if err != nil { - return filename, err - } - return lname, nil - } else if settings.Debug { + if err != nil { return filename, err } - - return filename, errors.Errorf("failed to download %q (hint: running `helm repo update` may help)", name) + lname, err := filepath.Abs(filename) + if err != nil { + return filename, err + } + return lname, nil } diff --git a/pkg/action/install_test.go b/pkg/action/install_test.go index 4637a4b10..d844e44eb 100644 --- a/pkg/action/install_test.go +++ b/pkg/action/install_test.go @@ -20,6 +20,7 @@ import ( "fmt" "io/ioutil" "log" + "net/http" "os" "path/filepath" "regexp" @@ -29,9 +30,12 @@ import ( "github.com/stretchr/testify/assert" "helm.sh/helm/v3/internal/test" + "helm.sh/helm/v3/internal/test/ensure" "helm.sh/helm/v3/pkg/chartutil" + "helm.sh/helm/v3/pkg/cli" kubefake "helm.sh/helm/v3/pkg/kube/fake" "helm.sh/helm/v3/pkg/release" + "helm.sh/helm/v3/pkg/repo/repotest" "helm.sh/helm/v3/pkg/storage/driver" "helm.sh/helm/v3/pkg/time" ) @@ -566,3 +570,69 @@ func TestNameAndChartGenerateName(t *testing.T) { }) } } + +func Test_LocateChart_WithURL_WithVerify(t *testing.T) { + rootDir := ensure.TempDir(t) + srv := repotest.NewServer(rootDir) + defer srv.Stop() + + srv.LinkIndices() + + _, err := srv.CopyCharts("testdata/charts/*") + if err != nil { + t.Fatal(err) + } + + res, err := http.Get(srv.URL() + "/chart.tgz") + res.Body.Close() + if err != nil { + t.Fatal(err) + } + + tests := []struct { + chartName string + keyRingFile string + name string + wantErr bool + wantErrString string + }{ + { + chartName: "chartTest-0.1.0.tgz", + keyRingFile: "./testdata/pubring.gpg", + name: "correct keyring", + wantErr: false, + wantErrString: "", + }, + { + chartName: "chartTest-0.1.0.tgz", + keyRingFile: "./testdata/keyring/pubringtemp.gpg", + name: "bad keyring", + wantErr: true, + wantErrString: "failed to load keyring:", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + absKeyRing, _ := filepath.Abs(tc.keyRingFile) + + chartOptions := &ChartPathOptions{Keyring: absKeyRing, Verify: true} + + downloader := cli.New() + downloader.RepositoryConfig = rootDir + "/repositories.yaml" + downloader.RepositoryCache = rootDir + + var err error + _, err = chartOptions.LocateChart(srv.URL()+"/"+tc.chartName, downloader) + if (err != nil) != tc.wantErr { + t.Errorf("LocateChart() wantErr: %v, gotErr: %v", tc.wantErr, err) + return + } + if err != nil { + if !strings.Contains(err.Error(), tc.wantErrString) { + t.Errorf("LocateChart() improver error message received, got: %v, expected: %v*", err.Error(), tc.wantErrString) + } + } + }) + } +} diff --git a/pkg/action/testdata/charts/chartTest-0.1.0.tgz b/pkg/action/testdata/charts/chartTest-0.1.0.tgz new file mode 100644 index 000000000..0ec266dac Binary files /dev/null and b/pkg/action/testdata/charts/chartTest-0.1.0.tgz differ diff --git a/pkg/action/testdata/charts/chartTest-0.1.0.tgz.prov b/pkg/action/testdata/charts/chartTest-0.1.0.tgz.prov new file mode 100644 index 000000000..9cd2da541 --- /dev/null +++ b/pkg/action/testdata/charts/chartTest-0.1.0.tgz.prov @@ -0,0 +1,26 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +apiVersion: v2 +appVersion: 1.16.0 +description: A Helm chart for Kubernetes +name: chartTest +type: application +version: 0.1.0 + +... +files: + chartTest-0.1.0.tgz: sha256:d00f9e13f91482b4a0e15b637f03045882d5fa6af0c65ed3b055096eb6351e7c +-----BEGIN PGP SIGNATURE----- + +wsDcBAEBCgAQBQJeTrjoCRCWvWlwhIOoPAAAt3YMAF+Q482zP8uwPTBPZUhnjYR5 +X79BI+lRj6jKbnOyobFtvioEk0mNnpyCJOYVd/i8DNPf+xOgXc5fc8Ri8DsgO8T9 +GVI7OCeOHnnZB8eC5IRh3zjvOefsVMTzMjkj6uQ+mPSQMChFrZvq0ZnXdz7BLXU5 +8k0Dw9LgyVr9LM7uuBz1n6AjOtZaQXYbQyVJLCdkApzucqCrcbVvZXGx3pnAsJ6a +xYkhR15sexH0+wzMNzQvcHv4GWS/smZOYV7m2GmJY0XUIpteme728UqrrxnplHoW +JwUViz7V9i7PlL/0NFn1aH/oEvG9gFqxA9JbZDe+WlVfyrtE+C5B/DwID5ldkL0r +gT81jwXYtC5v8+LY8EfI8PuKBmMJP0JxLm7fRc4ITYj/mx2oQ9yiEtvh6GKzW1X8 +KJqM+0FgmcxJ3YBiJ+/ojAVsHN1EeiDvp+ucP5VGsCv2HyfQx80V7TTAfvkBxcU2 +vTXXT52003p93GHAx40UND0To6gyYlw0gbeG2yYlNg== +=3TqE +-----END PGP SIGNATURE----- \ No newline at end of file diff --git a/pkg/action/testdata/pubring.gpg b/pkg/action/testdata/pubring.gpg new file mode 100644 index 000000000..18c3f8703 Binary files /dev/null and b/pkg/action/testdata/pubring.gpg differ