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  }