github.com/cilium/cilium@v1.16.2/operator/pkg/model/ingestion/gateway_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  	gatewayv1beta1 "sigs.k8s.io/gateway-api/apis/v1"
    11  	gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
    12  
    13  	"github.com/cilium/cilium/operator/pkg/model"
    14  )
    15  
    16  // Gateway API Conformance test resources
    17  // https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/tests
    18  
    19  // Base manifest
    20  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/base/manifests.yaml
    21  var sameNamespaceGateway = gatewayv1beta1.Gateway{
    22  	ObjectMeta: metav1.ObjectMeta{
    23  		Name:      "same-namespace",
    24  		Namespace: "gateway-conformance-infra",
    25  	},
    26  	Spec: gatewayv1beta1.GatewaySpec{
    27  		GatewayClassName: "cilium",
    28  		Listeners: []gatewayv1beta1.Listener{
    29  			{
    30  				Name:     "http",
    31  				Port:     80,
    32  				Protocol: gatewayv1beta1.HTTPProtocolType,
    33  				TLS:      nil,
    34  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
    35  					Namespaces: &gatewayv1beta1.RouteNamespaces{
    36  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
    37  					},
    38  				},
    39  			},
    40  		},
    41  	},
    42  }
    43  
    44  // Base manifest
    45  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.1/conformance/base/tls-route-simple-same-namespace.yaml
    46  var sameNamespaceTLSGateway = gatewayv1beta1.Gateway{
    47  	TypeMeta: metav1.TypeMeta{
    48  		Kind:       "Gateway",
    49  		APIVersion: "gateway.networking.k8s.io/v1",
    50  	},
    51  	ObjectMeta: metav1.ObjectMeta{
    52  		Name:      "gateway-tlsroute",
    53  		Namespace: "gateway-conformance-infra",
    54  	},
    55  	Spec: gatewayv1beta1.GatewaySpec{
    56  		GatewayClassName: "cilium",
    57  		Listeners: []gatewayv1beta1.Listener{
    58  			{
    59  				Name:     "https",
    60  				Port:     443,
    61  				Protocol: gatewayv1beta1.TLSProtocolType,
    62  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
    63  					Namespaces: &gatewayv1beta1.RouteNamespaces{
    64  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
    65  					},
    66  				},
    67  				TLS: &gatewayv1beta1.GatewayTLSConfig{
    68  					Mode: model.AddressOf(gatewayv1beta1.TLSModePassthrough),
    69  				},
    70  			},
    71  		},
    72  	},
    73  }
    74  
    75  // Base manifest
    76  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.1/conformance/base/tls-route-simple-same-namespace.yaml
    77  var sameNamespaceTLSRoute = gatewayv1alpha2.TLSRoute{
    78  	ObjectMeta: metav1.ObjectMeta{
    79  		Name:      "gateway-conformance-infra-test",
    80  		Namespace: "gateway-conformance-infra",
    81  	},
    82  	Spec: gatewayv1alpha2.TLSRouteSpec{
    83  		CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{
    84  			ParentRefs: []gatewayv1beta1.ParentReference{
    85  				{
    86  					Name:      "gateway-tlsroute",
    87  					Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
    88  				},
    89  			},
    90  		},
    91  		Hostnames: []gatewayv1beta1.Hostname{
    92  			"abc.example.com",
    93  		},
    94  		Rules: []gatewayv1alpha2.TLSRouteRule{
    95  			{
    96  				BackendRefs: []gatewayv1alpha2.BackendRef{
    97  					{
    98  						BackendObjectReference: gatewayv1beta1.BackendObjectReference{
    99  							Name: "tls-backend",
   100  							Port: model.AddressOf[gatewayv1beta1.PortNumber](443),
   101  						},
   102  					},
   103  				},
   104  			},
   105  		},
   106  	},
   107  }
   108  
   109  //var allNamespacesGateway = gatewayv1beta1.Gateway{
   110  //	ObjectMeta: metav1.ObjectMeta{
   111  //		Name:      "all-namespaces",
   112  //		Namespace: "gateway-conformance-infra",
   113  //	},
   114  //	Spec: gatewayv1beta1.GatewaySpec{
   115  //		GatewayClassName: "cilium",
   116  //		Listeners: []gatewayv1beta1.Listener{
   117  //			{
   118  //				Name:     "http",
   119  //				Port:     80,
   120  //				Protocol: gatewayv1beta1.HTTPProtocolType,
   121  //				TLS:      nil,
   122  //				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   123  //					Namespaces: &gatewayv1beta1.RouteNamespaces{
   124  //						From: model.AddressOf(gatewayv1beta1.NamespacesFromAll),
   125  //					},
   126  //				},
   127  //			},
   128  //		},
   129  //	},
   130  //}
   131  
   132  var backendNamespaceGateway = gatewayv1beta1.Gateway{
   133  	ObjectMeta: metav1.ObjectMeta{
   134  		Name:      "backend-namespaces",
   135  		Namespace: "gateway-conformance-infra",
   136  	},
   137  	Spec: gatewayv1beta1.GatewaySpec{
   138  		GatewayClassName: "cilium",
   139  		Listeners: []gatewayv1beta1.Listener{
   140  			{
   141  				Name:     "http",
   142  				Port:     80,
   143  				Protocol: gatewayv1beta1.HTTPProtocolType,
   144  				TLS:      nil,
   145  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   146  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   147  						Selector: &metav1.LabelSelector{
   148  							MatchLabels: map[string]string{
   149  								"gateway-conformance": "backend",
   150  							},
   151  						},
   152  					},
   153  				},
   154  			},
   155  		},
   156  	},
   157  }
   158  
   159  var allServices = []corev1.Service{
   160  	infraBackEndV1Service,
   161  	infraBackEndV2Service,
   162  	infraBackEndV3Service,
   163  	appBackEndV1Service,
   164  	appBackEndV2Service,
   165  	webBackendService,
   166  	tlsBackendService,
   167  }
   168  
   169  var infraBackEndV1Service = corev1.Service{
   170  	ObjectMeta: metav1.ObjectMeta{
   171  		Name:      "infra-backend-v1",
   172  		Namespace: "gateway-conformance-infra",
   173  	},
   174  	Spec: corev1.ServiceSpec{
   175  		Ports: []corev1.ServicePort{
   176  			{
   177  				Protocol:   "tcp",
   178  				Port:       8080,
   179  				TargetPort: intstr.FromInt(3000),
   180  			},
   181  		},
   182  		Selector: map[string]string{
   183  			"app": "infra-backend-v1",
   184  		},
   185  	},
   186  }
   187  
   188  var infraBackEndV2Service = corev1.Service{
   189  	ObjectMeta: metav1.ObjectMeta{
   190  		Name:      "infra-backend-v2",
   191  		Namespace: "gateway-conformance-infra",
   192  	},
   193  	Spec: corev1.ServiceSpec{
   194  		Ports: []corev1.ServicePort{
   195  			{
   196  				Protocol:   "tcp",
   197  				Port:       8080,
   198  				TargetPort: intstr.FromInt(3000),
   199  			},
   200  		},
   201  		Selector: map[string]string{
   202  			"app": "infra-backend-v2",
   203  		},
   204  	},
   205  }
   206  
   207  var infraBackEndV3Service = corev1.Service{
   208  	ObjectMeta: metav1.ObjectMeta{
   209  		Name:      "infra-backend-v3",
   210  		Namespace: "gateway-conformance-infra",
   211  	},
   212  	Spec: corev1.ServiceSpec{
   213  		Ports: []corev1.ServicePort{
   214  			{
   215  				Protocol:   "tcp",
   216  				Port:       8080,
   217  				TargetPort: intstr.FromInt(3000),
   218  			},
   219  		},
   220  		Selector: map[string]string{
   221  			"app": "infra-backend-v3",
   222  		},
   223  	},
   224  }
   225  
   226  var appBackEndV1Service = corev1.Service{
   227  	ObjectMeta: metav1.ObjectMeta{
   228  		Name:      "app-backend-v1",
   229  		Namespace: "gateway-conformance-app-backend",
   230  	},
   231  	Spec: corev1.ServiceSpec{
   232  		Ports: []corev1.ServicePort{
   233  			{
   234  				Protocol:   "tcp",
   235  				Port:       8080,
   236  				TargetPort: intstr.FromInt(3000),
   237  			},
   238  		},
   239  		Selector: map[string]string{
   240  			"app": "app-backend-v1",
   241  		},
   242  	},
   243  }
   244  
   245  var appBackEndV2Service = corev1.Service{
   246  	ObjectMeta: metav1.ObjectMeta{
   247  		Name:      "app-backend-v2",
   248  		Namespace: "gateway-conformance-app-backend",
   249  	},
   250  	Spec: corev1.ServiceSpec{
   251  		Ports: []corev1.ServicePort{
   252  			{
   253  				Protocol:   "tcp",
   254  				Port:       8080,
   255  				TargetPort: intstr.FromInt(3000),
   256  			},
   257  		},
   258  		Selector: map[string]string{
   259  			"app": "app-backend-v2",
   260  		},
   261  	},
   262  }
   263  
   264  var webBackendService = corev1.Service{
   265  	ObjectMeta: metav1.ObjectMeta{
   266  		Name:      "web-backend",
   267  		Namespace: "gateway-conformance-web-backend",
   268  	},
   269  	Spec: corev1.ServiceSpec{
   270  		Ports: []corev1.ServicePort{
   271  			{
   272  				Protocol:   "tcp",
   273  				Port:       8080,
   274  				TargetPort: intstr.FromInt(3000),
   275  			},
   276  		},
   277  		Selector: map[string]string{
   278  			"app": "web-backend",
   279  		},
   280  	},
   281  }
   282  
   283  var tlsBackendService = corev1.Service{
   284  	ObjectMeta: metav1.ObjectMeta{
   285  		Name:      "tls-backend",
   286  		Namespace: "gateway-conformance-infra",
   287  	},
   288  	Spec: corev1.ServiceSpec{
   289  		Ports: []corev1.ServicePort{
   290  			{
   291  				Protocol:   "tcp",
   292  				Port:       443,
   293  				TargetPort: intstr.FromInt(8443),
   294  			},
   295  		},
   296  		Selector: map[string]string{
   297  			"app": "tls-backend",
   298  		},
   299  	},
   300  }
   301  
   302  // HTTPRoute cross namespace
   303  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-cross-namespace.yaml
   304  var crossNamespaceHTTPRoute = gatewayv1beta1.HTTPRoute{
   305  	ObjectMeta: metav1.ObjectMeta{
   306  		Name:      "cross-namespace",
   307  		Namespace: "gateway-conformance-web-backend",
   308  	},
   309  	Spec: gatewayv1beta1.HTTPRouteSpec{
   310  		CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   311  			ParentRefs: []gatewayv1beta1.ParentReference{
   312  				{
   313  					Name:      "backend-namespaces",
   314  					Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   315  				},
   316  			},
   317  		},
   318  		Rules: []gatewayv1beta1.HTTPRouteRule{
   319  			{
   320  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   321  					{
   322  						BackendRef: gatewayv1beta1.BackendRef{
   323  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   324  								Name: "web-backend",
   325  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   326  							},
   327  						},
   328  					},
   329  				},
   330  			},
   331  		},
   332  	},
   333  }
   334  
   335  // HTTPRoute exact matching
   336  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-exact-path-matching.yaml
   337  var exactPathMatchingHTTPRoute = gatewayv1beta1.HTTPRoute{
   338  	ObjectMeta: metav1.ObjectMeta{
   339  		Name:      "exact-matching",
   340  		Namespace: "gateway-conformance-infra",
   341  	},
   342  	Spec: gatewayv1beta1.HTTPRouteSpec{
   343  		CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   344  			ParentRefs: []gatewayv1beta1.ParentReference{
   345  				{
   346  					Name: "same-namespace",
   347  				},
   348  			},
   349  		},
   350  		Rules: []gatewayv1beta1.HTTPRouteRule{
   351  			{
   352  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   353  					{
   354  						Path: &gatewayv1beta1.HTTPPathMatch{
   355  							Type:  model.AddressOf(gatewayv1beta1.PathMatchExact),
   356  							Value: model.AddressOf("/one"),
   357  						},
   358  					},
   359  				},
   360  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   361  					{
   362  						BackendRef: gatewayv1beta1.BackendRef{
   363  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   364  								Name: "infra-backend-v1",
   365  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   366  							},
   367  						},
   368  					},
   369  				},
   370  			},
   371  			{
   372  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   373  					{
   374  						Path: &gatewayv1beta1.HTTPPathMatch{
   375  							Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
   376  							Value: model.AddressOf("/two"),
   377  						},
   378  					},
   379  				},
   380  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   381  					{
   382  						BackendRef: gatewayv1beta1.BackendRef{
   383  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   384  								Name: "infra-backend-v2",
   385  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   386  							},
   387  						},
   388  					},
   389  				},
   390  			},
   391  		},
   392  	},
   393  }
   394  
   395  // HTTRRoute header matching
   396  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-header-matching.yaml
   397  var headerMatchingHTTPRoute = gatewayv1beta1.HTTPRoute{
   398  	ObjectMeta: metav1.ObjectMeta{
   399  		Name:      "header-matching",
   400  		Namespace: "gateway-conformance-infra",
   401  	},
   402  	Spec: gatewayv1beta1.HTTPRouteSpec{
   403  		CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   404  			ParentRefs: []gatewayv1beta1.ParentReference{
   405  				{
   406  					Name: "same-namespace",
   407  				},
   408  			},
   409  		},
   410  		Rules: []gatewayv1beta1.HTTPRouteRule{
   411  			{
   412  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   413  					{
   414  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   415  							{
   416  								Name:  "version",
   417  								Value: "one",
   418  							},
   419  						},
   420  					},
   421  				},
   422  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   423  					{
   424  						BackendRef: gatewayv1beta1.BackendRef{
   425  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   426  								Name: "infra-backend-v1",
   427  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   428  							},
   429  						},
   430  					},
   431  				},
   432  			},
   433  			{
   434  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   435  					{
   436  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   437  							{
   438  								Name:  "version",
   439  								Value: "two",
   440  							},
   441  						},
   442  					},
   443  				},
   444  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   445  					{
   446  						BackendRef: gatewayv1beta1.BackendRef{
   447  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   448  								Name: "infra-backend-v2",
   449  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   450  							},
   451  						},
   452  					},
   453  				},
   454  			},
   455  			{
   456  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   457  					{
   458  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   459  							{
   460  								Name:  "version",
   461  								Value: "two",
   462  							},
   463  							{
   464  								Name:  "color",
   465  								Value: "orange",
   466  							},
   467  						},
   468  					},
   469  				},
   470  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   471  					{
   472  						BackendRef: gatewayv1beta1.BackendRef{
   473  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   474  								Name: "infra-backend-v1",
   475  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   476  							},
   477  						},
   478  					},
   479  				},
   480  			},
   481  			{
   482  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   483  					{
   484  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   485  							{
   486  								Name:  "color",
   487  								Value: "blue",
   488  							},
   489  						},
   490  					},
   491  					{
   492  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   493  							{
   494  								Name:  "color",
   495  								Value: "blue",
   496  							},
   497  						},
   498  					},
   499  				},
   500  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   501  					{
   502  						BackendRef: gatewayv1beta1.BackendRef{
   503  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   504  								Name: "infra-backend-v1",
   505  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   506  							},
   507  						},
   508  					},
   509  				},
   510  			},
   511  			{
   512  				Matches: []gatewayv1beta1.HTTPRouteMatch{
   513  					{
   514  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   515  							{
   516  								Name:  "color",
   517  								Value: "red",
   518  							},
   519  						},
   520  					},
   521  					{
   522  						Headers: []gatewayv1beta1.HTTPHeaderMatch{
   523  							{
   524  								Name:  "color",
   525  								Value: "yellow",
   526  							},
   527  						},
   528  					},
   529  				},
   530  				BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   531  					{
   532  						BackendRef: gatewayv1beta1.BackendRef{
   533  							BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   534  								Name: "infra-backend-v2",
   535  								Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   536  							},
   537  						},
   538  					},
   539  				},
   540  			},
   541  		},
   542  	},
   543  }
   544  
   545  // HTTPRoute hostname intersection
   546  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-hostname-intersection.yaml
   547  var hostnameIntersectionGateway = &gatewayv1beta1.Gateway{
   548  	ObjectMeta: metav1.ObjectMeta{
   549  		Name:      "httproute-hostname-intersection",
   550  		Namespace: "gateway-conformance-infra",
   551  	},
   552  	Spec: gatewayv1beta1.GatewaySpec{
   553  		GatewayClassName: "cilium",
   554  		Listeners: []gatewayv1beta1.Listener{
   555  			{
   556  				Name:     "listener-1",
   557  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("very.specific.com"),
   558  				Port:     80,
   559  				Protocol: "HTTP",
   560  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   561  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   562  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   563  					},
   564  				},
   565  			},
   566  			{
   567  				Name:     "listener-2",
   568  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.wildcard.io"),
   569  				Port:     80,
   570  				Protocol: "HTTP",
   571  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   572  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   573  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   574  					},
   575  				},
   576  			},
   577  			{
   578  				Name:     "listener-3",
   579  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.anotherwildcard.io"),
   580  				Port:     80,
   581  				Protocol: "HTTP",
   582  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   583  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   584  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   585  					},
   586  				},
   587  			},
   588  		},
   589  	},
   590  }
   591  
   592  var hostnameIntersectionHTTPRoutes = []gatewayv1beta1.HTTPRoute{
   593  	{
   594  		ObjectMeta: metav1.ObjectMeta{
   595  			Name:      "specific-host-matches-listener-specific-host",
   596  			Namespace: "gateway-conformance-infra",
   597  		},
   598  		Spec: gatewayv1beta1.HTTPRouteSpec{
   599  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   600  				ParentRefs: []gatewayv1beta1.ParentReference{
   601  					{
   602  						Name:      "httproute-hostname-intersection",
   603  						Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   604  					},
   605  				},
   606  			},
   607  			Hostnames: []gatewayv1beta1.Hostname{
   608  				"non.matching.com",
   609  				"*.nonmatchingwildcard.io", // matches listener-1's specific host
   610  				"very.specific.com",        // # matches listener-1's specific host
   611  			},
   612  			Rules: []gatewayv1beta1.HTTPRouteRule{
   613  				{
   614  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   615  						{
   616  							Path: &gatewayv1beta1.HTTPPathMatch{
   617  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
   618  								Value: model.AddressOf("/s1"),
   619  							},
   620  						},
   621  					},
   622  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   623  						{
   624  							BackendRef: gatewayv1beta1.BackendRef{
   625  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   626  									Name: "infra-backend-v1",
   627  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   628  								},
   629  							},
   630  						},
   631  					},
   632  				},
   633  			},
   634  		},
   635  	},
   636  	{
   637  		ObjectMeta: metav1.ObjectMeta{
   638  			Name:      "specific-host-matches-listener-wildcard-host",
   639  			Namespace: "gateway-conformance-infra",
   640  		},
   641  		Spec: gatewayv1beta1.HTTPRouteSpec{
   642  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   643  				ParentRefs: []gatewayv1beta1.ParentReference{
   644  					{
   645  						Name:      "httproute-hostname-intersection",
   646  						Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   647  					},
   648  				},
   649  			},
   650  			Hostnames: []gatewayv1beta1.Hostname{
   651  				"non.matching.com",
   652  				"wildcard.io",
   653  				"foo.wildcard.io",     // matches listener-2's wildcard host
   654  				"bar.wildcard.io",     // matches listener-2's wildcard host
   655  				"foo.bar.wildcard.io", // matches listener-2's wildcard host
   656  			},
   657  			Rules: []gatewayv1beta1.HTTPRouteRule{
   658  				{
   659  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   660  						{
   661  							Path: &gatewayv1beta1.HTTPPathMatch{
   662  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
   663  								Value: model.AddressOf("/s2"),
   664  							},
   665  						},
   666  					},
   667  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   668  						{
   669  							BackendRef: gatewayv1beta1.BackendRef{
   670  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   671  									Name: "infra-backend-v2",
   672  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   673  								},
   674  							},
   675  						},
   676  					},
   677  				},
   678  			},
   679  		},
   680  	},
   681  	{
   682  		ObjectMeta: metav1.ObjectMeta{
   683  			Name:      "wildcard-host-matches-listener-specific-host",
   684  			Namespace: "gateway-conformance-infra",
   685  		},
   686  		Spec: gatewayv1beta1.HTTPRouteSpec{
   687  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   688  				ParentRefs: []gatewayv1beta1.ParentReference{
   689  					{
   690  						Name:      "httproute-hostname-intersection",
   691  						Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   692  					},
   693  				},
   694  			},
   695  			Hostnames: []gatewayv1beta1.Hostname{
   696  				"non.matching.com",
   697  				"*.specific.com", // matches listener-1's wildcard host
   698  			},
   699  			Rules: []gatewayv1beta1.HTTPRouteRule{
   700  				{
   701  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   702  						{
   703  							Path: &gatewayv1beta1.HTTPPathMatch{
   704  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
   705  								Value: model.AddressOf("/s3"),
   706  							},
   707  						},
   708  					},
   709  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   710  						{
   711  							BackendRef: gatewayv1beta1.BackendRef{
   712  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   713  									Name: "infra-backend-v3",
   714  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   715  								},
   716  							},
   717  						},
   718  					},
   719  				},
   720  			},
   721  		},
   722  	},
   723  	{
   724  		ObjectMeta: metav1.ObjectMeta{
   725  			Name:      "wildcard-host-matches-listener-wildcard-host",
   726  			Namespace: "gateway-conformance-infra",
   727  		},
   728  		Spec: gatewayv1beta1.HTTPRouteSpec{
   729  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   730  				ParentRefs: []gatewayv1beta1.ParentReference{
   731  					{
   732  						Name:      "httproute-hostname-intersection",
   733  						Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   734  					},
   735  				},
   736  			},
   737  			Hostnames: []gatewayv1beta1.Hostname{
   738  				"*.anotherwildcard.io", // matches listener-3's wildcard host
   739  			},
   740  			Rules: []gatewayv1beta1.HTTPRouteRule{
   741  				{
   742  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   743  						{
   744  							Path: &gatewayv1beta1.HTTPPathMatch{
   745  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
   746  								Value: model.AddressOf("/s4"),
   747  							},
   748  						},
   749  					},
   750  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   751  						{
   752  							BackendRef: gatewayv1beta1.BackendRef{
   753  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   754  									Name: "infra-backend-v1",
   755  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   756  								},
   757  							},
   758  						},
   759  					},
   760  				},
   761  			},
   762  		},
   763  	},
   764  	{
   765  		ObjectMeta: metav1.ObjectMeta{
   766  			Name:      "no-intersecting-hosts",
   767  			Namespace: "gateway-conformance-infra",
   768  		},
   769  		Spec: gatewayv1beta1.HTTPRouteSpec{
   770  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   771  				ParentRefs: []gatewayv1beta1.ParentReference{
   772  					{
   773  						Name:      "httproute-hostname-intersection",
   774  						Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   775  					},
   776  				},
   777  			},
   778  			Hostnames: []gatewayv1beta1.Hostname{
   779  				"specific.but.wrong.com",
   780  				"wildcard.io",
   781  			},
   782  			Rules: []gatewayv1beta1.HTTPRouteRule{
   783  				{
   784  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   785  						{
   786  							Path: &gatewayv1beta1.HTTPPathMatch{
   787  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
   788  								Value: model.AddressOf("/s5"),
   789  							},
   790  						},
   791  					},
   792  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   793  						{
   794  							BackendRef: gatewayv1beta1.BackendRef{
   795  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   796  									Name: "infra-backend-v2",
   797  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   798  								},
   799  							},
   800  						},
   801  					},
   802  				},
   803  			},
   804  		},
   805  	},
   806  }
   807  
   808  // HTTPRoute listener hostname matching
   809  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-listener-hostname-matching.yaml
   810  var listenerHostnameMatchingGateway = &gatewayv1beta1.Gateway{
   811  	ObjectMeta: metav1.ObjectMeta{
   812  		Name:      "httproute-listener-hostname-matching",
   813  		Namespace: "gateway-conformance-infra",
   814  	},
   815  	Spec: gatewayv1beta1.GatewaySpec{
   816  		GatewayClassName: "cilium",
   817  		Listeners: []gatewayv1beta1.Listener{
   818  			{
   819  				Name:     "listener-1",
   820  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("bar.com"),
   821  				Port:     80,
   822  				Protocol: "HTTP",
   823  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   824  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   825  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   826  					},
   827  				},
   828  			},
   829  			{
   830  				Name:     "listener-2",
   831  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("foo.bar.com"),
   832  				Port:     80,
   833  				Protocol: "HTTP",
   834  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   835  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   836  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   837  					},
   838  				},
   839  			},
   840  			{
   841  				Name:     "listener-3",
   842  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.bar.com"),
   843  				Port:     80,
   844  				Protocol: "HTTP",
   845  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   846  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   847  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   848  					},
   849  				},
   850  			},
   851  			{
   852  				Name:     "listener-4",
   853  				Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.foo.com"),
   854  				Port:     80,
   855  				Protocol: "HTTP",
   856  				AllowedRoutes: &gatewayv1beta1.AllowedRoutes{
   857  					Namespaces: &gatewayv1beta1.RouteNamespaces{
   858  						From: model.AddressOf(gatewayv1beta1.NamespacesFromSame),
   859  					},
   860  				},
   861  			},
   862  		},
   863  	},
   864  }
   865  
   866  var listenerHostnameMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{
   867  	{
   868  		ObjectMeta: metav1.ObjectMeta{
   869  			Name:      "backend-v1",
   870  			Namespace: "gateway-conformance-infra",
   871  		},
   872  		Spec: gatewayv1beta1.HTTPRouteSpec{
   873  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   874  				ParentRefs: []gatewayv1beta1.ParentReference{
   875  					{
   876  						Name:        "httproute-listener-hostname-matching",
   877  						Namespace:   model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   878  						SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-1"),
   879  					},
   880  				},
   881  			},
   882  			Rules: []gatewayv1beta1.HTTPRouteRule{
   883  				{
   884  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   885  						{
   886  							BackendRef: gatewayv1beta1.BackendRef{
   887  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   888  									Name: "infra-backend-v1",
   889  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   890  								},
   891  							},
   892  						},
   893  					},
   894  				},
   895  			},
   896  		},
   897  	},
   898  	{
   899  		ObjectMeta: metav1.ObjectMeta{
   900  			Name:      "backend-v2",
   901  			Namespace: "gateway-conformance-infra",
   902  		},
   903  		Spec: gatewayv1beta1.HTTPRouteSpec{
   904  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   905  				ParentRefs: []gatewayv1beta1.ParentReference{
   906  					{
   907  						Name:        "httproute-listener-hostname-matching",
   908  						Namespace:   model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   909  						SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-2"),
   910  					},
   911  				},
   912  			},
   913  			Rules: []gatewayv1beta1.HTTPRouteRule{
   914  				{
   915  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   916  						{
   917  							BackendRef: gatewayv1beta1.BackendRef{
   918  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   919  									Name: "infra-backend-v2",
   920  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   921  								},
   922  							},
   923  						},
   924  					},
   925  				},
   926  			},
   927  		},
   928  	},
   929  	{
   930  		ObjectMeta: metav1.ObjectMeta{
   931  			Name:      "backend-v3",
   932  			Namespace: "gateway-conformance-infra",
   933  		},
   934  		Spec: gatewayv1beta1.HTTPRouteSpec{
   935  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   936  				ParentRefs: []gatewayv1beta1.ParentReference{
   937  					{
   938  						Name:        "httproute-listener-hostname-matching",
   939  						Namespace:   model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   940  						SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-3"),
   941  					},
   942  					{
   943  						Name:        "httproute-listener-hostname-matching",
   944  						Namespace:   model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
   945  						SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-4"),
   946  					},
   947  				},
   948  			},
   949  			Rules: []gatewayv1beta1.HTTPRouteRule{
   950  				{
   951  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
   952  						{
   953  							BackendRef: gatewayv1beta1.BackendRef{
   954  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
   955  									Name: "infra-backend-v3",
   956  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
   957  								},
   958  							},
   959  						},
   960  					},
   961  				},
   962  			},
   963  		},
   964  	},
   965  }
   966  
   967  // HTTPRoute matching across routes
   968  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-matching-across-routes.yaml
   969  var matchingAcrossHTTPRoutes = []gatewayv1beta1.HTTPRoute{
   970  	{
   971  		ObjectMeta: metav1.ObjectMeta{
   972  			Name:      "matching-part1",
   973  			Namespace: "gateway-conformance-infra",
   974  		},
   975  		Spec: gatewayv1beta1.HTTPRouteSpec{
   976  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
   977  				ParentRefs: []gatewayv1beta1.ParentReference{
   978  					{
   979  						Name: "same-namespace",
   980  					},
   981  				},
   982  			},
   983  			Hostnames: []gatewayv1beta1.Hostname{
   984  				"example.com",
   985  				"example.net",
   986  			},
   987  			Rules: []gatewayv1beta1.HTTPRouteRule{
   988  				{
   989  					Matches: []gatewayv1beta1.HTTPRouteMatch{
   990  						{
   991  							Path: &gatewayv1beta1.HTTPPathMatch{
   992  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
   993  								Value: model.AddressOf("/"),
   994  							},
   995  							Headers: []gatewayv1beta1.HTTPHeaderMatch{
   996  								{
   997  									Name:  "version",
   998  									Value: "one",
   999  								},
  1000  							},
  1001  						},
  1002  					},
  1003  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1004  						{
  1005  							BackendRef: gatewayv1beta1.BackendRef{
  1006  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1007  									Name: "infra-backend-v1",
  1008  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1009  								},
  1010  							},
  1011  						},
  1012  					},
  1013  				},
  1014  			},
  1015  		},
  1016  	},
  1017  	{
  1018  		ObjectMeta: metav1.ObjectMeta{
  1019  			Name:      "matching-part2",
  1020  			Namespace: "gateway-conformance-infra",
  1021  		},
  1022  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1023  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1024  				ParentRefs: []gatewayv1beta1.ParentReference{
  1025  					{
  1026  						Name: "same-namespace",
  1027  					},
  1028  				},
  1029  			},
  1030  			Hostnames: []gatewayv1beta1.Hostname{
  1031  				"example.com",
  1032  			},
  1033  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1034  				{
  1035  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1036  						{
  1037  							Path: &gatewayv1beta1.HTTPPathMatch{
  1038  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1039  								Value: model.AddressOf("/v2"),
  1040  							},
  1041  							Headers: []gatewayv1beta1.HTTPHeaderMatch{
  1042  								{
  1043  									Name:  "version",
  1044  									Value: "two",
  1045  								},
  1046  							},
  1047  						},
  1048  					},
  1049  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1050  						{
  1051  							BackendRef: gatewayv1beta1.BackendRef{
  1052  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1053  									Name: "infra-backend-v2",
  1054  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1055  								},
  1056  							},
  1057  						},
  1058  					},
  1059  				},
  1060  			},
  1061  		},
  1062  	},
  1063  }
  1064  
  1065  // HTTPRoute matching
  1066  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-matching.yaml
  1067  var matchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1068  	{
  1069  		ObjectMeta: metav1.ObjectMeta{
  1070  			Name:      "matching",
  1071  			Namespace: "gateway-conformance-infra",
  1072  		},
  1073  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1074  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1075  				ParentRefs: []gatewayv1beta1.ParentReference{
  1076  					{
  1077  						Name: "same-namespace",
  1078  					},
  1079  				},
  1080  			},
  1081  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1082  				{
  1083  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1084  						{
  1085  							Path: &gatewayv1beta1.HTTPPathMatch{
  1086  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1087  								Value: model.AddressOf("/"),
  1088  							},
  1089  							Headers: []gatewayv1beta1.HTTPHeaderMatch{
  1090  								{
  1091  									Name:  "version",
  1092  									Value: "one",
  1093  								},
  1094  							},
  1095  						},
  1096  					},
  1097  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1098  						{
  1099  							BackendRef: gatewayv1beta1.BackendRef{
  1100  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1101  									Name: "infra-backend-v1",
  1102  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1103  								},
  1104  							},
  1105  						},
  1106  					},
  1107  				},
  1108  				{
  1109  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1110  						{
  1111  							Path: &gatewayv1beta1.HTTPPathMatch{
  1112  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1113  								Value: model.AddressOf("/v2"),
  1114  							},
  1115  							Headers: []gatewayv1beta1.HTTPHeaderMatch{
  1116  								{
  1117  									Name:  "version",
  1118  									Value: "two",
  1119  								},
  1120  							},
  1121  						},
  1122  					},
  1123  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1124  						{
  1125  							BackendRef: gatewayv1beta1.BackendRef{
  1126  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1127  									Name: "infra-backend-v2",
  1128  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1129  								},
  1130  							},
  1131  						},
  1132  					},
  1133  				},
  1134  			},
  1135  		},
  1136  	},
  1137  }
  1138  
  1139  // HTTPRoute query param matching
  1140  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-query-param-matching.yaml
  1141  var queryParamMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1142  	{
  1143  		ObjectMeta: metav1.ObjectMeta{
  1144  			Name:      "query-param-matching",
  1145  			Namespace: "gateway-conformance-infra",
  1146  		},
  1147  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1148  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1149  				ParentRefs: []gatewayv1beta1.ParentReference{
  1150  					{
  1151  						Name: "same-namespace",
  1152  					},
  1153  				},
  1154  			},
  1155  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1156  				{
  1157  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1158  						{
  1159  							QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{
  1160  								{
  1161  									Name:  "animal",
  1162  									Value: "whale",
  1163  								},
  1164  							},
  1165  						},
  1166  					},
  1167  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1168  						{
  1169  							BackendRef: gatewayv1beta1.BackendRef{
  1170  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1171  									Name: "infra-backend-v1",
  1172  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1173  								},
  1174  							},
  1175  						},
  1176  					},
  1177  				},
  1178  				{
  1179  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1180  						{
  1181  							QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{
  1182  								{
  1183  									Name:  "animal",
  1184  									Value: "dolphin",
  1185  								},
  1186  							},
  1187  						},
  1188  					},
  1189  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1190  						{
  1191  							BackendRef: gatewayv1beta1.BackendRef{
  1192  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1193  									Name: "infra-backend-v2",
  1194  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1195  								},
  1196  							},
  1197  						},
  1198  					},
  1199  				},
  1200  				{
  1201  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1202  						{
  1203  							QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{
  1204  								{
  1205  									Name:  "animal",
  1206  									Value: "dolphin",
  1207  								},
  1208  								{
  1209  									Name:  "color",
  1210  									Value: "blue",
  1211  								},
  1212  							},
  1213  						},
  1214  						{
  1215  							QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{
  1216  								{
  1217  									Name:  "ANIMAL",
  1218  									Value: "Whale",
  1219  								},
  1220  							},
  1221  						},
  1222  					},
  1223  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1224  						{
  1225  							BackendRef: gatewayv1beta1.BackendRef{
  1226  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1227  									Name: "infra-backend-v3",
  1228  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1229  								},
  1230  							},
  1231  						},
  1232  					},
  1233  				},
  1234  			},
  1235  		},
  1236  	},
  1237  }
  1238  
  1239  // HTTPRoute request header modifier
  1240  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-request-header-modifier.yaml
  1241  var requestHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1242  	{
  1243  		ObjectMeta: metav1.ObjectMeta{
  1244  			Name:      "request-header-modifier",
  1245  			Namespace: "gateway-conformance-infra",
  1246  		},
  1247  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1248  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1249  				ParentRefs: []gatewayv1beta1.ParentReference{
  1250  					{
  1251  						Name: "same-namespace",
  1252  					},
  1253  				},
  1254  			},
  1255  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1256  				{
  1257  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1258  						{
  1259  							Path: &gatewayv1beta1.HTTPPathMatch{
  1260  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1261  								Value: model.AddressOf("/set"),
  1262  							},
  1263  						},
  1264  					},
  1265  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1266  						{
  1267  							Type: "RequestHeaderModifier",
  1268  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1269  								Set: []gatewayv1beta1.HTTPHeader{
  1270  									{
  1271  										Name:  "X-Header-Set",
  1272  										Value: "set-overwrites-values",
  1273  									},
  1274  								},
  1275  							},
  1276  						},
  1277  					},
  1278  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1279  						{
  1280  							BackendRef: gatewayv1beta1.BackendRef{
  1281  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1282  									Name: "infra-backend-v1",
  1283  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1284  								},
  1285  							},
  1286  						},
  1287  					},
  1288  				},
  1289  				{
  1290  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1291  						{
  1292  							Path: &gatewayv1beta1.HTTPPathMatch{
  1293  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1294  								Value: model.AddressOf("/add"),
  1295  							},
  1296  						},
  1297  					},
  1298  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1299  						{
  1300  							Type: "RequestHeaderModifier",
  1301  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1302  								Add: []gatewayv1beta1.HTTPHeader{
  1303  									{
  1304  										Name:  "X-Header-Add",
  1305  										Value: "add-appends-values",
  1306  									},
  1307  								},
  1308  							},
  1309  						},
  1310  					},
  1311  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1312  						{
  1313  							BackendRef: gatewayv1beta1.BackendRef{
  1314  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1315  									Name: "infra-backend-v1",
  1316  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1317  								},
  1318  							},
  1319  						},
  1320  					},
  1321  				},
  1322  				{
  1323  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1324  						{
  1325  							Path: &gatewayv1beta1.HTTPPathMatch{
  1326  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1327  								Value: model.AddressOf("/remove"),
  1328  							},
  1329  						},
  1330  					},
  1331  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1332  						{
  1333  							Type: "RequestHeaderModifier",
  1334  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1335  								Remove: []string{
  1336  									"X-Header-Remove",
  1337  								},
  1338  							},
  1339  						},
  1340  					},
  1341  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1342  						{
  1343  							BackendRef: gatewayv1beta1.BackendRef{
  1344  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1345  									Name: "infra-backend-v1",
  1346  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1347  								},
  1348  							},
  1349  						},
  1350  					},
  1351  				},
  1352  				{
  1353  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1354  						{
  1355  							Path: &gatewayv1beta1.HTTPPathMatch{
  1356  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1357  								Value: model.AddressOf("/multiple"),
  1358  							},
  1359  						},
  1360  					},
  1361  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1362  						{
  1363  							Type: "RequestHeaderModifier",
  1364  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1365  								Set: []gatewayv1beta1.HTTPHeader{
  1366  									{
  1367  										Name:  "X-Header-Set-1",
  1368  										Value: "header-set-1",
  1369  									},
  1370  									{
  1371  										Name:  "X-Header-Set-2",
  1372  										Value: "header-set-2",
  1373  									},
  1374  								},
  1375  								Add: []gatewayv1beta1.HTTPHeader{
  1376  									{
  1377  										Name:  "X-Header-Add-1",
  1378  										Value: "header-add-1",
  1379  									},
  1380  									{
  1381  										Name:  "X-Header-Add-2",
  1382  										Value: "header-add-2",
  1383  									},
  1384  									{
  1385  										Name:  "X-Header-Add-3",
  1386  										Value: "header-add-3",
  1387  									},
  1388  								},
  1389  								Remove: []string{
  1390  									"X-Header-Remove-1",
  1391  									"X-Header-Remove-2",
  1392  								},
  1393  							},
  1394  						},
  1395  					},
  1396  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1397  						{
  1398  							BackendRef: gatewayv1beta1.BackendRef{
  1399  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1400  									Name: "infra-backend-v1",
  1401  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1402  								},
  1403  							},
  1404  						},
  1405  					},
  1406  				},
  1407  				{
  1408  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1409  						{
  1410  							Path: &gatewayv1beta1.HTTPPathMatch{
  1411  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1412  								Value: model.AddressOf("/case-insensitivity"),
  1413  							},
  1414  						},
  1415  					},
  1416  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1417  						{
  1418  							Type: "RequestHeaderModifier",
  1419  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1420  								Set: []gatewayv1beta1.HTTPHeader{
  1421  									{
  1422  										Name:  "X-Header-Set",
  1423  										Value: "header-set",
  1424  									},
  1425  								},
  1426  								Add: []gatewayv1beta1.HTTPHeader{
  1427  									{
  1428  										Name:  "X-Header-Add",
  1429  										Value: "header-add",
  1430  									},
  1431  								},
  1432  								Remove: []string{
  1433  									"X-Header-Remove",
  1434  								},
  1435  							},
  1436  						},
  1437  					},
  1438  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1439  						{
  1440  							BackendRef: gatewayv1beta1.BackendRef{
  1441  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1442  									Name: "infra-backend-v1",
  1443  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1444  								},
  1445  							},
  1446  						},
  1447  					},
  1448  				},
  1449  			},
  1450  		},
  1451  	},
  1452  }
  1453  
  1454  // HTTPRouteBackendRefs request header modifier
  1455  var backendRefsRequestHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1456  	{
  1457  		ObjectMeta: metav1.ObjectMeta{
  1458  			Name:      "request-header-modifier",
  1459  			Namespace: "gateway-conformance-infra",
  1460  		},
  1461  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1462  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1463  				ParentRefs: []gatewayv1beta1.ParentReference{
  1464  					{
  1465  						Name: "same-namespace",
  1466  					},
  1467  				},
  1468  			},
  1469  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1470  				{
  1471  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1472  						{
  1473  							Path: &gatewayv1beta1.HTTPPathMatch{
  1474  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1475  								Value: model.AddressOf("/set"),
  1476  							},
  1477  						},
  1478  					},
  1479  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1480  						{
  1481  							BackendRef: gatewayv1beta1.BackendRef{
  1482  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1483  									Name: "infra-backend-v1",
  1484  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1485  								},
  1486  							},
  1487  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1488  								{
  1489  									Type: "RequestHeaderModifier",
  1490  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1491  										Set: []gatewayv1beta1.HTTPHeader{
  1492  											{
  1493  												Name:  "X-Header-Set",
  1494  												Value: "set-overwrites-values",
  1495  											},
  1496  										},
  1497  									},
  1498  								},
  1499  							},
  1500  						},
  1501  					},
  1502  				},
  1503  				{
  1504  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1505  						{
  1506  							Path: &gatewayv1beta1.HTTPPathMatch{
  1507  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1508  								Value: model.AddressOf("/add"),
  1509  							},
  1510  						},
  1511  					},
  1512  
  1513  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1514  						{
  1515  							BackendRef: gatewayv1beta1.BackendRef{
  1516  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1517  									Name: "infra-backend-v1",
  1518  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1519  								},
  1520  							},
  1521  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1522  								{
  1523  									Type: "RequestHeaderModifier",
  1524  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1525  										Add: []gatewayv1beta1.HTTPHeader{
  1526  											{
  1527  												Name:  "X-Header-Add",
  1528  												Value: "add-appends-values",
  1529  											},
  1530  										},
  1531  									},
  1532  								},
  1533  							},
  1534  						},
  1535  					},
  1536  				},
  1537  				{
  1538  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1539  						{
  1540  							Path: &gatewayv1beta1.HTTPPathMatch{
  1541  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1542  								Value: model.AddressOf("/remove"),
  1543  							},
  1544  						},
  1545  					},
  1546  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1547  						{
  1548  							BackendRef: gatewayv1beta1.BackendRef{
  1549  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1550  									Name: "infra-backend-v1",
  1551  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1552  								},
  1553  							},
  1554  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1555  								{
  1556  									Type: "RequestHeaderModifier",
  1557  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1558  										Remove: []string{
  1559  											"X-Header-Remove",
  1560  										},
  1561  									},
  1562  								},
  1563  							},
  1564  						},
  1565  					},
  1566  				},
  1567  				{
  1568  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1569  						{
  1570  							Path: &gatewayv1beta1.HTTPPathMatch{
  1571  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1572  								Value: model.AddressOf("/multiple-backends"),
  1573  							},
  1574  						},
  1575  					},
  1576  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1577  						{
  1578  							BackendRef: gatewayv1beta1.BackendRef{
  1579  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1580  									Name: "infra-backend-v1",
  1581  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1582  								},
  1583  							},
  1584  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1585  								{
  1586  									Type: "RequestHeaderModifier",
  1587  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1588  										Add: []gatewayv1beta1.HTTPHeader{
  1589  											{
  1590  												Name:  "X-Header-Add-1",
  1591  												Value: "header-add-1",
  1592  											},
  1593  											{
  1594  												Name:  "X-Header-Add-2",
  1595  												Value: "header-add-2",
  1596  											},
  1597  										},
  1598  									},
  1599  								},
  1600  							},
  1601  						},
  1602  						{
  1603  							BackendRef: gatewayv1beta1.BackendRef{
  1604  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1605  									Name: "infra-backend-v2",
  1606  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1607  								},
  1608  							},
  1609  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1610  								{
  1611  									Type: "RequestHeaderModifier",
  1612  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1613  										Add: []gatewayv1beta1.HTTPHeader{
  1614  											{
  1615  												Name:  "X-Header-Add-3",
  1616  												Value: "header-add-3",
  1617  											},
  1618  										},
  1619  									},
  1620  								},
  1621  							},
  1622  						},
  1623  					},
  1624  				},
  1625  				{
  1626  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1627  						{
  1628  							Path: &gatewayv1beta1.HTTPPathMatch{
  1629  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact),
  1630  								Value: model.AddressOf("/multiple-backends-with-some-not"),
  1631  							},
  1632  						},
  1633  					},
  1634  
  1635  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1636  						{
  1637  							BackendRef: gatewayv1beta1.BackendRef{
  1638  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1639  									Name: "infra-backend-v1",
  1640  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1641  								},
  1642  							},
  1643  						},
  1644  						{
  1645  							BackendRef: gatewayv1beta1.BackendRef{
  1646  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1647  									Name: "infra-backend-v2",
  1648  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1649  								},
  1650  							},
  1651  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  1652  								{
  1653  									Type: "RequestHeaderModifier",
  1654  									RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1655  										Set: []gatewayv1beta1.HTTPHeader{
  1656  											{
  1657  												Name:  "X-Header-Set",
  1658  												Value: "header-set",
  1659  											},
  1660  										},
  1661  										Add: []gatewayv1beta1.HTTPHeader{
  1662  											{
  1663  												Name:  "X-Header-Add",
  1664  												Value: "header-add",
  1665  											},
  1666  										},
  1667  										Remove: []string{
  1668  											"X-Header-Remove",
  1669  										},
  1670  									},
  1671  								},
  1672  							},
  1673  						},
  1674  					},
  1675  				},
  1676  			},
  1677  		},
  1678  	},
  1679  }
  1680  
  1681  // HTTPRoute simple same namespace
  1682  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-simple-same-namespace.yaml
  1683  var simpleSameNamespaceHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1684  	{
  1685  		ObjectMeta: metav1.ObjectMeta{
  1686  			Name:      "gateway-conformance-infra-test",
  1687  			Namespace: "gateway-conformance-infra",
  1688  		},
  1689  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1690  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1691  				ParentRefs: []gatewayv1beta1.ParentReference{
  1692  					{
  1693  						Name: "same-namespace",
  1694  					},
  1695  				},
  1696  			},
  1697  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1698  				{
  1699  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1700  						{
  1701  							BackendRef: gatewayv1beta1.BackendRef{
  1702  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1703  									Name: "infra-backend-v1",
  1704  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1705  								},
  1706  							},
  1707  						},
  1708  					},
  1709  				},
  1710  			},
  1711  		},
  1712  	},
  1713  }
  1714  
  1715  // HTTPRoute method matching
  1716  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-method-matching.yaml
  1717  var methodMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1718  	{
  1719  		ObjectMeta: metav1.ObjectMeta{
  1720  			Name:      "method-matching",
  1721  			Namespace: "gateway-conformance-infra",
  1722  		},
  1723  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1724  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1725  				ParentRefs: []gatewayv1beta1.ParentReference{
  1726  					{
  1727  						Name: "same-namespace",
  1728  					},
  1729  				},
  1730  			},
  1731  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1732  				{
  1733  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1734  						{
  1735  							Method: model.AddressOf[gatewayv1beta1.HTTPMethod]("POST"),
  1736  						},
  1737  					},
  1738  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1739  						{
  1740  							BackendRef: gatewayv1beta1.BackendRef{
  1741  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1742  									Name: "infra-backend-v1",
  1743  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1744  								},
  1745  							},
  1746  						},
  1747  					},
  1748  				},
  1749  				{
  1750  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1751  						{
  1752  							Method: model.AddressOf[gatewayv1beta1.HTTPMethod]("GET"),
  1753  						},
  1754  					},
  1755  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1756  						{
  1757  							BackendRef: gatewayv1beta1.BackendRef{
  1758  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1759  									Name: "infra-backend-v2",
  1760  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1761  								},
  1762  							},
  1763  						},
  1764  					},
  1765  				},
  1766  			},
  1767  		},
  1768  	},
  1769  }
  1770  
  1771  // HTTPRoute request redirect
  1772  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-request-redirect.yaml
  1773  var requestRedirectHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1774  	{
  1775  		ObjectMeta: metav1.ObjectMeta{
  1776  			Name:      "request-redirect",
  1777  			Namespace: "gateway-conformance-infra",
  1778  		},
  1779  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1780  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1781  				ParentRefs: []gatewayv1beta1.ParentReference{
  1782  					{
  1783  						Name: "same-namespace",
  1784  					},
  1785  				},
  1786  			},
  1787  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1788  				{
  1789  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1790  						{
  1791  							Path: &gatewayv1beta1.HTTPPathMatch{
  1792  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1793  								Value: model.AddressOf("/hostname-redirect"),
  1794  							},
  1795  						},
  1796  					},
  1797  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1798  						{
  1799  							Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect,
  1800  							RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{
  1801  								Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("example.com"),
  1802  							},
  1803  						},
  1804  					},
  1805  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1806  						{
  1807  							BackendRef: gatewayv1beta1.BackendRef{
  1808  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1809  									Name: "infra-backend-v1",
  1810  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1811  								},
  1812  							},
  1813  						},
  1814  					},
  1815  				},
  1816  				{
  1817  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1818  						{
  1819  							Path: &gatewayv1beta1.HTTPPathMatch{
  1820  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1821  								Value: model.AddressOf("/status-code-301"),
  1822  							},
  1823  						},
  1824  					},
  1825  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1826  						{
  1827  							Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect,
  1828  							RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{
  1829  								StatusCode: model.AddressOf(301),
  1830  							},
  1831  						},
  1832  					},
  1833  				},
  1834  				{
  1835  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1836  						{
  1837  							Path: &gatewayv1beta1.HTTPPathMatch{
  1838  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1839  								Value: model.AddressOf("/host-and-status"),
  1840  							},
  1841  						},
  1842  					},
  1843  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1844  						{
  1845  							Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect,
  1846  							RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{
  1847  								Hostname:   model.AddressOf[gatewayv1beta1.PreciseHostname]("example.com"),
  1848  								StatusCode: model.AddressOf(301),
  1849  							},
  1850  						},
  1851  					},
  1852  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1853  						{
  1854  							BackendRef: gatewayv1beta1.BackendRef{
  1855  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1856  									Name: "infra-backend-v1",
  1857  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1858  								},
  1859  							},
  1860  						},
  1861  					},
  1862  				},
  1863  			},
  1864  		},
  1865  	},
  1866  }
  1867  
  1868  // HTTPRoute response header modifier
  1869  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-response-header-modifier.yaml
  1870  var responseHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  1871  	{
  1872  		ObjectMeta: metav1.ObjectMeta{
  1873  			Name:      "response-header-modifier",
  1874  			Namespace: "gateway-conformance-infra",
  1875  		},
  1876  		Spec: gatewayv1beta1.HTTPRouteSpec{
  1877  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  1878  				ParentRefs: []gatewayv1beta1.ParentReference{
  1879  					{
  1880  						Name: "same-namespace",
  1881  					},
  1882  				},
  1883  			},
  1884  			Rules: []gatewayv1beta1.HTTPRouteRule{
  1885  				{
  1886  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1887  						{
  1888  							Path: &gatewayv1beta1.HTTPPathMatch{
  1889  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1890  								Value: model.AddressOf("/set"),
  1891  							},
  1892  						},
  1893  					},
  1894  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1895  						{
  1896  							Type: "ResponseHeaderModifier",
  1897  							ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1898  								Set: []gatewayv1beta1.HTTPHeader{
  1899  									{
  1900  										Name:  "X-Header-Set",
  1901  										Value: "set-overwrites-values",
  1902  									},
  1903  								},
  1904  							},
  1905  						},
  1906  					},
  1907  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1908  						{
  1909  							BackendRef: gatewayv1beta1.BackendRef{
  1910  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1911  									Name: "infra-backend-v1",
  1912  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1913  								},
  1914  							},
  1915  						},
  1916  					},
  1917  				},
  1918  				{
  1919  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1920  						{
  1921  							Path: &gatewayv1beta1.HTTPPathMatch{
  1922  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1923  								Value: model.AddressOf("/add"),
  1924  							},
  1925  						},
  1926  					},
  1927  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1928  						{
  1929  							Type: "ResponseHeaderModifier",
  1930  							ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1931  								Add: []gatewayv1beta1.HTTPHeader{
  1932  									{
  1933  										Name:  "X-Header-Add",
  1934  										Value: "add-appends-values",
  1935  									},
  1936  								},
  1937  							},
  1938  						},
  1939  					},
  1940  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1941  						{
  1942  							BackendRef: gatewayv1beta1.BackendRef{
  1943  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1944  									Name: "infra-backend-v1",
  1945  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1946  								},
  1947  							},
  1948  						},
  1949  					},
  1950  				},
  1951  				{
  1952  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1953  						{
  1954  							Path: &gatewayv1beta1.HTTPPathMatch{
  1955  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1956  								Value: model.AddressOf("/remove"),
  1957  							},
  1958  						},
  1959  					},
  1960  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1961  						{
  1962  							Type: "ResponseHeaderModifier",
  1963  							ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1964  								Remove: []string{
  1965  									"X-Header-Remove",
  1966  								},
  1967  							},
  1968  						},
  1969  					},
  1970  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  1971  						{
  1972  							BackendRef: gatewayv1beta1.BackendRef{
  1973  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  1974  									Name: "infra-backend-v1",
  1975  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  1976  								},
  1977  							},
  1978  						},
  1979  					},
  1980  				},
  1981  				{
  1982  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  1983  						{
  1984  							Path: &gatewayv1beta1.HTTPPathMatch{
  1985  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  1986  								Value: model.AddressOf("/multiple"),
  1987  							},
  1988  						},
  1989  					},
  1990  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  1991  						{
  1992  							Type: "ResponseHeaderModifier",
  1993  							ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  1994  								Set: []gatewayv1beta1.HTTPHeader{
  1995  									{
  1996  										Name:  "X-Header-Set-1",
  1997  										Value: "header-set-1",
  1998  									},
  1999  									{
  2000  										Name:  "X-Header-Set-2",
  2001  										Value: "header-set-2",
  2002  									},
  2003  								},
  2004  								Add: []gatewayv1beta1.HTTPHeader{
  2005  									{
  2006  										Name:  "X-Header-Add-1",
  2007  										Value: "header-add-1",
  2008  									},
  2009  									{
  2010  										Name:  "X-Header-Add-2",
  2011  										Value: "header-add-2",
  2012  									},
  2013  									{
  2014  										Name:  "X-Header-Add-3",
  2015  										Value: "header-add-3",
  2016  									},
  2017  								},
  2018  								Remove: []string{
  2019  									"X-Header-Remove-1",
  2020  									"X-Header-Remove-2",
  2021  								},
  2022  							},
  2023  						},
  2024  					},
  2025  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2026  						{
  2027  							BackendRef: gatewayv1beta1.BackendRef{
  2028  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2029  									Name: "infra-backend-v1",
  2030  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2031  								},
  2032  							},
  2033  						},
  2034  					},
  2035  				},
  2036  				{
  2037  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2038  						{
  2039  							Path: &gatewayv1beta1.HTTPPathMatch{
  2040  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2041  								Value: model.AddressOf("/case-insensitivity"),
  2042  							},
  2043  						},
  2044  					},
  2045  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2046  						{
  2047  							Type: "ResponseHeaderModifier",
  2048  							ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2049  								Set: []gatewayv1beta1.HTTPHeader{
  2050  									{
  2051  										Name:  "X-Header-Set",
  2052  										Value: "header-set",
  2053  									},
  2054  								},
  2055  								Add: []gatewayv1beta1.HTTPHeader{
  2056  									{
  2057  										Name:  "X-Header-Add",
  2058  										Value: "header-add",
  2059  									},
  2060  									{
  2061  										Name:  "x-lowercase-add",
  2062  										Value: "lowercase-add",
  2063  									},
  2064  									{
  2065  										Name:  "x-Mixedcase-ADD-1",
  2066  										Value: "mixedcase-add-1",
  2067  									},
  2068  									{
  2069  										Name:  "X-mixeDcase-add-2",
  2070  										Value: "mixedcase-add-2",
  2071  									},
  2072  									{
  2073  										Name:  "X-UPPERCASE-ADD",
  2074  										Value: "uppercase-add",
  2075  									},
  2076  								},
  2077  								Remove: []string{
  2078  									"X-Header-Remove",
  2079  								},
  2080  							},
  2081  						},
  2082  					},
  2083  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2084  						{
  2085  							BackendRef: gatewayv1beta1.BackendRef{
  2086  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2087  									Name: "infra-backend-v1",
  2088  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2089  								},
  2090  							},
  2091  						},
  2092  					},
  2093  				},
  2094  			},
  2095  		},
  2096  	},
  2097  }
  2098  
  2099  // HTTPRouteBackendRefs response header modifier
  2100  var backendRefsResponseHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  2101  	{
  2102  		ObjectMeta: metav1.ObjectMeta{
  2103  			Name:      "response-header-modifier",
  2104  			Namespace: "gateway-conformance-infra",
  2105  		},
  2106  		Spec: gatewayv1beta1.HTTPRouteSpec{
  2107  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  2108  				ParentRefs: []gatewayv1beta1.ParentReference{
  2109  					{
  2110  						Name: "same-namespace",
  2111  					},
  2112  				},
  2113  			},
  2114  			Rules: []gatewayv1beta1.HTTPRouteRule{
  2115  				{
  2116  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2117  						{
  2118  							Path: &gatewayv1beta1.HTTPPathMatch{
  2119  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2120  								Value: model.AddressOf("/set"),
  2121  							},
  2122  						},
  2123  					},
  2124  
  2125  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2126  						{
  2127  							BackendRef: gatewayv1beta1.BackendRef{
  2128  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2129  									Name: "infra-backend-v1",
  2130  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2131  								},
  2132  							},
  2133  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2134  								{
  2135  									Type: "ResponseHeaderModifier",
  2136  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2137  										Set: []gatewayv1beta1.HTTPHeader{
  2138  											{
  2139  												Name:  "X-Header-Set",
  2140  												Value: "set-overwrites-values",
  2141  											},
  2142  										},
  2143  									},
  2144  								},
  2145  							},
  2146  						},
  2147  					},
  2148  				},
  2149  				{
  2150  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2151  						{
  2152  							Path: &gatewayv1beta1.HTTPPathMatch{
  2153  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2154  								Value: model.AddressOf("/add"),
  2155  							},
  2156  						},
  2157  					},
  2158  
  2159  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2160  						{
  2161  							BackendRef: gatewayv1beta1.BackendRef{
  2162  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2163  									Name: "infra-backend-v1",
  2164  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2165  								},
  2166  							},
  2167  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2168  								{
  2169  									Type: "ResponseHeaderModifier",
  2170  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2171  										Add: []gatewayv1beta1.HTTPHeader{
  2172  											{
  2173  												Name:  "X-Header-Add",
  2174  												Value: "add-appends-values",
  2175  											},
  2176  										},
  2177  									},
  2178  								},
  2179  							},
  2180  						},
  2181  					},
  2182  				},
  2183  				{
  2184  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2185  						{
  2186  							Path: &gatewayv1beta1.HTTPPathMatch{
  2187  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2188  								Value: model.AddressOf("/remove"),
  2189  							},
  2190  						},
  2191  					},
  2192  
  2193  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2194  						{
  2195  							BackendRef: gatewayv1beta1.BackendRef{
  2196  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2197  									Name: "infra-backend-v1",
  2198  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2199  								},
  2200  							},
  2201  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2202  								{
  2203  									Type: "ResponseHeaderModifier",
  2204  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2205  										Remove: []string{
  2206  											"X-Header-Remove",
  2207  										},
  2208  									},
  2209  								},
  2210  							},
  2211  						},
  2212  					},
  2213  				},
  2214  				{
  2215  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2216  						{
  2217  							Path: &gatewayv1beta1.HTTPPathMatch{
  2218  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2219  								Value: model.AddressOf("/multiple"),
  2220  							},
  2221  						},
  2222  					},
  2223  
  2224  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2225  						{
  2226  							BackendRef: gatewayv1beta1.BackendRef{
  2227  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2228  									Name: "infra-backend-v1",
  2229  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2230  								},
  2231  							},
  2232  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2233  								{
  2234  									Type: "ResponseHeaderModifier",
  2235  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2236  										Set: []gatewayv1beta1.HTTPHeader{
  2237  											{
  2238  												Name:  "X-Header-Set-1",
  2239  												Value: "header-set-1",
  2240  											},
  2241  											{
  2242  												Name:  "X-Header-Set-2",
  2243  												Value: "header-set-2",
  2244  											},
  2245  										},
  2246  										Add: []gatewayv1beta1.HTTPHeader{
  2247  											{
  2248  												Name:  "X-Header-Add-1",
  2249  												Value: "header-add-1",
  2250  											},
  2251  											{
  2252  												Name:  "X-Header-Add-2",
  2253  												Value: "header-add-2",
  2254  											},
  2255  											{
  2256  												Name:  "X-Header-Add-3",
  2257  												Value: "header-add-3",
  2258  											},
  2259  										},
  2260  										Remove: []string{
  2261  											"X-Header-Remove-1",
  2262  											"X-Header-Remove-2",
  2263  										},
  2264  									},
  2265  								},
  2266  							},
  2267  						},
  2268  					},
  2269  				},
  2270  				{
  2271  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2272  						{
  2273  							Path: &gatewayv1beta1.HTTPPathMatch{
  2274  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2275  								Value: model.AddressOf("/multiple-backends"),
  2276  							},
  2277  						},
  2278  					},
  2279  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2280  						{
  2281  							BackendRef: gatewayv1beta1.BackendRef{
  2282  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2283  									Name: "infra-backend-v1",
  2284  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2285  								},
  2286  							},
  2287  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2288  								{
  2289  									Type: "ResponseHeaderModifier",
  2290  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2291  										Set: []gatewayv1beta1.HTTPHeader{
  2292  											{
  2293  												Name:  "X-Header-Set-1",
  2294  												Value: "header-set-1",
  2295  											},
  2296  										},
  2297  										Add: []gatewayv1beta1.HTTPHeader{
  2298  											{
  2299  												Name:  "X-Header-Add-1",
  2300  												Value: "header-add-1",
  2301  											},
  2302  										},
  2303  										Remove: []string{
  2304  											"X-Header-Remove-1",
  2305  										},
  2306  									},
  2307  								},
  2308  							},
  2309  						},
  2310  						{
  2311  							BackendRef: gatewayv1beta1.BackendRef{
  2312  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2313  									Name: "infra-backend-v2",
  2314  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2315  								},
  2316  							},
  2317  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2318  								{
  2319  									Type: "ResponseHeaderModifier",
  2320  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2321  										Set: []gatewayv1beta1.HTTPHeader{
  2322  											{
  2323  												Name:  "X-Header-Set-2",
  2324  												Value: "header-set-2",
  2325  											},
  2326  										},
  2327  										Add: []gatewayv1beta1.HTTPHeader{
  2328  											{
  2329  												Name:  "X-Header-Add-2",
  2330  												Value: "header-add-2",
  2331  											},
  2332  										},
  2333  										Remove: []string{
  2334  											"X-Header-Remove-2",
  2335  										},
  2336  									},
  2337  								},
  2338  							},
  2339  						},
  2340  						{
  2341  							BackendRef: gatewayv1beta1.BackendRef{
  2342  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2343  									Name: "infra-backend-v3",
  2344  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2345  								},
  2346  							},
  2347  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2348  								{
  2349  									Type: "ResponseHeaderModifier",
  2350  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2351  										Set: []gatewayv1beta1.HTTPHeader{
  2352  											{
  2353  												Name:  "X-Header-Set-3",
  2354  												Value: "header-set-3",
  2355  											},
  2356  										},
  2357  										Add: []gatewayv1beta1.HTTPHeader{
  2358  											{
  2359  												Name:  "X-Header-Add-3",
  2360  												Value: "header-add-3",
  2361  											},
  2362  										},
  2363  										Remove: []string{
  2364  											"X-Header-Remove-3",
  2365  										},
  2366  									},
  2367  								},
  2368  							},
  2369  						},
  2370  					},
  2371  				},
  2372  				{
  2373  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2374  						{
  2375  							Path: &gatewayv1beta1.HTTPPathMatch{
  2376  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2377  								Value: model.AddressOf("/case-insensitivity"),
  2378  							},
  2379  						},
  2380  					},
  2381  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2382  						{
  2383  							BackendRef: gatewayv1beta1.BackendRef{
  2384  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2385  									Name: "infra-backend-v1",
  2386  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2387  								},
  2388  							},
  2389  							Filters: []gatewayv1beta1.HTTPRouteFilter{
  2390  								{
  2391  									Type: "ResponseHeaderModifier",
  2392  									ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2393  										Set: []gatewayv1beta1.HTTPHeader{
  2394  											{
  2395  												Name:  "X-Header-Set",
  2396  												Value: "header-set",
  2397  											},
  2398  										},
  2399  										Add: []gatewayv1beta1.HTTPHeader{
  2400  											{
  2401  												Name:  "X-Header-Add",
  2402  												Value: "header-add",
  2403  											},
  2404  											{
  2405  												Name:  "x-lowercase-add",
  2406  												Value: "lowercase-add",
  2407  											},
  2408  											{
  2409  												Name:  "x-Mixedcase-ADD-1",
  2410  												Value: "mixedcase-add-1",
  2411  											},
  2412  											{
  2413  												Name:  "X-mixeDcase-add-2",
  2414  												Value: "mixedcase-add-2",
  2415  											},
  2416  											{
  2417  												Name:  "X-UPPERCASE-ADD",
  2418  												Value: "uppercase-add",
  2419  											},
  2420  										},
  2421  										Remove: []string{
  2422  											"X-Header-Remove",
  2423  										},
  2424  									},
  2425  								},
  2426  							},
  2427  						},
  2428  					},
  2429  				},
  2430  			},
  2431  		},
  2432  	},
  2433  }
  2434  
  2435  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-rewrite-host.yaml
  2436  var rewriteHostHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  2437  	{
  2438  		ObjectMeta: metav1.ObjectMeta{
  2439  			Name:      "rewrite-host",
  2440  			Namespace: "gateway-conformance-infra",
  2441  		},
  2442  		Spec: gatewayv1beta1.HTTPRouteSpec{
  2443  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  2444  				ParentRefs: []gatewayv1beta1.ParentReference{
  2445  					{
  2446  						Name: "same-namespace",
  2447  					},
  2448  				},
  2449  			},
  2450  			Hostnames: []gatewayv1beta1.Hostname{
  2451  				"rewrite.example",
  2452  			},
  2453  			Rules: []gatewayv1beta1.HTTPRouteRule{
  2454  				{
  2455  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2456  						{
  2457  							Path: &gatewayv1beta1.HTTPPathMatch{
  2458  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2459  								Value: model.AddressOf("/one"),
  2460  							},
  2461  						},
  2462  					},
  2463  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2464  						{
  2465  							Type: "URLRewrite",
  2466  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2467  								Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("one.example.org"),
  2468  							},
  2469  						},
  2470  					},
  2471  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2472  						{
  2473  							BackendRef: gatewayv1beta1.BackendRef{
  2474  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2475  									Name: "infra-backend-v1",
  2476  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2477  								},
  2478  							},
  2479  						},
  2480  					},
  2481  				},
  2482  				{
  2483  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2484  						{
  2485  							Type: "URLRewrite",
  2486  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2487  								Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("example.org"),
  2488  							},
  2489  						},
  2490  					},
  2491  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2492  						{
  2493  							BackendRef: gatewayv1beta1.BackendRef{
  2494  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2495  									Name: "infra-backend-v2",
  2496  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2497  								},
  2498  							},
  2499  						},
  2500  					},
  2501  				},
  2502  			},
  2503  		},
  2504  	},
  2505  }
  2506  
  2507  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-rewrite-path.yaml
  2508  var rewritePathHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  2509  	{
  2510  		ObjectMeta: metav1.ObjectMeta{
  2511  			Name:      "rewrite-path",
  2512  			Namespace: "gateway-conformance-infra",
  2513  		},
  2514  		Spec: gatewayv1beta1.HTTPRouteSpec{
  2515  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  2516  				ParentRefs: []gatewayv1beta1.ParentReference{
  2517  					{
  2518  						Name: "same-namespace",
  2519  					},
  2520  				},
  2521  			},
  2522  			Rules: []gatewayv1beta1.HTTPRouteRule{
  2523  				{
  2524  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2525  						{
  2526  							Path: &gatewayv1beta1.HTTPPathMatch{
  2527  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2528  								Value: model.AddressOf("/prefix/one"),
  2529  							},
  2530  						},
  2531  					},
  2532  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2533  						{
  2534  							Type: "URLRewrite",
  2535  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2536  								Path: &gatewayv1beta1.HTTPPathModifier{
  2537  									Type:               "ReplacePrefixMatch",
  2538  									ReplacePrefixMatch: model.AddressOf("/one"),
  2539  								},
  2540  							},
  2541  						},
  2542  					},
  2543  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2544  						{
  2545  							BackendRef: gatewayv1beta1.BackendRef{
  2546  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2547  									Name: "infra-backend-v1",
  2548  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2549  								},
  2550  							},
  2551  						},
  2552  					},
  2553  				},
  2554  				{
  2555  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2556  						{
  2557  							Path: &gatewayv1beta1.HTTPPathMatch{
  2558  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2559  								Value: model.AddressOf("/full/one"),
  2560  							},
  2561  						},
  2562  					},
  2563  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2564  						{
  2565  							Type: "URLRewrite",
  2566  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2567  								Path: &gatewayv1beta1.HTTPPathModifier{
  2568  									Type:            "ReplaceFullPath",
  2569  									ReplaceFullPath: model.AddressOf("/one"),
  2570  								},
  2571  							},
  2572  						},
  2573  					},
  2574  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2575  						{
  2576  							BackendRef: gatewayv1beta1.BackendRef{
  2577  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2578  									Name: "infra-backend-v1",
  2579  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2580  								},
  2581  							},
  2582  						},
  2583  					},
  2584  				},
  2585  				{
  2586  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2587  						{
  2588  							Path: &gatewayv1beta1.HTTPPathMatch{
  2589  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2590  								Value: model.AddressOf("/full/rewrite-path-and-modify-headers"),
  2591  							},
  2592  						},
  2593  					},
  2594  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2595  						{
  2596  							Type: "URLRewrite",
  2597  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2598  								Path: &gatewayv1beta1.HTTPPathModifier{
  2599  									Type:            "ReplaceFullPath",
  2600  									ReplaceFullPath: model.AddressOf("/test"),
  2601  								},
  2602  							},
  2603  						},
  2604  						{
  2605  							Type: "RequestHeaderModifier",
  2606  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2607  								Set: []gatewayv1beta1.HTTPHeader{
  2608  									{
  2609  										Name:  "X-Header-Set",
  2610  										Value: "set-overwrites-values",
  2611  									},
  2612  								},
  2613  								Add: []gatewayv1beta1.HTTPHeader{
  2614  									{
  2615  										Name:  "X-Header-Add",
  2616  										Value: "header-val-1",
  2617  									},
  2618  									{
  2619  										Name:  "X-Header-Add-Append",
  2620  										Value: "header-val-2",
  2621  									},
  2622  								},
  2623  								Remove: []string{"X-Header-Remove"},
  2624  							},
  2625  						},
  2626  					},
  2627  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2628  						{
  2629  							BackendRef: gatewayv1beta1.BackendRef{
  2630  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2631  									Name: "infra-backend-v1",
  2632  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2633  								},
  2634  							},
  2635  						},
  2636  					},
  2637  				},
  2638  				{
  2639  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2640  						{
  2641  							Path: &gatewayv1beta1.HTTPPathMatch{
  2642  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2643  								Value: model.AddressOf("/prefix/rewrite-path-and-modify-headers"),
  2644  							},
  2645  						},
  2646  					},
  2647  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2648  						{
  2649  							Type: "URLRewrite",
  2650  							URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{
  2651  								Path: &gatewayv1beta1.HTTPPathModifier{
  2652  									Type:               "ReplacePrefixMatch",
  2653  									ReplacePrefixMatch: model.AddressOf("/prefix"),
  2654  								},
  2655  							},
  2656  						},
  2657  						{
  2658  							Type: "RequestHeaderModifier",
  2659  							RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{
  2660  								Set: []gatewayv1beta1.HTTPHeader{
  2661  									{
  2662  										Name:  "X-Header-Set",
  2663  										Value: "set-overwrites-values",
  2664  									},
  2665  								},
  2666  								Add: []gatewayv1beta1.HTTPHeader{
  2667  									{
  2668  										Name:  "X-Header-Add",
  2669  										Value: "header-val-1",
  2670  									},
  2671  									{
  2672  										Name:  "X-Header-Add-Append",
  2673  										Value: "header-val-2",
  2674  									},
  2675  								},
  2676  								Remove: []string{"X-Header-Remove"},
  2677  							},
  2678  						},
  2679  					},
  2680  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2681  						{
  2682  							BackendRef: gatewayv1beta1.BackendRef{
  2683  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2684  									Name: "infra-backend-v1",
  2685  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2686  								},
  2687  							},
  2688  						},
  2689  					},
  2690  				},
  2691  			},
  2692  		},
  2693  	},
  2694  }
  2695  
  2696  // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-request-mirror.yaml
  2697  var mirrorPathHTTPRoutes = []gatewayv1beta1.HTTPRoute{
  2698  	{
  2699  		ObjectMeta: metav1.ObjectMeta{
  2700  			Name:      "request-mirror",
  2701  			Namespace: "gateway-conformance-infra",
  2702  		},
  2703  		Spec: gatewayv1beta1.HTTPRouteSpec{
  2704  			CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{
  2705  				ParentRefs: []gatewayv1beta1.ParentReference{
  2706  					{
  2707  						Name: "same-namespace",
  2708  					},
  2709  				},
  2710  			},
  2711  			Rules: []gatewayv1beta1.HTTPRouteRule{
  2712  				{
  2713  					Matches: []gatewayv1beta1.HTTPRouteMatch{
  2714  						{
  2715  							Path: &gatewayv1beta1.HTTPPathMatch{
  2716  								Type:  model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix),
  2717  								Value: model.AddressOf("/mirror"),
  2718  							},
  2719  						},
  2720  					},
  2721  					Filters: []gatewayv1beta1.HTTPRouteFilter{
  2722  						{
  2723  							Type: "RequestMirror",
  2724  							RequestMirror: &gatewayv1beta1.HTTPRequestMirrorFilter{
  2725  								BackendRef: gatewayv1beta1.BackendObjectReference{
  2726  									Name:      "infra-backend-v2",
  2727  									Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"),
  2728  									Port:      model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2729  								},
  2730  							},
  2731  						},
  2732  					},
  2733  					BackendRefs: []gatewayv1beta1.HTTPBackendRef{
  2734  						{
  2735  							BackendRef: gatewayv1beta1.BackendRef{
  2736  								BackendObjectReference: gatewayv1beta1.BackendObjectReference{
  2737  									Name: "infra-backend-v1",
  2738  									Port: model.AddressOf[gatewayv1beta1.PortNumber](8080),
  2739  								},
  2740  							},
  2741  						},
  2742  					},
  2743  				},
  2744  			},
  2745  		},
  2746  	},
  2747  }