github.com/felipejfc/helm@v2.1.2+incompatible/pkg/storage/driver/cfgmaps_test.go (about) 1 /* 2 Copyright 2016 The Kubernetes Authors All rights reserved. 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 http://www.apache.org/licenses/LICENSE-2.0 7 Unless required by applicable law or agreed to in writing, software 8 distributed under the License is distributed on an "AS IS" BASIS, 9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 See the License for the specific language governing permissions and 11 limitations under the License. 12 */ 13 14 package driver 15 16 import ( 17 "encoding/base64" 18 "reflect" 19 "testing" 20 21 "github.com/gogo/protobuf/proto" 22 "k8s.io/kubernetes/pkg/api" 23 24 rspb "k8s.io/helm/pkg/proto/hapi/release" 25 ) 26 27 func TestConfigMapName(t *testing.T) { 28 c := newTestFixtureCfgMaps(t) 29 if c.Name() != ConfigMapsDriverName { 30 t.Errorf("Expected name to be %q, got %q", ConfigMapsDriverName, c.Name()) 31 } 32 } 33 34 func TestConfigMapGet(t *testing.T) { 35 vers := int32(1) 36 name := "smug-pigeon" 37 key := testKey(name, vers) 38 rel := releaseStub(name, vers, rspb.Status_DEPLOYED) 39 40 cfgmaps := newTestFixtureCfgMaps(t, []*rspb.Release{rel}...) 41 42 // get release with key 43 got, err := cfgmaps.Get(key) 44 if err != nil { 45 t.Fatalf("Failed to get release: %s", err) 46 } 47 // compare fetched release with original 48 if !reflect.DeepEqual(rel, got) { 49 t.Errorf("Expected {%q}, got {%q}", rel, got) 50 } 51 } 52 53 func TestUNcompressedConfigMapGet(t *testing.T) { 54 vers := int32(1) 55 name := "smug-pigeon" 56 key := testKey(name, vers) 57 rel := releaseStub(name, vers, rspb.Status_DEPLOYED) 58 59 // Create a test fixture which contains an uncompressed release 60 cfgmap, err := newConfigMapsObject(key, rel, nil) 61 if err != nil { 62 t.Fatalf("Failed to create configmap: %s", err) 63 } 64 b, err := proto.Marshal(rel) 65 if err != nil { 66 t.Fatalf("Failed to marshal release: %s", err) 67 } 68 cfgmap.Data["release"] = base64.StdEncoding.EncodeToString(b) 69 var mock MockConfigMapsInterface 70 mock.objects = map[string]*api.ConfigMap{key: cfgmap} 71 cfgmaps := NewConfigMaps(&mock) 72 73 // get release with key 74 got, err := cfgmaps.Get(key) 75 if err != nil { 76 t.Fatalf("Failed to get release: %s", err) 77 } 78 // compare fetched release with original 79 if !reflect.DeepEqual(rel, got) { 80 t.Errorf("Expected {%q}, got {%q}", rel, got) 81 } 82 } 83 84 func TestConfigMapList(t *testing.T) { 85 cfgmaps := newTestFixtureCfgMaps(t, []*rspb.Release{ 86 releaseStub("key-1", 1, rspb.Status_DELETED), 87 releaseStub("key-2", 1, rspb.Status_DELETED), 88 releaseStub("key-3", 1, rspb.Status_DEPLOYED), 89 releaseStub("key-4", 1, rspb.Status_DEPLOYED), 90 releaseStub("key-5", 1, rspb.Status_SUPERSEDED), 91 releaseStub("key-6", 1, rspb.Status_SUPERSEDED), 92 }...) 93 94 // list all deleted releases 95 del, err := cfgmaps.List(func(rel *rspb.Release) bool { 96 return rel.Info.Status.Code == rspb.Status_DELETED 97 }) 98 // check 99 if err != nil { 100 t.Errorf("Failed to list deleted: %s", err) 101 } 102 if len(del) != 2 { 103 t.Errorf("Expected 2 deleted, got %d:\n%v\n", len(del), del) 104 } 105 106 // list all deployed releases 107 dpl, err := cfgmaps.List(func(rel *rspb.Release) bool { 108 return rel.Info.Status.Code == rspb.Status_DEPLOYED 109 }) 110 // check 111 if err != nil { 112 t.Errorf("Failed to list deployed: %s", err) 113 } 114 if len(dpl) != 2 { 115 t.Errorf("Expected 2 deployed, got %d", len(dpl)) 116 } 117 118 // list all superseded releases 119 ssd, err := cfgmaps.List(func(rel *rspb.Release) bool { 120 return rel.Info.Status.Code == rspb.Status_SUPERSEDED 121 }) 122 // check 123 if err != nil { 124 t.Errorf("Failed to list superseded: %s", err) 125 } 126 if len(ssd) != 2 { 127 t.Errorf("Expected 2 superseded, got %d", len(ssd)) 128 } 129 } 130 131 func TestConfigMapCreate(t *testing.T) { 132 cfgmaps := newTestFixtureCfgMaps(t) 133 134 vers := int32(1) 135 name := "smug-pigeon" 136 key := testKey(name, vers) 137 rel := releaseStub(name, vers, rspb.Status_DEPLOYED) 138 139 // store the release in a configmap 140 if err := cfgmaps.Create(key, rel); err != nil { 141 t.Fatalf("Failed to create release with key %q: %s", key, err) 142 } 143 144 // get the release back 145 got, err := cfgmaps.Get(key) 146 if err != nil { 147 t.Fatalf("Failed to get release with key %q: %s", key, err) 148 } 149 150 // compare created release with original 151 if !reflect.DeepEqual(rel, got) { 152 t.Errorf("Expected {%q}, got {%q}", rel, got) 153 } 154 } 155 156 func TestConfigMapUpdate(t *testing.T) { 157 vers := int32(1) 158 name := "smug-pigeon" 159 key := testKey(name, vers) 160 rel := releaseStub(name, vers, rspb.Status_DEPLOYED) 161 162 cfgmaps := newTestFixtureCfgMaps(t, []*rspb.Release{rel}...) 163 164 // modify release status code 165 rel.Info.Status.Code = rspb.Status_SUPERSEDED 166 167 // perform the update 168 if err := cfgmaps.Update(key, rel); err != nil { 169 t.Fatalf("Failed to update release: %s", err) 170 } 171 172 // fetch the updated release 173 got, err := cfgmaps.Get(key) 174 if err != nil { 175 t.Fatalf("Failed to get release with key %q: %s", key, err) 176 } 177 178 // check release has actually been updated by comparing modified fields 179 if rel.Info.Status.Code != got.Info.Status.Code { 180 t.Errorf("Expected status %s, got status %s", rel.Info.Status.Code, got.Info.Status.Code) 181 } 182 }