diff --git a/cmd/helm/testdata/output/upgrade-json.txt b/cmd/helm/testdata/output/upgrade-json.txt new file mode 100644 index 000000000..b60ae5fa3 --- /dev/null +++ b/cmd/helm/testdata/output/upgrade-json.txt @@ -0,0 +1 @@ +{"name":"funny-bunny","info":{"first_deployed":"1977-09-02T22:04:05Z","last_deployed":"1977-09-02T22:04:05Z","deleted":"","description":"Upgrade complete","status":"deployed"},"chart":{"metadata":{"name":"test-upgrade-chart","version":"0.1.3","description":"A Helm chart for Kubernetes","apiVersion":"v1"},"lock":null,"templates":null,"values":null,"schema":null,"files":null},"config":{"name":"value"},"version":7,"namespace":"default"} diff --git a/cmd/helm/testdata/output/upgrade-oci-json.txt b/cmd/helm/testdata/output/upgrade-oci-json.txt new file mode 100644 index 000000000..3abec031a --- /dev/null +++ b/cmd/helm/testdata/output/upgrade-oci-json.txt @@ -0,0 +1 @@ +{"name":"funny-bunny","info":{"first_deployed":"1977-09-02T22:04:05Z","last_deployed":"1977-09-02T22:04:05Z","deleted":"","description":"Upgrade complete","status":"deployed"},"chart":{"metadata":{"name":"test-upgrade-chart","version":"0.1.7","description":"A Helm chart for Kubernetes","apiVersion":"v1"},"lock":null,"templates":[{"name":"templates/configmap.yaml","data":"YXBpVmVyc2lvbjogdjEKa2luZDogQ29uZmlnTWFwCm1ldGFkYXRhOgogIG5hbWU6ICJ7eyAuUmVsZWFzZS5OYW1lIH19LWNvbmZpZ21hcCIKZGF0YToKICBteXZhbHVlOiAiSGVsbG8gV29ybGQiCiAgZHJpbms6IHt7IC5WYWx1ZXMuZmF2b3JpdGVEcmluayB9fQ=="}],"values":{"favoriteDrink":"beer"},"schema":null,"files":null},"config":{"name":"value"},"manifest":"---\n# Source: test-upgrade-chart/templates/configmap.yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n name: \"funny-bunny-configmap\"\ndata:\n myvalue: \"Hello World\"\n drink: beer\n","version":8,"namespace":"default"} diff --git a/cmd/helm/testdata/testcharts/test-upgrade-chart-0.1.7.tgz b/cmd/helm/testdata/testcharts/test-upgrade-chart-0.1.7.tgz new file mode 100644 index 000000000..e27e1b3ae Binary files /dev/null and b/cmd/helm/testdata/testcharts/test-upgrade-chart-0.1.7.tgz differ diff --git a/cmd/helm/upgrade_test.go b/cmd/helm/upgrade_test.go index 497c78d71..b0e2c59d6 100644 --- a/cmd/helm/upgrade_test.go +++ b/cmd/helm/upgrade_test.go @@ -28,6 +28,7 @@ import ( "helm.sh/helm/v3/pkg/chart/loader" "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/release" + "helm.sh/helm/v3/pkg/repo/repotest" ) func TestUpgradeCmd(t *testing.T) { @@ -36,7 +37,7 @@ func TestUpgradeCmd(t *testing.T) { cfile := &chart.Chart{ Metadata: &chart.Metadata{ APIVersion: chart.APIVersionV1, - Name: "testUpgradeChart", + Name: "test-upgrade-chart", Description: "A Helm chart for Kubernetes", Version: "0.1.0", }, @@ -89,6 +90,23 @@ func TestUpgradeCmd(t *testing.T) { return release.Mock(&release.MockReleaseOptions{Name: n, Version: v, Chart: ch}) } + srv, err := repotest.NewTempServerWithCleanup(t, "testdata/testcharts/*.tgz") + if err != nil { + t.Fatal(err) + } + defer srv.Stop() + outdir := srv.Root() + + ociSrv, err := repotest.NewOCIServer(t, srv.Root()) + if err != nil { + t.Fatal(err) + } + ociSrv.Run(t) + + if err := srv.LinkIndices(); err != nil { + t.Fatal(err) + } + tests := []cmdTestCase{ { name: "upgrade a release", @@ -114,6 +132,18 @@ func TestUpgradeCmd(t *testing.T) { golden: "output/upgrade-with-reset-values2.txt", rels: []*release.Release{relMock("funny-bunny", 5, ch2)}, }, + { + name: "upgrade a release with json output", + cmd: fmt.Sprintf("upgrade --output json funny-bunny '%s'", chartPath), + golden: "output/upgrade-json.txt", + rels: []*release.Release{relMock("funny-bunny", 6, ch)}, + }, + { + name: "upgrade a oci release with json output", + cmd: fmt.Sprintf("upgrade --output json funny-bunny 'oci://%s/u/ocitestuser/test-upgrade-chart' --version 0.1.7 --registry-config %s", ociSrv.RegistryURL, filepath.Join(outdir, "config.json")), + golden: "output/upgrade-oci-json.txt", + rels: []*release.Release{relMock("funny-bunny", 7, ch)}, + }, { name: "install a release with 'upgrade --install'", cmd: fmt.Sprintf("upgrade zany-bunny -i '%s'", chartPath), diff --git a/pkg/repo/repotest/server.go b/pkg/repo/repotest/server.go index 4a86707cf..0171b9661 100644 --- a/pkg/repo/repotest/server.go +++ b/pkg/repo/repotest/server.go @@ -209,6 +209,22 @@ func (srv *OCIServer) Run(t *testing.T, opts ...OCIServerOpt) { result.Config.Digest, result.Config.Size, result.Chart.Digest, result.Chart.Size) + upgradeRef := fmt.Sprintf("%s/u/ocitestuser/test-upgrade-chart:0.1.7", srv.RegistryURL) + contentBytes, err = os.ReadFile(filepath.Join(srv.Dir, "test-upgrade-chart-0.1.7.tgz")) + if err != nil { + t.Fatal("could not load chart into memory") + } + result, err = registryClient.Push(contentBytes, upgradeRef) + if err != nil { + t.Fatalf("error pushing chart: %s", err) + } + t.Logf("Manifest.Digest: %s, Manifest.Size: %d, "+ + "Config.Digest: %s, Config.Size: %d, "+ + "Chart.Digest: %s, Chart.Size: %d", + result.Manifest.Digest, result.Manifest.Size, + result.Config.Digest, result.Config.Size, + result.Chart.Digest, result.Chart.Size) + srv.Client = registryClient c := cfg.DependingChart if c == nil {