github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/kubernetes/resources/ambassador/mapping/adapt_test.go (about) 1 package mapping_test 2 3 import ( 4 "testing" 5 6 "github.com/caos/orbos/pkg/labels" 7 8 apixv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" 9 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 10 11 "github.com/caos/orbos/mntr" 12 kubernetesmock "github.com/caos/orbos/pkg/kubernetes/mock" 13 "github.com/caos/orbos/pkg/kubernetes/resources" 14 "github.com/caos/orbos/pkg/kubernetes/resources/adaptertesting" 15 "github.com/caos/orbos/pkg/kubernetes/resources/ambassador/mapping" 16 "github.com/caos/orbos/pkg/labels/mocklabels" 17 ) 18 19 func TestAdaptFuncToEnsure(t *testing.T) { 20 21 const ( 22 namespace = "test" 23 virtualHost = "api.domain" 24 service = "service:8080" 25 grpc = true 26 prefix = "/caos.zitadel.admin.api.v1.AdminService/" 27 rewrite = "/caos.zitadel.admin.api.v1.AdminService/" 28 timeoutMS = 30000 29 connectTimeoutMS = 30000 30 corsOrigins = "*" 31 corsMethods = "POST, GET, OPTIONS, DELETE, PUT" 32 corsHeaders = "*" 33 corsCredentials = true 34 corsExposedHeaders = "*" 35 corsMaxAge = "86400" 36 ) 37 var ( 38 monitor = mntr.Monitor{} 39 nameLabels = mocklabels.Name 40 corsArgs = &mapping.CORS{ 41 Origins: corsOrigins, 42 Methods: corsMethods, 43 Headers: corsHeaders, 44 Credentials: corsCredentials, 45 ExposedHeaders: corsExposedHeaders, 46 MaxAge: corsMaxAge, 47 } 48 expectFullSpec = func() map[string]interface{} { 49 return map[string]interface{}{ 50 "connect_timeout_ms": timeoutMS, 51 "host": virtualHost, 52 "prefix": prefix, 53 "rewrite": rewrite, 54 "service": service, 55 "timeout_ms": timeoutMS, 56 "cors": map[string]interface{}{ 57 "origins": corsOrigins, 58 "methods": corsMethods, 59 "headers": corsHeaders, 60 "credentials": corsCredentials, 61 "exposed_headers": corsExposedHeaders, 62 "max_age": corsMaxAge, 63 }, 64 "grpc": grpc, 65 } 66 } 67 testAdaptFuncToEnsure = func(cors *mapping.CORS) func() (resources.QueryFunc, error) { 68 return func() (queryFunc resources.QueryFunc, err error) { 69 return mapping.AdaptFuncToEnsure( 70 monitor, 71 namespace, 72 nameLabels, 73 grpc, 74 virtualHost, 75 prefix, 76 rewrite, 77 service, 78 timeoutMS, 79 connectTimeoutMS, 80 cors) 81 } 82 } 83 expectSpec = func(spec map[string]interface{}) func(*kubernetesmock.MockClientInt) { 84 const ( 85 apiGroup = "getambassador.io" 86 apiVersion = "v2" 87 mappingKind = "Mapping" 88 ) 89 90 return func(k8sClient *kubernetesmock.MockClientInt) { 91 k8sClient.EXPECT().ApplyNamespacedCRDResource(apiGroup, apiVersion, mappingKind, namespace, nameLabels.Name(), &unstructured.Unstructured{ 92 Object: map[string]interface{}{ 93 "apiVersion": apiGroup + "/" + apiVersion, 94 "kind": mappingKind, 95 "metadata": map[string]interface{}{ 96 "labels": labels.MustK8sMap(nameLabels), 97 "name": nameLabels.Name(), 98 "namespace": namespace, 99 }, 100 "spec": spec, 101 }, 102 }).Times(1) 103 } 104 } 105 ) 106 107 adaptertesting.RunScopes("Ambassador Mapping", []func() adaptertesting.Scope{ 108 func() adaptertesting.Scope { 109 return adaptertesting.Scope{ 110 Subscopes: nil, 111 Case: adaptertesting.Case{ 112 Name: "It should fill all the correct yaml keys with the given values", 113 Adapt: testAdaptFuncToEnsure(corsArgs), 114 ExpectWhileQuerying: expectWhileQuerying, 115 ExpectWhileEnsuring: expectSpec(expectFullSpec()), 116 WantAdaptErr: false, 117 WantQueryErr: false, 118 WantEnsureErr: false, 119 }, 120 } 121 }, 122 func() adaptertesting.Scope { 123 withoutCorsSpec := expectFullSpec() 124 delete(withoutCorsSpec, "cors") 125 return adaptertesting.Scope{ 126 Subscopes: nil, 127 Case: adaptertesting.Case{ 128 Name: "It should omit the cors properties if cors argument is nil", 129 Adapt: testAdaptFuncToEnsure(nil), 130 ExpectWhileQuerying: expectWhileQuerying, 131 ExpectWhileEnsuring: expectSpec(withoutCorsSpec), 132 WantAdaptErr: false, 133 WantQueryErr: false, 134 WantEnsureErr: false, 135 }, 136 } 137 }, 138 }, t) 139 } 140 141 func expectWhileQuerying(k8sClient *kubernetesmock.MockClientInt) { 142 k8sClient.EXPECT().CheckCRD("mappings.getambassador.io").Times(1).Return(&apixv1beta1.CustomResourceDefinition{}, true, nil) 143 }