github.com/latiif/helm@v2.15.0+incompatible/pkg/storage/driver/secrets_test.go (about) 1 /* 2 Copyright The Helm Authors. 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 "testing" 19 20 "github.com/gogo/protobuf/proto" 21 "k8s.io/api/core/v1" 22 23 rspb "k8s.io/helm/pkg/proto/hapi/release" 24 ) 25 26 func TestSecretName(t *testing.T) { 27 c := newTestFixtureSecrets(t) 28 if c.Name() != SecretsDriverName { 29 t.Errorf("Expected name to be %q, got %q", SecretsDriverName, c.Name()) 30 } 31 } 32 33 func TestSecretGet(t *testing.T) { 34 vers := int32(1) 35 name := "smug-pigeon" 36 namespace := "default" 37 key := testKey(name, vers) 38 rel := releaseStub(name, vers, namespace, rspb.Status_DEPLOYED) 39 40 secrets := newTestFixtureSecrets(t, []*rspb.Release{rel}...) 41 42 // get release with key 43 got, err := secrets.Get(key) 44 if err != nil { 45 t.Fatalf("Failed to get release: %s", err) 46 } 47 // compare fetched release with original 48 if !shallowReleaseEqual(rel, got) { 49 t.Errorf("Expected {%q}, got {%q}", rel, got) 50 } 51 } 52 53 func TestUNcompressedSecretGet(t *testing.T) { 54 vers := int32(1) 55 name := "smug-pigeon" 56 namespace := "default" 57 key := testKey(name, vers) 58 rel := releaseStub(name, vers, namespace, rspb.Status_DEPLOYED) 59 60 // Create a test fixture which contains an uncompressed release 61 secret, err := newSecretsObject(key, rel, nil) 62 if err != nil { 63 t.Fatalf("Failed to create secret: %s", err) 64 } 65 b, err := proto.Marshal(rel) 66 if err != nil { 67 t.Fatalf("Failed to marshal release: %s", err) 68 } 69 secret.Data["release"] = []byte(base64.StdEncoding.EncodeToString(b)) 70 var mock MockSecretsInterface 71 mock.objects = map[string]*v1.Secret{key: secret} 72 secrets := NewSecrets(&mock) 73 74 // get release with key 75 got, err := secrets.Get(key) 76 if err != nil { 77 t.Fatalf("Failed to get release: %s", err) 78 } 79 // compare fetched release with original 80 if !shallowReleaseEqual(rel, got) { 81 t.Errorf("Expected {%q}, got {%q}", rel, got) 82 } 83 } 84 85 func TestSecretList(t *testing.T) { 86 secrets := newTestFixtureSecrets(t, []*rspb.Release{ 87 releaseStub("key-1", 1, "default", rspb.Status_DELETED), 88 releaseStub("key-2", 1, "default", rspb.Status_DELETED), 89 releaseStub("key-3", 1, "default", rspb.Status_DEPLOYED), 90 releaseStub("key-4", 1, "default", rspb.Status_DEPLOYED), 91 releaseStub("key-5", 1, "default", rspb.Status_SUPERSEDED), 92 releaseStub("key-6", 1, "default", rspb.Status_SUPERSEDED), 93 }...) 94 95 // list all deleted releases 96 del, err := secrets.List(func(rel *rspb.Release) bool { 97 return rel.Info.Status.Code == rspb.Status_DELETED 98 }) 99 // check 100 if err != nil { 101 t.Errorf("Failed to list deleted: %s", err) 102 } 103 if len(del) != 2 { 104 t.Errorf("Expected 2 deleted, got %d:\n%v\n", len(del), del) 105 } 106 107 // list all deployed releases 108 dpl, err := secrets.List(func(rel *rspb.Release) bool { 109 return rel.Info.Status.Code == rspb.Status_DEPLOYED 110 }) 111 // check 112 if err != nil { 113 t.Errorf("Failed to list deployed: %s", err) 114 } 115 if len(dpl) != 2 { 116 t.Errorf("Expected 2 deployed, got %d", len(dpl)) 117 } 118 119 // list all superseded releases 120 ssd, err := secrets.List(func(rel *rspb.Release) bool { 121 return rel.Info.Status.Code == rspb.Status_SUPERSEDED 122 }) 123 // check 124 if err != nil { 125 t.Errorf("Failed to list superseded: %s", err) 126 } 127 if len(ssd) != 2 { 128 t.Errorf("Expected 2 superseded, got %d", len(ssd)) 129 } 130 } 131 132 func TestSecretCreate(t *testing.T) { 133 secrets := newTestFixtureSecrets(t) 134 135 vers := int32(1) 136 name := "smug-pigeon" 137 namespace := "default" 138 key := testKey(name, vers) 139 rel := releaseStub(name, vers, namespace, rspb.Status_DEPLOYED) 140 141 // store the release in a secret 142 if err := secrets.Create(key, rel); err != nil { 143 t.Fatalf("Failed to create release with key %q: %s", key, err) 144 } 145 146 // get the release back 147 got, err := secrets.Get(key) 148 if err != nil { 149 t.Fatalf("Failed to get release with key %q: %s", key, err) 150 } 151 152 // compare created release with original 153 if !shallowReleaseEqual(rel, got) { 154 t.Errorf("Expected {%q}, got {%q}", rel, got) 155 } 156 } 157 158 func TestSecretUpdate(t *testing.T) { 159 vers := int32(1) 160 name := "smug-pigeon" 161 namespace := "default" 162 key := testKey(name, vers) 163 rel := releaseStub(name, vers, namespace, rspb.Status_DEPLOYED) 164 165 secrets := newTestFixtureSecrets(t, []*rspb.Release{rel}...) 166 167 // modify release status code 168 rel.Info.Status.Code = rspb.Status_SUPERSEDED 169 170 // perform the update 171 if err := secrets.Update(key, rel); err != nil { 172 t.Fatalf("Failed to update release: %s", err) 173 } 174 175 // fetch the updated release 176 got, err := secrets.Get(key) 177 if err != nil { 178 t.Fatalf("Failed to get release with key %q: %s", key, err) 179 } 180 181 // check release has actually been updated by comparing modified fields 182 if rel.Info.Status.Code != got.Info.Status.Code { 183 t.Errorf("Expected status %s, got status %s", rel.Info.Status.Code, got.Info.Status.Code) 184 } 185 }