From a263de6e7d420267ff0c82ef02be5be50fce7073 Mon Sep 17 00:00:00 2001 From: salaboy Date: Tue, 28 Sep 2021 09:41:55 +0100 Subject: [PATCH 1/7] updating validation tests to follow the spec --- .../messaging/v1/subscription_validation.go | 9 ++- .../v1/subscription_validation_test.go | 78 ++++++++----------- 2 files changed, 37 insertions(+), 50 deletions(-) diff --git a/pkg/apis/messaging/v1/subscription_validation.go b/pkg/apis/messaging/v1/subscription_validation.go index 93bcdf8c0ea..1520aa4acfb 100644 --- a/pkg/apis/messaging/v1/subscription_validation.go +++ b/pkg/apis/messaging/v1/subscription_validation.go @@ -49,10 +49,10 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { } missingSubscriber := isDestinationNilOrEmpty(ss.Subscriber) - missingReply := isDestinationNilOrEmpty(ss.Reply) - if missingSubscriber && missingReply { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + + if missingSubscriber { + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" errs = errs.Also(fe) } @@ -62,6 +62,7 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { } } + missingReply := isDestinationNilOrEmpty(ss.Reply) if !missingReply { if fe := ss.Reply.Validate(ctx); fe != nil { errs = errs.Also(fe.ViaField("reply")) diff --git a/pkg/apis/messaging/v1/subscription_validation_test.go b/pkg/apis/messaging/v1/subscription_validation_test.go index e2871f71a93..9a83d3d3e55 100644 --- a/pkg/apis/messaging/v1/subscription_validation_test.go +++ b/pkg/apis/messaging/v1/subscription_validation_test.go @@ -137,8 +137,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" return fe }(), }, { @@ -149,8 +149,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" return fe }(), }, { @@ -174,7 +174,11 @@ func TestSubscriptionSpecValidation(t *testing.T) { Channel: getValidChannelRef(), Reply: getValidReply(), }, - want: nil, + want: func() *apis.FieldError { + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), }, { name: "empty Subscriber", c: &SubscriptionSpec{ @@ -182,7 +186,11 @@ func TestSubscriptionSpecValidation(t *testing.T) { Subscriber: &duckv1.Destination{}, Reply: getValidReply(), }, - want: nil, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), }, { name: "missing name in channel, and missing subscriber, reply", c: &SubscriptionSpec{ @@ -192,8 +200,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { }, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" return apis.ErrMissingField("channel.name").Also(fe) }(), }, { @@ -293,8 +301,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" return fe }(), }, { @@ -305,8 +313,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField( "subscriber") + fe.Details = "the Subscription must reference a subscriber" return fe }(), }, { @@ -330,7 +338,11 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Channel: getValidChannelRef(), Reply: getValidReply(), }, - want: nil, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), }, { name: "empty Subscriber", c: &SubscriptionSpec{ @@ -338,7 +350,11 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Subscriber: &duckv1.Destination{}, Reply: getValidReply(), }, - want: nil, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), }, { name: "missing name in channel, and missing subscriber, reply", c: &SubscriptionSpec{ @@ -348,8 +364,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { }, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("reply", "subscriber") - fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" return apis.ErrMissingField("channel.name").Also(fe) }(), }, { @@ -458,36 +474,6 @@ func TestSubscriptionImmutable(t *testing.T) { }, }, want: nil, - }, { - name: "valid, new Reply", - c: &Subscription{ - Spec: SubscriptionSpec{ - Channel: getValidChannelRef(), - Reply: getValidReply(), - }, - }, - og: &Subscription{ - Spec: SubscriptionSpec{ - Channel: getValidChannelRef(), - Reply: newReply, - }, - }, - want: nil, - }, { - name: "valid, have Reply, remove and replace with Subscriber", - c: &Subscription{ - Spec: SubscriptionSpec{ - Channel: getValidChannelRef(), - Reply: getValidReply(), - }, - }, - og: &Subscription{ - Spec: SubscriptionSpec{ - Channel: getValidChannelRef(), - Subscriber: getValidDestination(), - }, - }, - want: nil, }, { name: "valid, have Subscriber, remove and replace with Reply", c: &Subscription{ From 89220cba294c5458cabbba1050f4ca80b37aaf8d Mon Sep 17 00:00:00 2001 From: salaboy Date: Tue, 28 Sep 2021 09:55:17 +0100 Subject: [PATCH 2/7] goimports --- pkg/apis/messaging/v1/subscription_validation.go | 2 +- .../messaging/v1/subscription_validation_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/apis/messaging/v1/subscription_validation.go b/pkg/apis/messaging/v1/subscription_validation.go index 1520aa4acfb..8f02108c50b 100644 --- a/pkg/apis/messaging/v1/subscription_validation.go +++ b/pkg/apis/messaging/v1/subscription_validation.go @@ -51,7 +51,7 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { missingSubscriber := isDestinationNilOrEmpty(ss.Subscriber) if missingSubscriber { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" errs = errs.Also(fe) } diff --git a/pkg/apis/messaging/v1/subscription_validation_test.go b/pkg/apis/messaging/v1/subscription_validation_test.go index 9a83d3d3e55..0172fc649b0 100644 --- a/pkg/apis/messaging/v1/subscription_validation_test.go +++ b/pkg/apis/messaging/v1/subscription_validation_test.go @@ -137,7 +137,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return fe }(), @@ -149,7 +149,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return fe }(), @@ -175,7 +175,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { Reply: getValidReply(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return fe }(), @@ -200,7 +200,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { }, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return apis.ErrMissingField("channel.name").Also(fe) }(), @@ -301,7 +301,7 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return fe }(), @@ -313,7 +313,7 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField( "subscriber") + fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" return fe }(), From 677ed637847385de2d6a9f71374838e807e2bdae Mon Sep 17 00:00:00 2001 From: salaboy Date: Wed, 29 Sep 2021 09:05:28 +0100 Subject: [PATCH 3/7] collapsing if statement --- pkg/apis/messaging/v1/subscription_validation.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/apis/messaging/v1/subscription_validation.go b/pkg/apis/messaging/v1/subscription_validation.go index 8f02108c50b..072842f55d4 100644 --- a/pkg/apis/messaging/v1/subscription_validation.go +++ b/pkg/apis/messaging/v1/subscription_validation.go @@ -62,8 +62,7 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { } } - missingReply := isDestinationNilOrEmpty(ss.Reply) - if !missingReply { + if missingReply := isDestinationNilOrEmpty(ss.Reply); !missingReply { if fe := ss.Reply.Validate(ctx); fe != nil { errs = errs.Also(fe.ViaField("reply")) } From 6cfb92a93c96bc6e40b1e9866edbb14059cc0026 Mon Sep 17 00:00:00 2001 From: salaboy Date: Thu, 30 Sep 2021 12:00:02 +0100 Subject: [PATCH 4/7] adding strict-subscriber flag --- pkg/apis/feature/flag_names.go | 1 + .../messaging/v1/subscription_validation.go | 16 +- .../v1/subscription_validation_test.go | 155 ++++++++++++++---- test/experimental/config/features.yaml | 1 + 4 files changed, 139 insertions(+), 34 deletions(-) diff --git a/pkg/apis/feature/flag_names.go b/pkg/apis/feature/flag_names.go index 1595c8c049d..1559d64f9d4 100644 --- a/pkg/apis/feature/flag_names.go +++ b/pkg/apis/feature/flag_names.go @@ -20,4 +20,5 @@ const ( KReferenceGroup = "kreference-group" DeliveryTimeout = "delivery-timeout" KReferenceMapping = "kreference-mapping" + StrictSubscriber = "strict-subscriber" ) diff --git a/pkg/apis/messaging/v1/subscription_validation.go b/pkg/apis/messaging/v1/subscription_validation.go index 072842f55d4..793a86bad92 100644 --- a/pkg/apis/messaging/v1/subscription_validation.go +++ b/pkg/apis/messaging/v1/subscription_validation.go @@ -19,6 +19,8 @@ package v1 import ( "context" + "knative.dev/eventing/pkg/apis/feature" + "github.com/google/go-cmp/cmp/cmpopts" "k8s.io/apimachinery/pkg/api/equality" "knative.dev/pkg/apis" @@ -49,11 +51,21 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { } missingSubscriber := isDestinationNilOrEmpty(ss.Subscriber) + missingReply := isDestinationNilOrEmpty(ss.Reply) - if missingSubscriber { + // Check if StrictSubscriber flag is enabled, if so we follow the spec and check for a valid reference to a subscriber + if missingSubscriber && feature.FromContext(ctx).IsEnabled(feature.StrictSubscriber) { fe := apis.ErrMissingField("subscriber") fe.Details = "the Subscription must reference a subscriber" errs = errs.Also(fe) + + } else { // if the flag is not set, we use pre 0.26 behavior + if missingSubscriber && missingReply { + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" + errs = errs.Also(fe) + } + } if !missingSubscriber { @@ -62,7 +74,7 @@ func (ss *SubscriptionSpec) Validate(ctx context.Context) *apis.FieldError { } } - if missingReply := isDestinationNilOrEmpty(ss.Reply); !missingReply { + if !missingReply { if fe := ss.Reply.Validate(ctx); fe != nil { errs = errs.Also(fe.ViaField("reply")) } diff --git a/pkg/apis/messaging/v1/subscription_validation_test.go b/pkg/apis/messaging/v1/subscription_validation_test.go index 0172fc649b0..c75ceb15494 100644 --- a/pkg/apis/messaging/v1/subscription_validation_test.go +++ b/pkg/apis/messaging/v1/subscription_validation_test.go @@ -137,8 +137,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return fe }(), }, { @@ -149,8 +149,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return fe }(), }, { @@ -174,11 +174,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { Channel: getValidChannelRef(), Reply: getValidReply(), }, - want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" - return fe - }(), + want: nil, }, { name: "empty Subscriber", c: &SubscriptionSpec{ @@ -186,11 +182,7 @@ func TestSubscriptionSpecValidation(t *testing.T) { Subscriber: &duckv1.Destination{}, Reply: getValidReply(), }, - want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" - return fe - }(), + want: nil, }, { name: "missing name in channel, and missing subscriber, reply", c: &SubscriptionSpec{ @@ -200,8 +192,8 @@ func TestSubscriptionSpecValidation(t *testing.T) { }, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return apis.ErrMissingField("channel.name").Also(fe) }(), }, { @@ -301,8 +293,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Channel: getValidChannelRef(), }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return fe }(), }, { @@ -313,8 +305,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Reply: &duckv1.Destination{}, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return fe }(), }, { @@ -338,11 +330,7 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Channel: getValidChannelRef(), Reply: getValidReply(), }, - want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" - return fe - }(), + want: nil, }, { name: "empty Subscriber", c: &SubscriptionSpec{ @@ -350,11 +338,7 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { Subscriber: &duckv1.Destination{}, Reply: getValidReply(), }, - want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" - return fe - }(), + want: nil, }, { name: "missing name in channel, and missing subscriber, reply", c: &SubscriptionSpec{ @@ -364,8 +348,8 @@ func TestSubscriptionSpecValidationWithKRefGroupFeatureEnabled(t *testing.T) { }, }, want: func() *apis.FieldError { - fe := apis.ErrMissingField("subscriber") - fe.Details = "the Subscription must reference a subscriber" + fe := apis.ErrMissingField("reply", "subscriber") + fe.Details = "the Subscription must reference at least one of (reply or a subscriber)" return apis.ErrMissingField("channel.name").Also(fe) }(), }, { @@ -474,6 +458,36 @@ func TestSubscriptionImmutable(t *testing.T) { }, }, want: nil, + }, { + name: "valid, new Reply", + c: &Subscription{ + Spec: SubscriptionSpec{ + Channel: getValidChannelRef(), + Reply: getValidReply(), + }, + }, + og: &Subscription{ + Spec: SubscriptionSpec{ + Channel: getValidChannelRef(), + Reply: newReply, + }, + }, + want: nil, + }, { + name: "valid, have Reply, remove and replace with Subscriber", + c: &Subscription{ + Spec: SubscriptionSpec{ + Channel: getValidChannelRef(), + Reply: getValidReply(), + }, + }, + og: &Subscription{ + Spec: SubscriptionSpec{ + Channel: getValidChannelRef(), + Subscriber: getValidDestination(), + }, + }, + want: nil, }, { name: "valid, have Subscriber, remove and replace with Reply", c: &Subscription{ @@ -591,3 +605,80 @@ func TestValidChannel(t *testing.T) { }) } } + +func TestSubscriptionSpecValidationWithStrictSubscriber(t *testing.T) { + tests := []struct { + name string + c *SubscriptionSpec + want *apis.FieldError + }{{ + name: "missing Subscriber and Reply", + c: &SubscriptionSpec{ + Channel: getValidChannelRef(), + }, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), + }, { + name: "empty Subscriber and Reply", + c: &SubscriptionSpec{ + Channel: getValidChannelRef(), + Subscriber: &duckv1.Destination{}, + Reply: &duckv1.Destination{}, + }, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), + }, { + name: "missing Subscriber", + c: &SubscriptionSpec{ + Channel: getValidChannelRef(), + Reply: getValidReply(), + }, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), + }, { + name: "empty Subscriber", + c: &SubscriptionSpec{ + Channel: getValidChannelRef(), + Subscriber: &duckv1.Destination{}, + Reply: getValidReply(), + }, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return fe + }(), + }, { + name: "missing name in channel, and missing subscriber, reply", + c: &SubscriptionSpec{ + Channel: duckv1.KReference{ + Kind: channelKind, + APIVersion: channelAPIVersion, + }, + }, + want: func() *apis.FieldError { + fe := apis.ErrMissingField("subscriber") + fe.Details = "the Subscription must reference a subscriber" + return apis.ErrMissingField("channel.name").Also(fe) + }(), + }} + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + ctx := feature.ToContext(context.TODO(), feature.Flags{ + feature.StrictSubscriber: feature.Enabled, + }) + got := test.c.Validate(ctx) + if diff := cmp.Diff(test.want.Error(), got.Error()); diff != "" { + t.Errorf("%s: strictSubscriber (-want, +got) = %v", test.name, diff) + } + }) + } +} diff --git a/test/experimental/config/features.yaml b/test/experimental/config/features.yaml index d8b990c8cd7..76b436b94c6 100644 --- a/test/experimental/config/features.yaml +++ b/test/experimental/config/features.yaml @@ -24,3 +24,4 @@ metadata: data: kreference-group: "enabled" delivery-timeout: "enabled" + strict-subscriber: "disabled" From 160df20de7e00224b98100371d6aa631871584de Mon Sep 17 00:00:00 2001 From: salaboy Date: Thu, 30 Sep 2021 16:54:21 +0100 Subject: [PATCH 5/7] adding new feature flag to configmap --- config/core/configmaps/features.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/core/configmaps/features.yaml b/config/core/configmaps/features.yaml index cceaf3d16a4..984efe0274b 100644 --- a/config/core/configmaps/features.yaml +++ b/config/core/configmaps/features.yaml @@ -35,3 +35,7 @@ data: # ALPHA feature: The kreference-mapping allows you to map kreference onto templated URI # For more details: https://github.com/knative/eventing/issues/5593 kreference-mapping: "disabled" + + # ALPHA feature: The subscriber-strict flag force subscriptions to define a subscriber + # For more details: https://github.com/knative/eventing/issues/5756 + strict-subscriber: "disabled" \ No newline at end of file From 38c2f6545064bafb053832ee98aca14c6968225c Mon Sep 17 00:00:00 2001 From: salaboy Date: Wed, 13 Oct 2021 16:12:48 +0100 Subject: [PATCH 6/7] EOF newline --- config/core/configmaps/features.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/core/configmaps/features.yaml b/config/core/configmaps/features.yaml index 984efe0274b..ecd5d39b010 100644 --- a/config/core/configmaps/features.yaml +++ b/config/core/configmaps/features.yaml @@ -38,4 +38,5 @@ data: # ALPHA feature: The subscriber-strict flag force subscriptions to define a subscriber # For more details: https://github.com/knative/eventing/issues/5756 - strict-subscriber: "disabled" \ No newline at end of file + strict-subscriber: "disabled" + \ No newline at end of file From 8f4edda20b46e49503297b3887aa68df1fba273c Mon Sep 17 00:00:00 2001 From: salaboy Date: Wed, 13 Oct 2021 16:21:17 +0100 Subject: [PATCH 7/7] another whitespace --- config/core/configmaps/features.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/core/configmaps/features.yaml b/config/core/configmaps/features.yaml index ecd5d39b010..e0159504a96 100644 --- a/config/core/configmaps/features.yaml +++ b/config/core/configmaps/features.yaml @@ -39,4 +39,3 @@ data: # ALPHA feature: The subscriber-strict flag force subscriptions to define a subscriber # For more details: https://github.com/knative/eventing/issues/5756 strict-subscriber: "disabled" - \ No newline at end of file