Skip to content

Commit 22db973

Browse files
author
fibonacci1729
committed
ref(tiller): refactor tests into logical files
TestListReleasesByStatus -> tiller/release_list_test.go TestListReleasesFilter -> tiller/release_list_test.go TestListReleasesSort -> tiller/release_list_test.go TestListReleases -> tiller/release_list_test.go TestUpdateRelease_ResetReuseValues -> tiller/release_update_test.go TestUpdateRelease_ResetValues -> tiller/release_update_test.go TestUpdateRelease_ReuseValues -> tiller/release_update_test.go TestUpdateReleaseNoChanges -> tiller/release_update_test.go TestUpdateReleaseFailure -> tiller/release_update_test.go TestUpdateReleaseNoHooks -> tiller/release_update_test.go TestUpdateRelease -> tiller/release_update_test.go TestRollbackReleaesFailure -> tiller/release_rollback_test.go
1 parent b22950c commit 22db973

4 files changed

+552
-501
lines changed

pkg/tiller/release_list_test.go

+233
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
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+
"fmt"
21+
"testing"
22+
23+
"k8s.io/helm/pkg/proto/hapi/release"
24+
"k8s.io/helm/pkg/proto/hapi/services"
25+
)
26+
27+
func TestListReleases(t *testing.T) {
28+
rs := rsFixture()
29+
num := 7
30+
for i := 0; i < num; i++ {
31+
rel := releaseStub()
32+
rel.Name = fmt.Sprintf("rel-%d", i)
33+
if err := rs.env.Releases.Create(rel); err != nil {
34+
t.Fatalf("Could not store mock release: %s", err)
35+
}
36+
}
37+
38+
mrs := &mockListServer{}
39+
if err := rs.ListReleases(&services.ListReleasesRequest{Offset: "", Limit: 64}, mrs); err != nil {
40+
t.Fatalf("Failed listing: %s", err)
41+
}
42+
43+
if len(mrs.val.Releases) != num {
44+
t.Errorf("Expected %d releases, got %d", num, len(mrs.val.Releases))
45+
}
46+
}
47+
48+
func TestListReleasesByStatus(t *testing.T) {
49+
rs := rsFixture()
50+
stubs := []*release.Release{
51+
namedReleaseStub("kamal", release.Status_DEPLOYED),
52+
namedReleaseStub("astrolabe", release.Status_DELETED),
53+
namedReleaseStub("octant", release.Status_FAILED),
54+
namedReleaseStub("sextant", release.Status_UNKNOWN),
55+
}
56+
for _, stub := range stubs {
57+
if err := rs.env.Releases.Create(stub); err != nil {
58+
t.Fatalf("Could not create stub: %s", err)
59+
}
60+
}
61+
62+
tests := []struct {
63+
statusCodes []release.Status_Code
64+
names []string
65+
}{
66+
{
67+
names: []string{"kamal"},
68+
statusCodes: []release.Status_Code{release.Status_DEPLOYED},
69+
},
70+
{
71+
names: []string{"astrolabe"},
72+
statusCodes: []release.Status_Code{release.Status_DELETED},
73+
},
74+
{
75+
names: []string{"kamal", "octant"},
76+
statusCodes: []release.Status_Code{release.Status_DEPLOYED, release.Status_FAILED},
77+
},
78+
{
79+
names: []string{"kamal", "astrolabe", "octant", "sextant"},
80+
statusCodes: []release.Status_Code{
81+
release.Status_DEPLOYED,
82+
release.Status_DELETED,
83+
release.Status_FAILED,
84+
release.Status_UNKNOWN,
85+
},
86+
},
87+
}
88+
89+
for i, tt := range tests {
90+
mrs := &mockListServer{}
91+
if err := rs.ListReleases(&services.ListReleasesRequest{StatusCodes: tt.statusCodes, Offset: "", Limit: 64}, mrs); err != nil {
92+
t.Fatalf("Failed listing %d: %s", i, err)
93+
}
94+
95+
if len(tt.names) != len(mrs.val.Releases) {
96+
t.Fatalf("Expected %d releases, got %d", len(tt.names), len(mrs.val.Releases))
97+
}
98+
99+
for _, name := range tt.names {
100+
found := false
101+
for _, rel := range mrs.val.Releases {
102+
if rel.Name == name {
103+
found = true
104+
}
105+
}
106+
if !found {
107+
t.Errorf("%d: Did not find name %q", i, name)
108+
}
109+
}
110+
}
111+
}
112+
113+
func TestListReleasesSort(t *testing.T) {
114+
rs := rsFixture()
115+
116+
// Put them in by reverse order so that the mock doesn't "accidentally"
117+
// sort.
118+
num := 7
119+
for i := num; i > 0; i-- {
120+
rel := releaseStub()
121+
rel.Name = fmt.Sprintf("rel-%d", i)
122+
if err := rs.env.Releases.Create(rel); err != nil {
123+
t.Fatalf("Could not store mock release: %s", err)
124+
}
125+
}
126+
127+
limit := 6
128+
mrs := &mockListServer{}
129+
req := &services.ListReleasesRequest{
130+
Offset: "",
131+
Limit: int64(limit),
132+
SortBy: services.ListSort_NAME,
133+
}
134+
if err := rs.ListReleases(req, mrs); err != nil {
135+
t.Fatalf("Failed listing: %s", err)
136+
}
137+
138+
if len(mrs.val.Releases) != limit {
139+
t.Errorf("Expected %d releases, got %d", limit, len(mrs.val.Releases))
140+
}
141+
142+
for i := 0; i < limit; i++ {
143+
n := fmt.Sprintf("rel-%d", i+1)
144+
if mrs.val.Releases[i].Name != n {
145+
t.Errorf("Expected %q, got %q", n, mrs.val.Releases[i].Name)
146+
}
147+
}
148+
}
149+
150+
func TestListReleasesFilter(t *testing.T) {
151+
rs := rsFixture()
152+
names := []string{
153+
"axon",
154+
"dendrite",
155+
"neuron",
156+
"neuroglia",
157+
"synapse",
158+
"nucleus",
159+
"organelles",
160+
}
161+
num := 7
162+
for i := 0; i < num; i++ {
163+
rel := releaseStub()
164+
rel.Name = names[i]
165+
if err := rs.env.Releases.Create(rel); err != nil {
166+
t.Fatalf("Could not store mock release: %s", err)
167+
}
168+
}
169+
170+
mrs := &mockListServer{}
171+
req := &services.ListReleasesRequest{
172+
Offset: "",
173+
Limit: 64,
174+
Filter: "neuro[a-z]+",
175+
SortBy: services.ListSort_NAME,
176+
}
177+
if err := rs.ListReleases(req, mrs); err != nil {
178+
t.Fatalf("Failed listing: %s", err)
179+
}
180+
181+
if len(mrs.val.Releases) != 2 {
182+
t.Errorf("Expected 2 releases, got %d", len(mrs.val.Releases))
183+
}
184+
185+
if mrs.val.Releases[0].Name != "neuroglia" {
186+
t.Errorf("Unexpected sort order: %v.", mrs.val.Releases)
187+
}
188+
if mrs.val.Releases[1].Name != "neuron" {
189+
t.Errorf("Unexpected sort order: %v.", mrs.val.Releases)
190+
}
191+
}
192+
193+
func TestReleasesNamespace(t *testing.T) {
194+
rs := rsFixture()
195+
196+
names := []string{
197+
"axon",
198+
"dendrite",
199+
"neuron",
200+
"ribosome",
201+
}
202+
203+
namespaces := []string{
204+
"default",
205+
"test123",
206+
"test123",
207+
"cerebellum",
208+
}
209+
num := 4
210+
for i := 0; i < num; i++ {
211+
rel := releaseStub()
212+
rel.Name = names[i]
213+
rel.Namespace = namespaces[i]
214+
if err := rs.env.Releases.Create(rel); err != nil {
215+
t.Fatalf("Could not store mock release: %s", err)
216+
}
217+
}
218+
219+
mrs := &mockListServer{}
220+
req := &services.ListReleasesRequest{
221+
Offset: "",
222+
Limit: 64,
223+
Namespace: "test123",
224+
}
225+
226+
if err := rs.ListReleases(req, mrs); err != nil {
227+
t.Fatalf("Failed listing: %s", err)
228+
}
229+
230+
if len(mrs.val.Releases) != 2 {
231+
t.Errorf("Expected 2 releases, got %d", len(mrs.val.Releases))
232+
}
233+
}

pkg/tiller/release_rollback_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -191,3 +191,36 @@ func TestRollbackReleaseNoHooks(t *testing.T) {
191191
t.Errorf("Expected that no hooks were run. Got %d", hl)
192192
}
193193
}
194+
195+
func TestRollbackReleaseFailure(t *testing.T) {
196+
c := helm.NewContext()
197+
rs := rsFixture()
198+
rel := releaseStub()
199+
rs.env.Releases.Create(rel)
200+
upgradedRel := upgradeReleaseVersion(rel)
201+
rs.env.Releases.Update(rel)
202+
rs.env.Releases.Create(upgradedRel)
203+
204+
req := &services.RollbackReleaseRequest{
205+
Name: rel.Name,
206+
DisableHooks: true,
207+
}
208+
209+
rs.env.KubeClient = newUpdateFailingKubeClient()
210+
res, err := rs.RollbackRelease(c, req)
211+
if err == nil {
212+
t.Error("Expected failed rollback")
213+
}
214+
215+
if targetStatus := res.Release.Info.Status.Code; targetStatus != release.Status_FAILED {
216+
t.Errorf("Expected FAILED release. Got %v", targetStatus)
217+
}
218+
219+
oldRelease, err := rs.env.Releases.Get(rel.Name, rel.Version)
220+
if err != nil {
221+
t.Errorf("Expected to be able to get previous release")
222+
}
223+
if oldStatus := oldRelease.Info.Status.Code; oldStatus != release.Status_SUPERSEDED {
224+
t.Errorf("Expected SUPERSEDED status on previous Release version. Got %v", oldStatus)
225+
}
226+
}

0 commit comments

Comments
 (0)