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  }