github.com/zsuzhengdu/helm@v3.0.0-beta.3+incompatible/pkg/action/list_test.go (about) 1 /* 2 Copyright The Helm Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package action 18 19 import ( 20 "testing" 21 22 "github.com/stretchr/testify/assert" 23 24 "helm.sh/helm/pkg/release" 25 "helm.sh/helm/pkg/storage" 26 ) 27 28 func TestListStates(t *testing.T) { 29 for input, expect := range map[string]ListStates{ 30 "deployed": ListDeployed, 31 "uninstalled": ListUninstalled, 32 "uninstalling": ListUninstalling, 33 "superseded": ListSuperseded, 34 "failed": ListFailed, 35 "pending-install": ListPendingInstall, 36 "pending-rollback": ListPendingRollback, 37 "pending-upgrade": ListPendingUpgrade, 38 "unknown": ListUnknown, 39 "totally made up key": ListUnknown, 40 } { 41 if expect != expect.FromName(input) { 42 t.Errorf("Expected %d for %s", expect, input) 43 } 44 // This is a cheap way to verify that ListAll actually allows everything but Unknown 45 if got := expect.FromName(input); got != ListUnknown && got&ListAll == 0 { 46 t.Errorf("Expected %s to match the ListAll filter", input) 47 } 48 } 49 50 filter := ListDeployed | ListPendingRollback 51 if status := filter.FromName("deployed"); filter&status == 0 { 52 t.Errorf("Expected %d to match mask %d", status, filter) 53 } 54 if status := filter.FromName("failed"); filter&status != 0 { 55 t.Errorf("Expected %d to fail to match mask %d", status, filter) 56 } 57 } 58 59 func TestList_Empty(t *testing.T) { 60 lister := NewList(actionConfigFixture(t)) 61 list, err := lister.Run() 62 assert.NoError(t, err) 63 assert.Len(t, list, 0) 64 } 65 66 func newListFixture(t *testing.T) *List { 67 return NewList(actionConfigFixture(t)) 68 } 69 70 func TestList_OneNamespace(t *testing.T) { 71 is := assert.New(t) 72 lister := newListFixture(t) 73 makeMeSomeReleases(lister.cfg.Releases, t) 74 list, err := lister.Run() 75 is.NoError(err) 76 is.Len(list, 3) 77 } 78 79 func TestList_AllNamespaces(t *testing.T) { 80 is := assert.New(t) 81 lister := newListFixture(t) 82 makeMeSomeReleases(lister.cfg.Releases, t) 83 lister.AllNamespaces = true 84 lister.SetStateMask() 85 list, err := lister.Run() 86 is.NoError(err) 87 is.Len(list, 3) 88 } 89 90 func TestList_Sort(t *testing.T) { 91 is := assert.New(t) 92 lister := newListFixture(t) 93 lister.Sort = ByNameDesc // Other sorts are tested elsewhere 94 makeMeSomeReleases(lister.cfg.Releases, t) 95 list, err := lister.Run() 96 is.NoError(err) 97 is.Len(list, 3) 98 is.Equal("two", list[0].Name) 99 is.Equal("three", list[1].Name) 100 is.Equal("one", list[2].Name) 101 } 102 103 func TestList_Limit(t *testing.T) { 104 is := assert.New(t) 105 lister := newListFixture(t) 106 lister.Limit = 2 107 makeMeSomeReleases(lister.cfg.Releases, t) 108 list, err := lister.Run() 109 is.NoError(err) 110 is.Len(list, 2) 111 // Lex order means one, three, two 112 is.Equal("one", list[0].Name) 113 is.Equal("three", list[1].Name) 114 } 115 116 func TestList_BigLimit(t *testing.T) { 117 is := assert.New(t) 118 lister := newListFixture(t) 119 lister.Limit = 20 120 makeMeSomeReleases(lister.cfg.Releases, t) 121 list, err := lister.Run() 122 is.NoError(err) 123 is.Len(list, 3) 124 125 // Lex order means one, three, two 126 is.Equal("one", list[0].Name) 127 is.Equal("three", list[1].Name) 128 is.Equal("two", list[2].Name) 129 } 130 131 func TestList_LimitOffset(t *testing.T) { 132 is := assert.New(t) 133 lister := newListFixture(t) 134 lister.Limit = 2 135 lister.Offset = 1 136 makeMeSomeReleases(lister.cfg.Releases, t) 137 list, err := lister.Run() 138 is.NoError(err) 139 is.Len(list, 2) 140 141 // Lex order means one, three, two 142 is.Equal("three", list[0].Name) 143 is.Equal("two", list[1].Name) 144 } 145 146 func TestList_LimitOffsetOutOfBounds(t *testing.T) { 147 is := assert.New(t) 148 lister := newListFixture(t) 149 lister.Limit = 2 150 lister.Offset = 3 // Last item is index 2 151 makeMeSomeReleases(lister.cfg.Releases, t) 152 list, err := lister.Run() 153 is.NoError(err) 154 is.Len(list, 0) 155 156 lister.Limit = 10 157 lister.Offset = 1 158 list, err = lister.Run() 159 is.NoError(err) 160 is.Len(list, 2) 161 } 162 func TestList_StateMask(t *testing.T) { 163 is := assert.New(t) 164 lister := newListFixture(t) 165 makeMeSomeReleases(lister.cfg.Releases, t) 166 one, err := lister.cfg.Releases.Get("one", 1) 167 is.NoError(err) 168 one.SetStatus(release.StatusUninstalled, "uninstalled") 169 lister.cfg.Releases.Update(one) 170 171 res, err := lister.Run() 172 is.NoError(err) 173 is.Len(res, 2) 174 is.Equal("three", res[0].Name) 175 is.Equal("two", res[1].Name) 176 177 lister.StateMask = ListUninstalled 178 res, err = lister.Run() 179 is.NoError(err) 180 is.Len(res, 1) 181 is.Equal("one", res[0].Name) 182 183 lister.StateMask |= ListDeployed 184 res, err = lister.Run() 185 is.NoError(err) 186 is.Len(res, 3) 187 } 188 189 func TestList_Filter(t *testing.T) { 190 is := assert.New(t) 191 lister := newListFixture(t) 192 lister.Filter = "th." 193 makeMeSomeReleases(lister.cfg.Releases, t) 194 195 res, err := lister.Run() 196 is.NoError(err) 197 is.Len(res, 1) 198 is.Equal("three", res[0].Name) 199 } 200 201 func TestList_FilterFailsCompile(t *testing.T) { 202 is := assert.New(t) 203 lister := newListFixture(t) 204 lister.Filter = "t[h.{{{" 205 makeMeSomeReleases(lister.cfg.Releases, t) 206 207 _, err := lister.Run() 208 is.Error(err) 209 } 210 211 func makeMeSomeReleases(store *storage.Storage, t *testing.T) { 212 t.Helper() 213 one := releaseStub() 214 one.Name = "one" 215 one.Namespace = "default" 216 one.Version = 1 217 two := releaseStub() 218 two.Name = "two" 219 two.Namespace = "default" 220 two.Version = 2 221 three := releaseStub() 222 three.Name = "three" 223 three.Namespace = "default" 224 three.Version = 3 225 four := releaseStub() 226 four.Name = "four" 227 four.Namespace = "default" 228 four.Version = 4 229 four.Info.Status = release.StatusSuperseded 230 231 for _, rel := range []*release.Release{one, two, three} { 232 if err := store.Create(rel); err != nil { 233 t.Fatal(err) 234 } 235 } 236 237 all, err := store.ListReleases() 238 assert.NoError(t, err) 239 assert.Len(t, all, 3, "sanity test: three items added") 240 }