github.com/cilium/cilium@v1.16.2/operator/pkg/model/ingestion/gamma_fixture_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package ingestion 5 6 import ( 7 corev1 "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/apimachinery/pkg/util/intstr" 10 gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" 11 12 "github.com/cilium/cilium/operator/pkg/model" 13 ) 14 15 // Gateway API Mesh Conformance test resources 16 // https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/tests 17 18 // Base manifest 19 // https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/mesh/manifests.yaml 20 21 var ( 22 httpAppProtocol string = "http" 23 grpcAppProtocol string = "grpc" 24 ) 25 26 // echo-v1 Service 27 28 var gammaEchoV1Service = corev1.Service{ 29 ObjectMeta: metav1.ObjectMeta{ 30 Name: "echo-v1", 31 Namespace: "gateway-conformance-mesh", 32 }, 33 Spec: corev1.ServiceSpec{ 34 Ports: []corev1.ServicePort{ 35 { 36 Name: "http", 37 Port: 80, 38 TargetPort: intstr.FromInt(8080), 39 AppProtocol: &httpAppProtocol, 40 }, 41 { 42 Name: "http-alt", 43 Port: 8080, 44 AppProtocol: &httpAppProtocol, 45 }, 46 { 47 Name: "https", 48 Port: 443, 49 TargetPort: intstr.FromInt(8443), 50 }, 51 { 52 Name: "tcp", 53 Port: 9090, 54 }, 55 { 56 Name: "grpc", 57 Port: 7070, 58 AppProtocol: &grpcAppProtocol, 59 }, 60 }, 61 Selector: map[string]string{ 62 "app": "echo", 63 "version": "v1", 64 }, 65 }, 66 } 67 68 // echo-v2 Service 69 70 var gammaEchoV2Service = corev1.Service{ 71 ObjectMeta: metav1.ObjectMeta{ 72 Name: "echo-v2", 73 Namespace: "gateway-conformance-mesh", 74 }, 75 Spec: corev1.ServiceSpec{ 76 Ports: []corev1.ServicePort{ 77 { 78 Name: "http", 79 Port: 80, 80 TargetPort: intstr.FromInt(8080), 81 AppProtocol: &httpAppProtocol, 82 }, 83 { 84 Name: "http-alt", 85 Port: 8080, 86 AppProtocol: &httpAppProtocol, 87 }, 88 { 89 Name: "https", 90 Port: 443, 91 TargetPort: intstr.FromInt(8443), 92 }, 93 { 94 Name: "tcp", 95 Port: 9090, 96 }, 97 { 98 Name: "grpc", 99 Port: 7070, 100 AppProtocol: &grpcAppProtocol, 101 }, 102 }, 103 Selector: map[string]string{ 104 "app": "echo", 105 "version": "v2", 106 }, 107 }, 108 } 109 110 // echo Service 111 112 var gammaEchoService = corev1.Service{ 113 ObjectMeta: metav1.ObjectMeta{ 114 Name: "echo", 115 Namespace: "gateway-conformance-mesh", 116 }, 117 Spec: corev1.ServiceSpec{ 118 Ports: []corev1.ServicePort{ 119 { 120 Name: "http", 121 Port: 80, 122 TargetPort: intstr.FromInt(8080), 123 AppProtocol: &httpAppProtocol, 124 }, 125 { 126 Name: "http-alt", 127 Port: 8080, 128 AppProtocol: &httpAppProtocol, 129 }, 130 { 131 Name: "https", 132 Port: 443, 133 TargetPort: intstr.FromInt(8443), 134 }, 135 { 136 Name: "tcp", 137 Port: 9090, 138 }, 139 { 140 Name: "grpc", 141 Port: 7070, 142 AppProtocol: &grpcAppProtocol, 143 }, 144 }, 145 Selector: map[string]string{ 146 "app": "echo", 147 }, 148 }, 149 } 150 151 // mesh-split HTTPRoute 152 var meshSplitHTTPRoute = gatewayv1.HTTPRoute{ 153 ObjectMeta: metav1.ObjectMeta{ 154 Name: "mesh-split", 155 Namespace: "gateway-conformance-mesh", 156 }, 157 Spec: gatewayv1.HTTPRouteSpec{ 158 CommonRouteSpec: gatewayv1.CommonRouteSpec{ 159 ParentRefs: []gatewayv1.ParentReference{ 160 { 161 Name: "echo", 162 Group: GroupPtr(corev1.SchemeGroupVersion.Group), 163 Kind: KindPtr("Service"), 164 }, 165 }, 166 }, 167 Rules: []gatewayv1.HTTPRouteRule{ 168 { 169 Matches: []gatewayv1.HTTPRouteMatch{ 170 { 171 Path: &gatewayv1.HTTPPathMatch{ 172 Type: model.AddressOf(gatewayv1.PathMatchExact), 173 Value: model.AddressOf("/v1"), 174 }, 175 }, 176 }, 177 BackendRefs: []gatewayv1.HTTPBackendRef{ 178 { 179 BackendRef: gatewayv1.BackendRef{ 180 BackendObjectReference: gatewayv1.BackendObjectReference{ 181 Name: "echo-v1", 182 Port: model.AddressOf[gatewayv1.PortNumber](80), 183 }, 184 }, 185 }, 186 }, 187 }, 188 { 189 Matches: []gatewayv1.HTTPRouteMatch{ 190 { 191 Path: &gatewayv1.HTTPPathMatch{ 192 Type: model.AddressOf(gatewayv1.PathMatchExact), 193 Value: model.AddressOf("/v2"), 194 }, 195 }, 196 }, 197 BackendRefs: []gatewayv1.HTTPBackendRef{ 198 { 199 BackendRef: gatewayv1.BackendRef{ 200 BackendObjectReference: gatewayv1.BackendObjectReference{ 201 Name: "echo-v2", 202 Port: model.AddressOf[gatewayv1.PortNumber](80), 203 }, 204 }, 205 }, 206 }, 207 }, 208 }, 209 }, 210 } 211 212 // mesh-ports HTTPRoute 213 var meshPortsHTTPRoute = gatewayv1.HTTPRoute{ 214 ObjectMeta: metav1.ObjectMeta{ 215 Name: "mesh-ports", 216 Namespace: "gateway-conformance-mesh", 217 }, 218 Spec: gatewayv1.HTTPRouteSpec{ 219 CommonRouteSpec: gatewayv1.CommonRouteSpec{ 220 ParentRefs: []gatewayv1.ParentReference{ 221 { 222 Name: "echo-v1", 223 Group: GroupPtr(corev1.SchemeGroupVersion.Group), 224 Kind: KindPtr("Service"), 225 Port: model.AddressOf[gatewayv1.PortNumber](80), 226 }, 227 }, 228 }, 229 Rules: []gatewayv1.HTTPRouteRule{ 230 { 231 Filters: []gatewayv1.HTTPRouteFilter{ 232 { 233 Type: gatewayv1.HTTPRouteFilterResponseHeaderModifier, 234 ResponseHeaderModifier: &gatewayv1.HTTPHeaderFilter{ 235 Set: []gatewayv1.HTTPHeader{ 236 { 237 Name: gatewayv1.HTTPHeaderName("X-Header-Set"), 238 Value: "v1", 239 }, 240 }, 241 }, 242 }, 243 }, 244 BackendRefs: []gatewayv1.HTTPBackendRef{ 245 { 246 BackendRef: gatewayv1.BackendRef{ 247 BackendObjectReference: gatewayv1.BackendObjectReference{ 248 Name: "echo-v1", 249 Port: model.AddressOf[gatewayv1.PortNumber](80), 250 }, 251 }, 252 }, 253 }, 254 }, 255 }, 256 }, 257 } 258 259 // mesh-frontend HTTPRoute 260 var meshFrontendHTTPRoute = gatewayv1.HTTPRoute{ 261 ObjectMeta: metav1.ObjectMeta{ 262 Name: "mesh-split-v1", 263 Namespace: "gateway-conformance-mesh", 264 }, 265 Spec: gatewayv1.HTTPRouteSpec{ 266 CommonRouteSpec: gatewayv1.CommonRouteSpec{ 267 ParentRefs: []gatewayv1.ParentReference{ 268 { 269 Name: "echo-v2", 270 Group: GroupPtr(corev1.SchemeGroupVersion.Group), 271 Kind: KindPtr("Service"), 272 Port: model.AddressOf[gatewayv1.PortNumber](80), 273 }, 274 }, 275 }, 276 Rules: []gatewayv1.HTTPRouteRule{ 277 { 278 Filters: []gatewayv1.HTTPRouteFilter{ 279 { 280 Type: gatewayv1.HTTPRouteFilterResponseHeaderModifier, 281 ResponseHeaderModifier: &gatewayv1.HTTPHeaderFilter{ 282 Set: []gatewayv1.HTTPHeader{ 283 { 284 Name: gatewayv1.HTTPHeaderName("X-Header-Set"), 285 Value: "set", 286 }, 287 }, 288 }, 289 }, 290 }, 291 BackendRefs: []gatewayv1.HTTPBackendRef{ 292 { 293 BackendRef: gatewayv1.BackendRef{ 294 BackendObjectReference: gatewayv1.BackendObjectReference{ 295 Name: "echo-v2", 296 Port: model.AddressOf[gatewayv1.PortNumber](80), 297 }, 298 }, 299 }, 300 }, 301 }, 302 }, 303 }, 304 }