diff --git a/state/state.go b/state/state.go index 38237212..f13f218a 100644 --- a/state/state.go +++ b/state/state.go @@ -464,6 +464,9 @@ func (state *HelmState) FilterReleases(labels []string) error { for _, r := range releaseSet { filteredReleases = append(filteredReleases, r) } + if len(filteredReleases) == 0 { + return errors.New("Specified selector did not match any releases.\n") + } state.Releases = filteredReleases return nil } diff --git a/state/state_test.go b/state/state_test.go index f3a785ab..97d435b5 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -825,3 +825,49 @@ func TestHelmState_TestReleasesNoCleanUp(t *testing.T) { t.Run(tt.name, i) } } + +func TestHelmState_NoReleaseMatched(t *testing.T) { + releases := []ReleaseSpec{ + { + Name: "releaseA", + Labels: map[string]string{ + "foo": "bar", + }, + }, + } + tests := []struct { + name string + labels string + wantErr bool + }{ + { + name: "happy path", + + labels: "foo=bar", + wantErr: false, + }, + { + name: "name does not exist", + labels: "name=releaseB", + wantErr: true, + }, + { + name: "label does not match anything", + labels: "foo=notbar", + wantErr: true, + }, + } + for _, tt := range tests { + i := func(t *testing.T) { + state := &HelmState{ + Releases: releases, + } + errs := state.FilterReleases([]string{tt.labels}) + if (errs != nil) != tt.wantErr { + t.Errorf("ReleaseStatuses() for %s error = %v, wantErr %v", tt.name, errs, tt.wantErr) + return + } + } + t.Run(tt.name, i) + } +}