github.com/darkowlzz/helm@v2.5.1-0.20171213183701-6707fe0468d4+incompatible/pkg/tiller/release_list_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 "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 }