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  }