github.com/darkowlzz/helm@v2.5.1-0.20171213183701-6707fe0468d4+incompatible/pkg/helm/fake_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 helm 18 19 import ( 20 "reflect" 21 "testing" 22 23 "k8s.io/helm/pkg/proto/hapi/chart" 24 "k8s.io/helm/pkg/proto/hapi/release" 25 rls "k8s.io/helm/pkg/proto/hapi/services" 26 ) 27 28 func TestFakeClient_ReleaseStatus(t *testing.T) { 29 releasePresent := ReleaseMock(&MockReleaseOptions{Name: "release-present"}) 30 releaseNotPresent := ReleaseMock(&MockReleaseOptions{Name: "release-not-present"}) 31 32 type fields struct { 33 Rels []*release.Release 34 } 35 type args struct { 36 rlsName string 37 opts []StatusOption 38 } 39 tests := []struct { 40 name string 41 fields fields 42 args args 43 want *rls.GetReleaseStatusResponse 44 wantErr bool 45 }{ 46 { 47 name: "Get a single release that exists", 48 fields: fields{ 49 Rels: []*release.Release{ 50 releasePresent, 51 }, 52 }, 53 args: args{ 54 rlsName: releasePresent.Name, 55 opts: nil, 56 }, 57 want: &rls.GetReleaseStatusResponse{ 58 Name: releasePresent.Name, 59 Info: releasePresent.Info, 60 Namespace: releasePresent.Namespace, 61 }, 62 63 wantErr: false, 64 }, 65 { 66 name: "Get a release that does not exist", 67 fields: fields{ 68 Rels: []*release.Release{ 69 releasePresent, 70 }, 71 }, 72 args: args{ 73 rlsName: releaseNotPresent.Name, 74 opts: nil, 75 }, 76 want: nil, 77 wantErr: true, 78 }, 79 { 80 name: "Get a single release that exists from list", 81 fields: fields{ 82 Rels: []*release.Release{ 83 ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin", Namespace: "default"}), 84 ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir", Namespace: "default"}), 85 releasePresent, 86 }, 87 }, 88 args: args{ 89 rlsName: releasePresent.Name, 90 opts: nil, 91 }, 92 want: &rls.GetReleaseStatusResponse{ 93 Name: releasePresent.Name, 94 Info: releasePresent.Info, 95 Namespace: releasePresent.Namespace, 96 }, 97 98 wantErr: false, 99 }, 100 } 101 102 for _, tt := range tests { 103 t.Run(tt.name, func(t *testing.T) { 104 c := &FakeClient{ 105 Rels: tt.fields.Rels, 106 } 107 got, err := c.ReleaseStatus(tt.args.rlsName, tt.args.opts...) 108 if (err != nil) != tt.wantErr { 109 t.Errorf("FakeClient.ReleaseStatus() error = %v, wantErr %v", err, tt.wantErr) 110 return 111 } 112 if !reflect.DeepEqual(got, tt.want) { 113 t.Errorf("FakeClient.ReleaseStatus() = %v, want %v", got, tt.want) 114 } 115 }) 116 } 117 } 118 119 func TestFakeClient_InstallReleaseFromChart(t *testing.T) { 120 installChart := &chart.Chart{} 121 type fields struct { 122 Rels []*release.Release 123 } 124 type args struct { 125 ns string 126 opts []InstallOption 127 } 128 tests := []struct { 129 name string 130 fields fields 131 args args 132 want *rls.InstallReleaseResponse 133 relsAfter []*release.Release 134 wantErr bool 135 }{ 136 { 137 name: "Add release to an empty list.", 138 fields: fields{ 139 Rels: []*release.Release{}, 140 }, 141 args: args{ 142 ns: "default", 143 opts: []InstallOption{ReleaseName("new-release")}, 144 }, 145 want: &rls.InstallReleaseResponse{ 146 Release: ReleaseMock(&MockReleaseOptions{Name: "new-release"}), 147 }, 148 relsAfter: []*release.Release{ 149 ReleaseMock(&MockReleaseOptions{Name: "new-release"}), 150 }, 151 wantErr: false, 152 }, 153 { 154 name: "Try to add a release where the name already exists.", 155 fields: fields{ 156 Rels: []*release.Release{ 157 ReleaseMock(&MockReleaseOptions{Name: "new-release"}), 158 }, 159 }, 160 args: args{ 161 ns: "default", 162 opts: []InstallOption{ReleaseName("new-release")}, 163 }, 164 relsAfter: []*release.Release{ 165 ReleaseMock(&MockReleaseOptions{Name: "new-release"}), 166 }, 167 want: nil, 168 wantErr: true, 169 }, 170 } 171 for _, tt := range tests { 172 t.Run(tt.name, func(t *testing.T) { 173 c := &FakeClient{ 174 Rels: tt.fields.Rels, 175 } 176 got, err := c.InstallReleaseFromChart(installChart, tt.args.ns, tt.args.opts...) 177 if (err != nil) != tt.wantErr { 178 t.Errorf("FakeClient.InstallReleaseFromChart() error = %v, wantErr %v", err, tt.wantErr) 179 return 180 } 181 if !reflect.DeepEqual(got, tt.want) { 182 t.Errorf("FakeClient.InstallReleaseFromChart() = %v, want %v", got, tt.want) 183 } 184 if !reflect.DeepEqual(c.Rels, tt.relsAfter) { 185 t.Errorf("FakeClient.InstallReleaseFromChart() rels = %v, expected %v", got, tt.relsAfter) 186 } 187 }) 188 } 189 } 190 191 func TestFakeClient_DeleteRelease(t *testing.T) { 192 type fields struct { 193 Rels []*release.Release 194 } 195 type args struct { 196 rlsName string 197 opts []DeleteOption 198 } 199 tests := []struct { 200 name string 201 fields fields 202 args args 203 want *rls.UninstallReleaseResponse 204 relsAfter []*release.Release 205 wantErr bool 206 }{ 207 { 208 name: "Delete a release that exists.", 209 fields: fields{ 210 Rels: []*release.Release{ 211 ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}), 212 ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 213 }, 214 }, 215 args: args{ 216 rlsName: "trepid-tapir", 217 opts: []DeleteOption{}, 218 }, 219 relsAfter: []*release.Release{ 220 ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}), 221 }, 222 want: &rls.UninstallReleaseResponse{ 223 Release: ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 224 }, 225 wantErr: false, 226 }, 227 { 228 name: "Delete a release that does not exist.", 229 fields: fields{ 230 Rels: []*release.Release{ 231 ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}), 232 ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 233 }, 234 }, 235 args: args{ 236 rlsName: "release-that-does-not-exists", 237 opts: []DeleteOption{}, 238 }, 239 relsAfter: []*release.Release{ 240 ReleaseMock(&MockReleaseOptions{Name: "angry-dolphin"}), 241 ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 242 }, 243 want: nil, 244 wantErr: true, 245 }, 246 { 247 name: "Delete when only 1 item exists.", 248 fields: fields{ 249 Rels: []*release.Release{ 250 ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 251 }, 252 }, 253 args: args{ 254 rlsName: "trepid-tapir", 255 opts: []DeleteOption{}, 256 }, 257 relsAfter: []*release.Release{}, 258 want: &rls.UninstallReleaseResponse{ 259 Release: ReleaseMock(&MockReleaseOptions{Name: "trepid-tapir"}), 260 }, 261 wantErr: false, 262 }, 263 } 264 for _, tt := range tests { 265 t.Run(tt.name, func(t *testing.T) { 266 c := &FakeClient{ 267 Rels: tt.fields.Rels, 268 } 269 got, err := c.DeleteRelease(tt.args.rlsName, tt.args.opts...) 270 if (err != nil) != tt.wantErr { 271 t.Errorf("FakeClient.DeleteRelease() error = %v, wantErr %v", err, tt.wantErr) 272 return 273 } 274 if !reflect.DeepEqual(got, tt.want) { 275 t.Errorf("FakeClient.DeleteRelease() = %v, want %v", got, tt.want) 276 } 277 278 if !reflect.DeepEqual(c.Rels, tt.relsAfter) { 279 t.Errorf("FakeClient.InstallReleaseFromChart() rels = %v, expected %v", got, tt.relsAfter) 280 } 281 }) 282 } 283 }