github.com/spotahome/redis-operator@v1.2.4/service/k8s/configmap_test.go (about) 1 package k8s_test 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 corev1 "k8s.io/api/core/v1" 9 kubeerrors "k8s.io/apimachinery/pkg/api/errors" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 "k8s.io/apimachinery/pkg/runtime" 12 "k8s.io/apimachinery/pkg/runtime/schema" 13 kubernetes "k8s.io/client-go/kubernetes/fake" 14 kubetesting "k8s.io/client-go/testing" 15 16 "github.com/spotahome/redis-operator/log" 17 "github.com/spotahome/redis-operator/metrics" 18 "github.com/spotahome/redis-operator/service/k8s" 19 ) 20 21 var ( 22 configMapsGroup = schema.GroupVersionResource{Group: "", Version: "v1", Resource: "configmaps"} 23 ) 24 25 func newConfigMapUpdateAction(ns string, configMap *corev1.ConfigMap) kubetesting.UpdateActionImpl { 26 return kubetesting.NewUpdateAction(configMapsGroup, ns, configMap) 27 } 28 29 func newConfigMapGetAction(ns, name string) kubetesting.GetActionImpl { 30 return kubetesting.NewGetAction(configMapsGroup, ns, name) 31 } 32 33 func newConfigMapCreateAction(ns string, configMap *corev1.ConfigMap) kubetesting.CreateActionImpl { 34 return kubetesting.NewCreateAction(configMapsGroup, ns, configMap) 35 } 36 37 func TestConfigMapServiceGetCreateOrUpdate(t *testing.T) { 38 testConfigMap := &corev1.ConfigMap{ 39 ObjectMeta: metav1.ObjectMeta{ 40 Name: "testconfigmap1", 41 ResourceVersion: "10", 42 }, 43 } 44 45 testns := "testns" 46 47 tests := []struct { 48 name string 49 configMap *corev1.ConfigMap 50 getConfigMapResult *corev1.ConfigMap 51 errorOnGet error 52 errorOnCreation error 53 expActions []kubetesting.Action 54 expErr bool 55 }{ 56 { 57 name: "A new configmap should create a new configmap.", 58 configMap: testConfigMap, 59 getConfigMapResult: nil, 60 errorOnGet: kubeerrors.NewNotFound(schema.GroupResource{}, ""), 61 errorOnCreation: nil, 62 expActions: []kubetesting.Action{ 63 newConfigMapGetAction(testns, testConfigMap.ObjectMeta.Name), 64 newConfigMapCreateAction(testns, testConfigMap), 65 }, 66 expErr: false, 67 }, 68 { 69 name: "A new configmap should error when create a new configmap fails.", 70 configMap: testConfigMap, 71 getConfigMapResult: nil, 72 errorOnGet: kubeerrors.NewNotFound(schema.GroupResource{}, ""), 73 errorOnCreation: errors.New("wanted error"), 74 expActions: []kubetesting.Action{ 75 newConfigMapGetAction(testns, testConfigMap.ObjectMeta.Name), 76 newConfigMapCreateAction(testns, testConfigMap), 77 }, 78 expErr: true, 79 }, 80 { 81 name: "An existent configmap should update the configmap.", 82 configMap: testConfigMap, 83 getConfigMapResult: testConfigMap, 84 errorOnGet: nil, 85 errorOnCreation: nil, 86 expActions: []kubetesting.Action{ 87 newConfigMapGetAction(testns, testConfigMap.ObjectMeta.Name), 88 newConfigMapUpdateAction(testns, testConfigMap), 89 }, 90 expErr: false, 91 }, 92 } 93 94 for _, test := range tests { 95 t.Run(test.name, func(t *testing.T) { 96 assert := assert.New(t) 97 98 // Mock. 99 mcli := &kubernetes.Clientset{} 100 mcli.AddReactor("get", "configmaps", func(action kubetesting.Action) (bool, runtime.Object, error) { 101 return true, test.getConfigMapResult, test.errorOnGet 102 }) 103 mcli.AddReactor("create", "configmaps", func(action kubetesting.Action) (bool, runtime.Object, error) { 104 return true, nil, test.errorOnCreation 105 }) 106 107 service := k8s.NewConfigMapService(mcli, log.Dummy, metrics.Dummy) 108 err := service.CreateOrUpdateConfigMap(testns, test.configMap) 109 110 if test.expErr { 111 assert.Error(err) 112 } else { 113 assert.NoError(err) 114 // Check calls to kubernetes. 115 assert.Equal(test.expActions, mcli.Actions()) 116 } 117 }) 118 } 119 }