/* Copyright (c) Edgeless Systems GmbH SPDX-License-Identifier: AGPL-3.0-only */ package helm import ( "context" "testing" "time" "github.com/edgelesssys/constellation/v2/internal/compatibility" "github.com/edgelesssys/constellation/v2/internal/config" "github.com/edgelesssys/constellation/v2/internal/logger" "github.com/stretchr/testify/assert" "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/release" ) func TestUpgradeRelease(t *testing.T) { testCases := map[string]struct { allowDestructive bool version string assertCorrectError func(t *testing.T, err error) bool wantError bool }{ "allow": { allowDestructive: true, version: "1.9.0", }, "not a valid upgrade": { allowDestructive: true, version: "1.0.0", assertCorrectError: func(t *testing.T, err error) bool { target := &compatibility.InvalidUpgradeError{} return assert.ErrorAs(t, err, &target) }, wantError: true, }, "deny": { allowDestructive: false, version: "1.9.0", assertCorrectError: func(t *testing.T, err error) bool { return assert.ErrorIs(t, err, ErrConfirmationMissing) }, wantError: true, }, } for name, tc := range testCases { t.Run(name, func(t *testing.T) { assert := assert.New(t) client := Client{kubectl: nil, actions: &stubActionWrapper{version: tc.version}, log: logger.NewTest(t)} err := client.upgradeRelease(context.Background(), 0, config.Default(), certManagerPath, certManagerReleaseName, false, tc.allowDestructive) if tc.wantError { tc.assertCorrectError(t, err) return } assert.NoError(err) }) } } type stubActionWrapper struct { version string } // listAction returns a list of len 1 with a release that has only it's version set. func (a *stubActionWrapper) listAction(_ string) ([]*release.Release, error) { return []*release.Release{{Chart: &chart.Chart{Metadata: &chart.Metadata{Version: a.version}}}}, nil } func (a *stubActionWrapper) getValues(release string) (map[string]any, error) { return nil, nil } func (a *stubActionWrapper) upgradeAction(ctx context.Context, releaseName string, chart *chart.Chart, values map[string]any, timeout time.Duration) error { return nil }