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  }