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  }