github.com/SupersunnySea/draft@v0.16.0/pkg/storage/kube/configmap/mock_test.go (about) 1 package configmap 2 3 import ( 4 "testing" 5 6 "k8s.io/api/core/v1" 7 "k8s.io/apimachinery/pkg/apis/testapigroup" 8 9 apierrors "k8s.io/apimachinery/pkg/api/errors" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 corev1 "k8s.io/client-go/kubernetes/typed/core/v1" 12 13 "github.com/Azure/draft/pkg/storage" 14 ) 15 16 // MockConfigMaps mocks a kubernetes ConfigMapsInterface. 17 // 18 // For use in testing only. 19 type MockConfigMaps struct { 20 corev1.ConfigMapInterface 21 cfgmaps map[string]*v1.ConfigMap 22 } 23 24 // NewConfigMapsWithMocks initializes a new ConfigMaps store initialized 25 // with kubernetes ConfigMap objects created from the provided entries. 26 func NewConfigMapsWithMocks(t *testing.T, entries ...struct { 27 appName string 28 objects []*storage.Object 29 }) *ConfigMaps { 30 var mock MockConfigMaps 31 mock.Init(t, entries...) 32 return NewConfigMaps(&mock) 33 } 34 35 // Init initializes the MockConfigMaps mock with the set of storage objects. 36 func (mock *MockConfigMaps) Init(t *testing.T, entries ...struct { 37 appName string 38 objects []*storage.Object 39 }) { 40 mock.cfgmaps = make(map[string]*v1.ConfigMap) 41 for _, entry := range entries { 42 var cfgmap *v1.ConfigMap 43 for _, object := range entry.objects { 44 if cfgmap != nil { 45 if _, ok := cfgmap.Data[object.BuildID]; !ok { 46 content, err := storage.EncodeToString(object) 47 if err != nil { 48 t.Fatalf("failed to encode storage object: %v", err) 49 } 50 cfgmap.Data[object.BuildID] = content 51 } 52 } else { 53 var err error 54 if cfgmap, err = newConfigMap(entry.appName, object); err != nil { 55 t.Fatalf("failed to create configmap: %v", err) 56 } 57 } 58 } 59 mock.cfgmaps[entry.appName] = cfgmap 60 } 61 } 62 63 // Get returns the ConfigMap by name. 64 func (mock *MockConfigMaps) Get(name string, options metav1.GetOptions) (*v1.ConfigMap, error) { 65 cfgmap, ok := mock.cfgmaps[name] 66 if !ok { 67 return nil, apierrors.NewNotFound(testapigroup.Resource("tests"), name) 68 } 69 return cfgmap, nil 70 } 71 72 // Create creates a new ConfigMap. 73 func (mock *MockConfigMaps) Create(cfgmap *v1.ConfigMap) (*v1.ConfigMap, error) { 74 name := cfgmap.ObjectMeta.Name 75 if object, ok := mock.cfgmaps[name]; ok { 76 return object, apierrors.NewAlreadyExists(testapigroup.Resource("tests"), name) 77 } 78 mock.cfgmaps[name] = cfgmap 79 return cfgmap, nil 80 } 81 82 // Update updates a ConfigMap. 83 func (mock *MockConfigMaps) Update(cfgmap *v1.ConfigMap) (*v1.ConfigMap, error) { 84 name := cfgmap.ObjectMeta.Name 85 mock.cfgmaps[name] = cfgmap 86 return cfgmap, nil 87 } 88 89 // Delete deletes a ConfigMap by name. 90 func (mock *MockConfigMaps) Delete(name string, opts *metav1.DeleteOptions) error { 91 if _, ok := mock.cfgmaps[name]; !ok { 92 return apierrors.NewNotFound(testapigroup.Resource("tests"), name) 93 } 94 delete(mock.cfgmaps, name) 95 return nil 96 }