github.com/koderover/helm@v2.17.0+incompatible/pkg/tiller/release_uninstall_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 tiller 18 19 import ( 20 "strings" 21 "testing" 22 23 "k8s.io/helm/pkg/helm" 24 "k8s.io/helm/pkg/proto/hapi/release" 25 "k8s.io/helm/pkg/proto/hapi/services" 26 ) 27 28 func TestUninstallRelease(t *testing.T) { 29 c := helm.NewContext() 30 rs := rsFixture() 31 rs.env.Releases.Create(releaseStub()) 32 33 req := &services.UninstallReleaseRequest{ 34 Name: "angry-panda", 35 } 36 37 res, err := rs.UninstallRelease(c, req) 38 if err != nil { 39 t.Fatalf("Failed uninstall: %s", err) 40 } 41 42 if res.Release.Name != "angry-panda" { 43 t.Errorf("Expected angry-panda, got %q", res.Release.Name) 44 } 45 46 if res.Release.Info.Status.Code != release.Status_DELETED { 47 t.Errorf("Expected status code to be DELETED, got %d", res.Release.Info.Status.Code) 48 } 49 50 if res.Release.Hooks[0].LastRun.Seconds == 0 { 51 t.Error("Expected LastRun to be greater than zero.") 52 } 53 54 if res.Release.Info.Deleted.Seconds <= 0 { 55 t.Errorf("Expected valid UNIX date, got %d", res.Release.Info.Deleted.Seconds) 56 } 57 58 if res.Release.Info.Description != "Deletion complete" { 59 t.Errorf("Expected Deletion complete, got %q", res.Release.Info.Description) 60 } 61 } 62 63 func TestUninstallPurgeRelease(t *testing.T) { 64 c := helm.NewContext() 65 rs := rsFixture() 66 rel := releaseStub() 67 rs.env.Releases.Create(rel) 68 upgradedRel := upgradeReleaseVersion(rel) 69 rs.env.Releases.Update(rel) 70 rs.env.Releases.Create(upgradedRel) 71 72 req := &services.UninstallReleaseRequest{ 73 Name: "angry-panda", 74 Purge: true, 75 } 76 77 res, err := rs.UninstallRelease(c, req) 78 if err != nil { 79 t.Fatalf("Failed uninstall: %s", err) 80 } 81 82 if res.Release.Name != "angry-panda" { 83 t.Errorf("Expected angry-panda, got %q", res.Release.Name) 84 } 85 86 if res.Release.Info.Status.Code != release.Status_DELETED { 87 t.Errorf("Expected status code to be DELETED, got %d", res.Release.Info.Status.Code) 88 } 89 90 if res.Release.Info.Deleted.Seconds <= 0 { 91 t.Errorf("Expected valid UNIX date, got %d", res.Release.Info.Deleted.Seconds) 92 } 93 rels, err := rs.GetHistory(helm.NewContext(), &services.GetHistoryRequest{Name: "angry-panda"}) 94 if err != nil { 95 t.Fatal(err) 96 } 97 if len(rels.Releases) != 0 { 98 t.Errorf("Expected no releases in storage, got %d", len(rels.Releases)) 99 } 100 } 101 102 func TestUninstallPurgeDeleteRelease(t *testing.T) { 103 c := helm.NewContext() 104 rs := rsFixture() 105 rs.env.Releases.Create(releaseStub()) 106 107 req := &services.UninstallReleaseRequest{ 108 Name: "angry-panda", 109 } 110 111 _, err := rs.UninstallRelease(c, req) 112 if err != nil { 113 t.Fatalf("Failed uninstall: %s", err) 114 } 115 116 req2 := &services.UninstallReleaseRequest{ 117 Name: "angry-panda", 118 Purge: true, 119 } 120 121 _, err2 := rs.UninstallRelease(c, req2) 122 if err2 != nil && err2.Error() != "'angry-panda' has no deployed releases" { 123 t.Errorf("Failed uninstall: %s", err2) 124 } 125 } 126 127 func TestUninstallReleaseWithKeepPolicy(t *testing.T) { 128 c := helm.NewContext() 129 rs := rsFixture() 130 name := "angry-bunny" 131 rs.env.Releases.Create(releaseWithKeepStub(name)) 132 133 req := &services.UninstallReleaseRequest{ 134 Name: name, 135 } 136 137 res, err := rs.UninstallRelease(c, req) 138 if err != nil { 139 t.Fatalf("Failed uninstall: %s", err) 140 } 141 142 if res.Release.Name != name { 143 t.Errorf("Expected angry-bunny, got %q", res.Release.Name) 144 } 145 146 if res.Release.Info.Status.Code != release.Status_DELETED { 147 t.Errorf("Expected status code to be DELETED, got %d", res.Release.Info.Status.Code) 148 } 149 150 if res.Info == "" { 151 t.Errorf("Expected response info to not be empty") 152 } else { 153 if !strings.Contains(res.Info, "[ConfigMap] test-cm-keep-a") { 154 t.Errorf("unexpected output: %s", res.Info) 155 } 156 if !strings.Contains(res.Info, "[ConfigMap] test-cm-keep-b") { 157 t.Errorf("unexpected output: %s", res.Info) 158 } 159 } 160 } 161 162 func TestUninstallReleaseNoHooks(t *testing.T) { 163 c := helm.NewContext() 164 rs := rsFixture() 165 rs.env.Releases.Create(releaseStub()) 166 167 req := &services.UninstallReleaseRequest{ 168 Name: "angry-panda", 169 DisableHooks: true, 170 } 171 172 res, err := rs.UninstallRelease(c, req) 173 if err != nil { 174 t.Errorf("Failed uninstall: %s", err) 175 } 176 177 // The default value for a protobuf timestamp is nil. 178 if res.Release.Hooks[0].LastRun != nil { 179 t.Errorf("Expected LastRun to be zero, got %d.", res.Release.Hooks[0].LastRun.Seconds) 180 } 181 } 182 183 func TestUninstallReleaseCustomDescription(t *testing.T) { 184 c := helm.NewContext() 185 rs := rsFixture() 186 rs.env.Releases.Create(releaseStub()) 187 188 customDescription := "foo" 189 req := &services.UninstallReleaseRequest{ 190 Name: "angry-panda", 191 Description: "foo", 192 } 193 194 res, err := rs.UninstallRelease(c, req) 195 if err != nil { 196 t.Errorf("Failed uninstall: %s", err) 197 } 198 199 if res.Release.Info.Description != customDescription { 200 t.Errorf("Expected description to be %q, got %q", customDescription, res.Release.Info.Description) 201 } 202 } 203 204 func TestUninstallReleaseObjectNotFoundError(t *testing.T) { 205 c := helm.NewContext() 206 rs := rsFixture() 207 rel := releaseStub() 208 manifest := `kind: ConfigMap 209 metadata: 210 name: configmap-foo 211 data: 212 name: value 213 ` 214 215 rel.Manifest = manifest 216 rs.env.Releases.Create(rel) 217 rs.env.KubeClient = newDeleteFailingKubeClient() 218 219 req := &services.UninstallReleaseRequest{ 220 Name: "angry-panda", 221 } 222 223 _, err := rs.UninstallRelease(c, req) 224 if err == nil { 225 t.Fatalf("Expected failure to delete") 226 } 227 if !strings.Contains(err.Error(), "configmap-foo") { 228 t.Errorf("Expected delete error message to contain object name, got:" + err.Error()) 229 } 230 }