fix(storage): Deployed, DeployedAll, and History methods should return ErrReleaseNotFound if there are no releases, instead of custom error.

Signed-off-by: John Montroy <john.montroy@jet.com>
pull/7867/head
John Montroy 6 years ago
parent c12a9aee02
commit 96ab5216e7

@ -23,7 +23,7 @@ import (
"helm.sh/helm/v3/pkg/release" "helm.sh/helm/v3/pkg/release"
) )
func TestRollbackCmd(t *testing.T) { func makeTestReleases() []*release.Release {
rels := []*release.Release{ rels := []*release.Release{
{ {
Name: "funny-honey", Name: "funny-honey",
@ -38,32 +38,35 @@ func TestRollbackCmd(t *testing.T) {
Version: 2, Version: 2,
}, },
} }
return rels
}
func TestRollbackCmd(t *testing.T) {
tests := []cmdTestCase{{ tests := []cmdTestCase{{
name: "rollback a release", name: "rollback a release",
cmd: "rollback funny-honey 1", cmd: "rollback funny-honey 1",
golden: "output/rollback.txt", golden: "output/rollback.txt",
rels: rels, rels: makeTestReleases(),
}, { }, {
name: "rollback a release with timeout", name: "rollback a release with timeout",
cmd: "rollback funny-honey 1 --timeout 120s", cmd: "rollback funny-honey 1 --timeout 120s",
golden: "output/rollback-timeout.txt", golden: "output/rollback-timeout.txt",
rels: rels, rels: makeTestReleases(),
}, { }, {
name: "rollback a release with wait", name: "rollback a release with wait",
cmd: "rollback funny-honey 1 --wait", cmd: "rollback funny-honey 1 --wait",
golden: "output/rollback-wait.txt", golden: "output/rollback-wait.txt",
rels: rels, rels: makeTestReleases(),
}, { }, {
name: "rollback a release without revision", name: "rollback a release without revision",
cmd: "rollback funny-honey", cmd: "rollback funny-honey",
golden: "output/rollback-no-revision.txt", golden: "output/rollback-no-revision.txt",
rels: rels, rels: makeTestReleases(),
}, { }, {
name: "rollback a release without release name", name: "rollback a release without release name",
cmd: "rollback", cmd: "rollback",
golden: "output/rollback-no-args.txt", golden: "output/rollback-no-args.txt",
rels: rels, rels: makeTestReleases(),
wantError: true, wantError: true,
}} }}
runTestCmd(t, tests) runTestCmd(t, tests)

@ -18,7 +18,6 @@ package storage // import "helm.sh/helm/v3/pkg/storage"
import ( import (
"fmt" "fmt"
"strings"
"github.com/pkg/errors" "github.com/pkg/errors"
@ -115,10 +114,6 @@ func (s *Storage) Deployed(name string) (*rspb.Release, error) {
return nil, err return nil, err
} }
if len(ls) == 0 {
return nil, errors.Errorf("%q has no deployed releases", name)
}
// If executed concurrently, Helm's database gets corrupted // If executed concurrently, Helm's database gets corrupted
// and multiple releases are DEPLOYED. Take the latest. // and multiple releases are DEPLOYED. Take the latest.
relutil.Reverse(ls, relutil.SortByRevision) relutil.Reverse(ls, relutil.SortByRevision)
@ -136,13 +131,13 @@ func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) {
"owner": "helm", "owner": "helm",
"status": "deployed", "status": "deployed",
}) })
if err == nil { if err != nil {
return ls, nil return nil, err
} }
if strings.Contains(err.Error(), "not found") { if len(ls) == 0 {
return nil, errors.Errorf("%q has no deployed releases", name) return nil, driver.ErrReleaseNotFound
} }
return nil, err return ls, nil
} }
// History returns the revision history for the release with the provided name, or // History returns the revision history for the release with the provided name, or
@ -150,7 +145,17 @@ func (s *Storage) DeployedAll(name string) ([]*rspb.Release, error) {
func (s *Storage) History(name string) ([]*rspb.Release, error) { func (s *Storage) History(name string) ([]*rspb.Release, error) {
s.Log("getting release history for %q", name) s.Log("getting release history for %q", name)
return s.Driver.Query(map[string]string{"name": name, "owner": "helm"}) ls, err := s.Driver.Query(map[string]string{
"name": name,
"owner": "helm",
})
if err != nil {
return nil, err
}
if len(ls) == 0 {
return nil, driver.ErrReleaseNotFound
}
return ls, nil
} }
// removeLeastRecent removes items from history until the lengh number of releases // removeLeastRecent removes items from history until the lengh number of releases
@ -205,9 +210,6 @@ func (s *Storage) Last(name string) (*rspb.Release, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(h) == 0 {
return nil, errors.Errorf("no revision for release %q", name)
}
relutil.Reverse(h, relutil.SortByRevision) relutil.Reverse(h, relutil.SortByRevision)
return h[0], nil return h[0], nil

@ -188,7 +188,7 @@ func TestStorageDeployed(t *testing.T) {
setup() setup()
rls, err := storage.Last(name) rls, err := storage.Deployed(name)
if err != nil { if err != nil {
t.Fatalf("Failed to query for deployed release: %s\n", err) t.Fatalf("Failed to query for deployed release: %s\n", err)
} }
@ -205,6 +205,17 @@ func TestStorageDeployed(t *testing.T) {
} }
} }
func TestStorageDeployedError(t *testing.T) {
storage := Init(driver.NewMemory())
const name = "angry-bird"
_, err := storage.Deployed(name)
if err != driver.ErrReleaseNotFound {
t.Fatalf("Expected ErrReleaseNotFound, got: %v", err)
}
}
func TestStorageDeployedWithCorruption(t *testing.T) { func TestStorageDeployedWithCorruption(t *testing.T) {
storage := Init(driver.NewMemory()) storage := Init(driver.NewMemory())

Loading…
Cancel
Save