Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion controller/hybridgateway/converter/http_route.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ func (c *httpRouteConverter) UpdateRootObjectStatus(ctx context.Context, logger

// First, build the resolvedRefs conditons for the HTTPRoute since it is the same for all ParentRefs.
log.Debug(logger, "Building ResolvedRefs condition for HTTPRoute")
resolvedRefsCond, err := route.BuildResolvedRefsCondition(ctx, logger, c.Client, c.route)
resolvedRefsCond, err := route.BuildResolvedRefsConditionForHTTPRoute(ctx, logger, c.Client, c.route)
if err != nil {
return false, stop, fmt.Errorf("failed to build resolvedRefs condition for HTTPRoute %s: %w", c.route.Name, err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1362,6 +1362,10 @@ func newHTTPRouteWithRules(hostnames []string, rules []gwtypes.HTTPRouteRule) *g
}

return &gwtypes.HTTPRoute{
TypeMeta: metav1.TypeMeta{
Kind: "HTTPRoute",
APIVersion: "gateway.networking.k8s.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: "test-route",
Namespace: "default",
Expand Down
278 changes: 175 additions & 103 deletions controller/hybridgateway/route/status.go

Large diffs are not rendered by default.

33 changes: 26 additions & 7 deletions controller/hybridgateway/route/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1618,7 +1618,7 @@ func TestIsBackendRefSupported(t *testing.T) {
}
}

func TestIsHTTPReferenceGranted(t *testing.T) {
func TestIsRouteReferenceGranted(t *testing.T) {
tests := []struct {
name string
grantSpec gwtypes.ReferenceGrantSpec
Expand Down Expand Up @@ -1838,9 +1838,9 @@ func TestIsHTTPReferenceGranted(t *testing.T) {

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := IsHTTPReferenceGranted(tt.grantSpec, tt.backendRef, tt.fromNamespace)
got := IsRouteReferenceGranted(tt.grantSpec, tt.backendRef.BackendRef, "HTTPRoute", tt.fromNamespace)
if got != tt.want {
t.Errorf("IsHTTPReferenceGranted() = %v, want %v", got, tt.want)
t.Errorf("IsRouteReferenceGranted() = %v, want %v", got, tt.want)
}
})
}
Expand Down Expand Up @@ -1874,8 +1874,14 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
PluginName: "rate-limiting",
}

httpRouteTypeMeta := metav1.TypeMeta{
Kind: "HTTPRoute",
APIVersion: "gateway.networking.k8s.io/v1",
}

// Create base route
routeBase := &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -1995,6 +2001,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
},
},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "route"},
Spec: gwtypes.HTTPRouteSpec{
Rules: []gwtypes.HTTPRouteRule{{
Expand Down Expand Up @@ -2039,6 +2046,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
},
},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "route"},
Spec: gwtypes.HTTPRouteSpec{
Rules: []gwtypes.HTTPRouteRule{{
Expand All @@ -2063,6 +2071,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "multiple refs, first fails",
clientObjs: []client.Object{serviceDefault},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "route"},
Spec: gwtypes.HTTPRouteSpec{
Rules: []gwtypes.HTTPRouteRule{{
Expand Down Expand Up @@ -2097,6 +2106,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "empty group uses implicit core",
clientObjs: []client.Object{serviceDefault},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "route"},
Spec: gwtypes.HTTPRouteSpec{
Rules: []gwtypes.HTTPRouteRule{{
Expand All @@ -2121,6 +2131,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "ExtensionRef resolved - KongPlugin exists",
clientObjs: []client.Object{kongPlugin},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand All @@ -2146,6 +2157,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "ExtensionRef unsupported group/kind",
clientObjs: []client.Object{},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand All @@ -2171,6 +2183,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "ExtensionRef not found",
clientObjs: []client.Object{},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand All @@ -2196,6 +2209,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "ExtensionRef nil but type is ExtensionRef - skips validation",
clientObjs: []client.Object{},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand All @@ -2217,6 +2231,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "Multiple filters with ExtensionRef - first fails",
clientObjs: []client.Object{kongPlugin},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -2252,6 +2267,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "Mixed BackendRef and ExtensionRef - BackendRef fails",
clientObjs: []client.Object{kongPlugin},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -2293,6 +2309,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
},
},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -2335,6 +2352,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
kongPlugin,
},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -2369,6 +2387,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
name: "Non-ExtensionRef filter - should be ignored",
clientObjs: []client.Object{},
route: &gwtypes.HTTPRoute{
TypeMeta: httpRouteTypeMeta,
ObjectMeta: metav1.ObjectMeta{
Namespace: "default",
Name: "route",
Expand Down Expand Up @@ -2502,7 +2521,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {

cl := clientBuilder.Build()

cond, err := BuildResolvedRefsCondition(ctx, logger, cl, tt.route)
cond, err := BuildResolvedRefsConditionForHTTPRoute(ctx, logger, cl, tt.route)
require.NoError(t, err)
require.NotNil(t, cond)

Expand Down Expand Up @@ -2532,7 +2551,7 @@ func TestBuildResolvedRefsCondition(t *testing.T) {
WithInterceptorFuncs(tt.interceptor).
Build()

cond, err := BuildResolvedRefsCondition(ctx, logger, cl, tt.route)
cond, err := BuildResolvedRefsConditionForHTTPRoute(ctx, logger, cl, tt.route)
if tt.wantError {
require.Error(t, err)
require.Nil(t, cond)
Expand Down Expand Up @@ -2866,7 +2885,7 @@ func TestCheckReferenceGrant(t *testing.T) {

cl := fake.NewClientBuilder().WithScheme(s).WithObjects(tt.clientObjs...).Build()

permitted, found, err := CheckReferenceGrant(ctx, cl, tt.bRef, tt.routeNamespace)
permitted, found, err := CheckReferenceGrant(ctx, cl, &tt.bRef.BackendRef, "HTTPRoute", tt.routeNamespace)

if tt.wantError {
require.Error(t, err)
Expand Down Expand Up @@ -2900,7 +2919,7 @@ func TestCheckReferenceGrant(t *testing.T) {
}).
Build()

permitted, found, err := CheckReferenceGrant(ctx, cl, tt.bRef, tt.routeNamespace)
permitted, found, err := CheckReferenceGrant(ctx, cl, &tt.bRef.BackendRef, "HTTPRoute", tt.routeNamespace)

if tt.wantError {
require.Error(t, err)
Expand Down
2 changes: 1 addition & 1 deletion controller/hybridgateway/target/target.go
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ func filterValidBackendRefs(

// Check ReferenceGrant permission for cross-namespace access.
if bRefNamespace != httpRoute.Namespace {
permitted, found, err := route.CheckReferenceGrant(ctx, cl, &bRef, httpRoute.Namespace)
permitted, found, err := route.CheckReferenceGrant(ctx, cl, &bRef.BackendRef, httpRoute.GetObjectKind().GroupVersionKind().Kind, httpRoute.Namespace)
if err != nil {
return nil, fmt.Errorf("error checking ReferenceGrant for BackendRef %s: %w", bRef.Name, err)
}
Expand Down
4 changes: 4 additions & 0 deletions controller/hybridgateway/target/target_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ func createTestServicePort() *corev1.ServicePort {
// Global helper to create HTTPRoute with optional BackendRefs.
func createGlobalTestHTTPRoute(name, namespace string, backendRefs ...[]gwtypes.HTTPBackendRef) *gwtypes.HTTPRoute {
route := &gwtypes.HTTPRoute{
TypeMeta: metav1.TypeMeta{
Kind: "HTTPRoute",
APIVersion: "gateway.networking.k8s.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
Expand Down
Loading
Loading