github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/kubernetes/resources/adaptertesting/run.go (about) 1 package adaptertesting 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/caos/orbos/pkg/kubernetes/resources" 8 9 apixv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" 10 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 11 12 kubernetesmock "github.com/caos/orbos/pkg/kubernetes/mock" 13 "github.com/golang/mock/gomock" 14 ) 15 16 type Case struct { 17 Name string 18 Adapt func() (resources.QueryFunc, error) 19 ExpectWhileQuerying func(k8sClient *kubernetesmock.MockClientInt) 20 ExpectWhileEnsuring func(k8sClient *kubernetesmock.MockClientInt) 21 WantAdaptErr bool 22 WantQueryErr bool 23 WantEnsureErr bool 24 } 25 26 type Scope struct { 27 SubscopesDescription string 28 Subscopes []func() Scope 29 Case Case 30 } 31 32 func RunScopes(describe string, scopes []func() Scope, t *testing.T) { 33 for _, scope := range scopes { 34 resolvedScope := scope() 35 Run(describe, resolvedScope.Case, t) 36 RunScopes(resolvedScope.SubscopesDescription, resolvedScope.Subscopes, t) 37 } 38 } 39 40 func Run(describe string, testCase Case, t *testing.T) { 41 t.Run(fmt.Sprintf("%s/%s", describe, testCase.Name), func(t *testing.T) { 42 43 query, err := testCase.Adapt() 44 if (err != nil) != testCase.WantAdaptErr { 45 t.Fatalf("AdaptFuncToEnsure() error = %v, WantAdaptErr %v", err, testCase.WantAdaptErr) 46 } 47 48 queryController := gomock.NewController(t) 49 queryK8sClient := kubernetesmock.NewMockClientInt(queryController) 50 testCase.ExpectWhileQuerying(queryK8sClient) 51 ensure, err := query(queryK8sClient) 52 queryController.Finish() 53 if (err != nil) != testCase.WantQueryErr { 54 t.Fatalf("AdaptFuncToEnsure() error = %v, WantQueryErr %v", err, testCase.WantQueryErr) 55 } 56 57 ensureController := gomock.NewController(t) 58 ensureK8sClient := kubernetesmock.NewMockClientInt(ensureController) 59 testCase.ExpectWhileEnsuring(ensureK8sClient) 60 err = ensure(ensureK8sClient) 61 ensureController.Finish() 62 if (err != nil) != testCase.WantEnsureErr { 63 t.Fatalf("AdaptFuncToEnsure() error = %v, WantEnsureErr %v", err, testCase.WantEnsureErr) 64 } 65 }) 66 } 67 68 func expectAppliedCRD(k8sClient *kubernetesmock.MockClientInt, testCase, namespace, crdName, resourceApiGroup, resourceApiVersion, resourceKind, resourceName string, resource *unstructured.Unstructured) { 69 var ( 70 namespaceMatcher = ExpectValue(testCase, namespace) 71 crdNameMatcher = ExpectValue(testCase, crdName) 72 resourceApiGroupMatcher = ExpectValue(testCase, resourceApiGroup) 73 resourceApiVersionMatcher = ExpectValue(testCase, resourceApiVersion) 74 resourceKindMatcher = ExpectValue(testCase, resourceKind) 75 resourceNameMatcher = ExpectValue(testCase, resourceName) 76 resourceMatcher = ExpectValue(testCase, resource) 77 ) 78 k8sClient.EXPECT().CheckCRD(crdNameMatcher).Times(1).Return(&apixv1beta1.CustomResourceDefinition{}, true, nil) 79 k8sClient.EXPECT().ApplyNamespacedCRDResource(resourceApiGroupMatcher, resourceApiVersionMatcher, resourceKindMatcher, namespaceMatcher, resourceNameMatcher, resourceMatcher).Times(1) 80 }