github.com/darkowlzz/helm@v2.5.1-0.20171213183701-6707fe0468d4+incompatible/pkg/tiller/release_uninstall_test.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors All rights reserved. 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") { 154 t.Errorf("unexpected output: %s", res.Info) 155 } 156 } 157 } 158 159 func TestUninstallReleaseNoHooks(t *testing.T) { 160 c := helm.NewContext() 161 rs := rsFixture() 162 rs.env.Releases.Create(releaseStub()) 163 164 req := &services.UninstallReleaseRequest{ 165 Name: "angry-panda", 166 DisableHooks: true, 167 } 168 169 res, err := rs.UninstallRelease(c, req) 170 if err != nil { 171 t.Errorf("Failed uninstall: %s", err) 172 } 173 174 // The default value for a protobuf timestamp is nil. 175 if res.Release.Hooks[0].LastRun != nil { 176 t.Errorf("Expected LastRun to be zero, got %d.", res.Release.Hooks[0].LastRun.Seconds) 177 } 178 }