github.com/danielqsj/helm@v2.0.0-alpha.4.0.20160908204436-976e0ba5199b+incompatible/pkg/storage/storage_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 storage // import "k8s.io/helm/pkg/storage" 18 19 import ( 20 "fmt" 21 "reflect" 22 "testing" 23 24 rspb "k8s.io/helm/pkg/proto/hapi/release" 25 "k8s.io/helm/pkg/storage/driver" 26 ) 27 28 func TestStorageCreate(t *testing.T) { 29 // initialize storage 30 storage := Init(driver.NewMemory()) 31 32 // create fake release 33 rls := ReleaseTestData{Name: "angry-beaver"}.ToRelease() 34 assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") 35 36 // fetch the release 37 res, err := storage.Get(rls.Name) 38 assertErrNil(t.Fatal, err, "QueryRelease") 39 40 // verify the fetched and created release are the same 41 if !reflect.DeepEqual(rls, res) { 42 t.Fatalf("Expected %q, got %q", rls, res) 43 } 44 } 45 46 func TestStorageUpdate(t *testing.T) { 47 // initialize storage 48 storage := Init(driver.NewMemory()) 49 50 // create fake release 51 rls := ReleaseTestData{Name: "angry-beaver"}.ToRelease() 52 assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") 53 54 // modify the release 55 rls.Version = 2 56 rls.Manifest = "new-manifest" 57 assertErrNil(t.Fatal, storage.Update(rls), "UpdateRelease") 58 59 // retrieve the updated release 60 res, err := storage.Get(rls.Name) 61 assertErrNil(t.Fatal, err, "QueryRelease") 62 63 // verify updated and fetched releases are the same. 64 if !reflect.DeepEqual(rls, res) { 65 t.Fatalf("Expected %q, got %q", rls, res) 66 } 67 } 68 69 func TestStorageDelete(t *testing.T) { 70 // initialize storage 71 storage := Init(driver.NewMemory()) 72 73 // create fake release 74 rls := ReleaseTestData{Name: "angry-beaver"}.ToRelease() 75 assertErrNil(t.Fatal, storage.Create(rls), "StoreRelease") 76 77 // delete the release 78 res, err := storage.Delete(rls.Name) 79 assertErrNil(t.Fatal, err, "DeleteRelease") 80 81 // verify updated and fetched releases are the same. 82 if !reflect.DeepEqual(rls, res) { 83 t.Fatalf("Expected %q, got %q", rls, res) 84 } 85 } 86 87 func TestStorageList(t *testing.T) { 88 // initialize storage 89 storage := Init(driver.NewMemory()) 90 91 // setup storage with test releases 92 setup := func() { 93 // release records 94 rls0 := ReleaseTestData{Name: "happy-catdog", Status: rspb.Status_SUPERSEDED}.ToRelease() 95 rls1 := ReleaseTestData{Name: "livid-human", Status: rspb.Status_SUPERSEDED}.ToRelease() 96 rls2 := ReleaseTestData{Name: "relaxed-cat", Status: rspb.Status_SUPERSEDED}.ToRelease() 97 rls3 := ReleaseTestData{Name: "hungry-hippo", Status: rspb.Status_DEPLOYED}.ToRelease() 98 rls4 := ReleaseTestData{Name: "angry-beaver", Status: rspb.Status_DEPLOYED}.ToRelease() 99 rls5 := ReleaseTestData{Name: "opulent-frog", Status: rspb.Status_DELETED}.ToRelease() 100 rls6 := ReleaseTestData{Name: "happy-liger", Status: rspb.Status_DELETED}.ToRelease() 101 102 // create the release records in the storage 103 assertErrNil(t.Fatal, storage.Create(rls0), "Storing release 'rls0'") 104 assertErrNil(t.Fatal, storage.Create(rls1), "Storing release 'rls1'") 105 assertErrNil(t.Fatal, storage.Create(rls2), "Storing release 'rls2'") 106 assertErrNil(t.Fatal, storage.Create(rls3), "Storing release 'rls3'") 107 assertErrNil(t.Fatal, storage.Create(rls4), "Storing release 'rls4'") 108 assertErrNil(t.Fatal, storage.Create(rls5), "Storing release 'rls5'") 109 assertErrNil(t.Fatal, storage.Create(rls6), "Storing release 'rls6'") 110 } 111 112 var listTests = []struct { 113 Description string 114 NumExpected int 115 ListFunc func() ([]*rspb.Release, error) 116 }{ 117 {"ListDeleted", 2, storage.ListDeleted}, 118 {"ListDeployed", 2, storage.ListDeployed}, 119 {"ListReleases", 7, storage.ListReleases}, 120 } 121 122 setup() 123 124 for _, tt := range listTests { 125 list, err := tt.ListFunc() 126 assertErrNil(t.Fatal, err, tt.Description) 127 // verify the count of releases returned 128 if len(list) != tt.NumExpected { 129 t.Errorf("ListReleases(%s): expected %d, actual %d", 130 tt.Description, 131 tt.NumExpected, 132 len(list)) 133 } 134 } 135 } 136 137 type ReleaseTestData struct { 138 Name string 139 Version int32 140 Manifest string 141 Namespace string 142 Status rspb.Status_Code 143 } 144 145 func (test ReleaseTestData) ToRelease() *rspb.Release { 146 return &rspb.Release{ 147 Name: test.Name, 148 Version: test.Version, 149 Manifest: test.Manifest, 150 Namespace: test.Namespace, 151 Info: &rspb.Info{Status: &rspb.Status{Code: test.Status}}, 152 } 153 } 154 155 func assertErrNil(eh func(args ...interface{}), err error, message string) { 156 if err != nil { 157 eh(fmt.Sprintf("%s: %q", message, err)) 158 } 159 }