github.com/felipejfc/helm@v2.1.2+incompatible/pkg/storage/driver/mock_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 driver // import "k8s.io/helm/pkg/storage/driver" 18 19 import ( 20 "fmt" 21 "testing" 22 23 "k8s.io/kubernetes/pkg/api" 24 kberrs "k8s.io/kubernetes/pkg/api/errors" 25 "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" 26 27 rspb "k8s.io/helm/pkg/proto/hapi/release" 28 ) 29 30 func releaseStub(name string, vers int32, code rspb.Status_Code) *rspb.Release { 31 return &rspb.Release{ 32 Name: name, 33 Version: vers, 34 Info: &rspb.Info{Status: &rspb.Status{Code: code}}, 35 } 36 } 37 38 func testKey(name string, vers int32) string { 39 return fmt.Sprintf("%s.v%d", name, vers) 40 } 41 42 func tsFixtureMemory(t *testing.T) *Memory { 43 hs := []*rspb.Release{ 44 // rls-a 45 releaseStub("rls-a", 4, rspb.Status_DEPLOYED), 46 releaseStub("rls-a", 1, rspb.Status_SUPERSEDED), 47 releaseStub("rls-a", 3, rspb.Status_SUPERSEDED), 48 releaseStub("rls-a", 2, rspb.Status_SUPERSEDED), 49 // rls-b 50 releaseStub("rls-b", 4, rspb.Status_DEPLOYED), 51 releaseStub("rls-b", 1, rspb.Status_SUPERSEDED), 52 releaseStub("rls-b", 3, rspb.Status_SUPERSEDED), 53 releaseStub("rls-b", 2, rspb.Status_SUPERSEDED), 54 } 55 56 mem := NewMemory() 57 for _, tt := range hs { 58 err := mem.Create(testKey(tt.Name, tt.Version), tt) 59 if err != nil { 60 t.Fatalf("Test setup failed to create: %s\n", err) 61 } 62 } 63 return mem 64 } 65 66 // newTestFixture initializes a MockConfigMapsInterface. 67 // ConfigMaps are created for each release provided. 68 func newTestFixtureCfgMaps(t *testing.T, releases ...*rspb.Release) *ConfigMaps { 69 var mock MockConfigMapsInterface 70 mock.Init(t, releases...) 71 72 return NewConfigMaps(&mock) 73 } 74 75 // MockConfigMapsInterface mocks a kubernetes ConfigMapsInterface 76 type MockConfigMapsInterface struct { 77 internalversion.ConfigMapInterface 78 79 objects map[string]*api.ConfigMap 80 } 81 82 // Init initializes the MockConfigMapsInterface with the set of releases. 83 func (mock *MockConfigMapsInterface) Init(t *testing.T, releases ...*rspb.Release) { 84 mock.objects = map[string]*api.ConfigMap{} 85 86 for _, rls := range releases { 87 objkey := testKey(rls.Name, rls.Version) 88 89 cfgmap, err := newConfigMapsObject(objkey, rls, nil) 90 if err != nil { 91 t.Fatalf("Failed to create configmap: %s", err) 92 } 93 mock.objects[objkey] = cfgmap 94 } 95 } 96 97 // Get returns the ConfigMap by name. 98 func (mock *MockConfigMapsInterface) Get(name string) (*api.ConfigMap, error) { 99 object, ok := mock.objects[name] 100 if !ok { 101 return nil, kberrs.NewNotFound(api.Resource("tests"), name) 102 } 103 return object, nil 104 } 105 106 // List returns the a of ConfigMaps. 107 func (mock *MockConfigMapsInterface) List(opts api.ListOptions) (*api.ConfigMapList, error) { 108 var list api.ConfigMapList 109 for _, cfgmap := range mock.objects { 110 list.Items = append(list.Items, *cfgmap) 111 } 112 return &list, nil 113 } 114 115 // Create creates a new ConfigMap. 116 func (mock *MockConfigMapsInterface) Create(cfgmap *api.ConfigMap) (*api.ConfigMap, error) { 117 name := cfgmap.ObjectMeta.Name 118 if object, ok := mock.objects[name]; ok { 119 return object, kberrs.NewAlreadyExists(api.Resource("tests"), name) 120 } 121 mock.objects[name] = cfgmap 122 return cfgmap, nil 123 } 124 125 // Update updates a ConfigMap. 126 func (mock *MockConfigMapsInterface) Update(cfgmap *api.ConfigMap) (*api.ConfigMap, error) { 127 name := cfgmap.ObjectMeta.Name 128 if _, ok := mock.objects[name]; !ok { 129 return nil, kberrs.NewNotFound(api.Resource("tests"), name) 130 } 131 mock.objects[name] = cfgmap 132 return cfgmap, nil 133 } 134 135 // Delete deletes a ConfigMap by name. 136 func (mock *MockConfigMapsInterface) Delete(name string, opts *api.DeleteOptions) error { 137 if _, ok := mock.objects[name]; !ok { 138 return kberrs.NewNotFound(api.Resource("tests"), name) 139 } 140 delete(mock.objects, name) 141 return nil 142 }