From 547292cd1b5fb5ec29f4bc5b153aac7d00472c6c Mon Sep 17 00:00:00 2001 From: Ali Ok Date: Fri, 3 Jul 2020 12:54:14 +0300 Subject: [PATCH 1/4] Make SubscribableSpec implement apis.Convertible --- pkg/apis/duck/v1/subscribable_types.go | 1 + .../duck/v1/subscribable_types_conversion.go | 10 +++++ pkg/apis/duck/v1alpha1/subscribable_types.go | 1 + .../v1alpha1/subscribable_types_conversion.go | 39 ++++++++++++------- pkg/apis/duck/v1beta1/subscribable_types.go | 1 + .../v1beta1/subscribable_types_conversion.go | 34 ++++++++++------ .../messaging/v1beta1/channel_conversion.go | 2 +- .../v1beta1/in_memory_channel_conversion.go | 2 +- 8 files changed, 62 insertions(+), 28 deletions(-) diff --git a/pkg/apis/duck/v1/subscribable_types.go b/pkg/apis/duck/v1/subscribable_types.go index 2cd6fec08c5..b91067883d9 100644 --- a/pkg/apis/duck/v1/subscribable_types.go +++ b/pkg/apis/duck/v1/subscribable_types.go @@ -107,6 +107,7 @@ var ( _ apis.Listable = (*Subscribable)(nil) _ apis.Convertible = (*Subscribable)(nil) + _ apis.Convertible = (*SubscribableSpec)(nil) _ apis.Convertible = (*SubscribableStatus)(nil) ) diff --git a/pkg/apis/duck/v1/subscribable_types_conversion.go b/pkg/apis/duck/v1/subscribable_types_conversion.go index f27a608b840..92ba047d271 100644 --- a/pkg/apis/duck/v1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1/subscribable_types_conversion.go @@ -33,6 +33,16 @@ func (sink *Subscribable) ConvertFrom(ctx context.Context, source apis.Convertib return fmt.Errorf("v1 is the highest known version, got: %T", source) } +// ConvertTo implements apis.Convertible +func (source *SubscribableSpec) ConvertTo(ctx context.Context, sink apis.Convertible) error { + return fmt.Errorf("v1 is the highest known version, got: %T", sink) +} + +// ConvertFrom implements apis.Convertible +func (sink *SubscribableSpec) ConvertFrom(ctx context.Context, source apis.Convertible) error { + return fmt.Errorf("v1 is the highest known version, got: %T", source) +} + // ConvertTo implements apis.Convertible func (source *SubscribableStatus) ConvertTo(ctx context.Context, sink apis.Convertible) error { return fmt.Errorf("v1 is the highest known version, got: %T", sink) diff --git a/pkg/apis/duck/v1alpha1/subscribable_types.go b/pkg/apis/duck/v1alpha1/subscribable_types.go index 253ad004ced..8bfb7ee69f6 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types.go @@ -108,6 +108,7 @@ var ( _ apis.Convertible = (*SubscribableType)(nil) + _ apis.Convertible = (*SubscribableTypeSpec)(nil) _ apis.Convertible = (*SubscribableTypeStatus)(nil) ) diff --git a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go index 4e07b855d97..43953230d0d 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go @@ -39,13 +39,18 @@ func (source *SubscribableType) ConvertTo(ctx context.Context, obj apis.Converti } } -// ConvertTo helps implement apis.Convertible -func (source *SubscribableTypeSpec) ConvertTo(ctx context.Context, sink *duckv1beta1.SubscribableSpec) error { - if source.Subscribable != nil { - sink.Subscribers = make([]duckv1beta1.SubscriberSpec, len(source.Subscribable.Subscribers)) - for i, s := range source.Subscribable.Subscribers { - s.ConvertTo(ctx, &sink.Subscribers[i]) +// ConvertTo implements apis.Convertible +func (source *SubscribableTypeSpec) ConvertTo(ctx context.Context, obj apis.Convertible) error { + switch sink := obj.(type) { + case *duckv1beta1.SubscribableSpec: + if source.Subscribable != nil { + sink.Subscribers = make([]duckv1beta1.SubscriberSpec, len(source.Subscribable.Subscribers)) + for i, s := range source.Subscribable.Subscribers { + s.ConvertTo(ctx, &sink.Subscribers[i]) + } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } return nil } @@ -105,16 +110,22 @@ func (sink *SubscribableType) ConvertFrom(ctx context.Context, obj apis.Converti } } -// ConvertFrom helps implement apis.Convertible -func (sink *SubscribableTypeSpec) ConvertFrom(ctx context.Context, source duckv1beta1.SubscribableSpec) { - if len(source.Subscribers) > 0 { - sink.Subscribable = &Subscribable{ - Subscribers: make([]SubscriberSpec, len(source.Subscribers)), - } - for i, s := range source.Subscribers { - sink.Subscribable.Subscribers[i].ConvertFrom(ctx, s) +// ConvertFrom implements apis.Convertible +func (sink *SubscribableTypeSpec) ConvertFrom(ctx context.Context, obj apis.Convertible) error { + switch source := obj.(type) { + case *duckv1beta1.SubscribableSpec: + if len(source.Subscribers) > 0 { + sink.Subscribable = &Subscribable{ + Subscribers: make([]SubscriberSpec, len(source.Subscribers)), + } + for i, s := range source.Subscribers { + sink.Subscribable.Subscribers[i].ConvertFrom(ctx, s) + } } + default: + return fmt.Errorf("unknown version, got: %T", source) } + return nil } // ConvertFrom helps implement apis.Convertible diff --git a/pkg/apis/duck/v1beta1/subscribable_types.go b/pkg/apis/duck/v1beta1/subscribable_types.go index 884fcae8e64..a739c9be8e0 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types.go +++ b/pkg/apis/duck/v1beta1/subscribable_types.go @@ -107,6 +107,7 @@ var ( _ apis.Listable = (*Subscribable)(nil) _ apis.Convertible = (*Subscribable)(nil) + _ apis.Convertible = (*SubscribableSpec)(nil) _ apis.Convertible = (*SubscribableStatus)(nil) ) diff --git a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go index 178e8c14192..806187bf0fb 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go @@ -39,14 +39,19 @@ func (source *Subscribable) ConvertTo(ctx context.Context, to apis.Convertible) } // ConvertTo helps implement apis.Convertible -func (source *SubscribableSpec) ConvertTo(ctx context.Context, sink *eventingduckv1.SubscribableSpec) { - if len(source.Subscribers) > 0 { - sink.Subscribers = make([]eventingduckv1.SubscriberSpec, len(source.Subscribers)) - for i, s := range source.Subscribers { - s.ConvertTo(ctx, &sink.Subscribers[i]) +func (source *SubscribableSpec) ConvertTo(ctx context.Context, obj apis.Convertible) error { + switch sink := obj.(type) { + case *eventingduckv1.SubscribableSpec: + if len(source.Subscribers) > 0 { + sink.Subscribers = make([]eventingduckv1.SubscriberSpec, len(source.Subscribers)) + for i, s := range source.Subscribers { + s.ConvertTo(ctx, &sink.Subscribers[i]) + } } + default: + return fmt.Errorf("unknown version, got: %T", sink) } - + return nil } // ConvertTo helps implement apis.Convertible @@ -98,14 +103,19 @@ func (sink *Subscribable) ConvertFrom(ctx context.Context, from apis.Convertible } // ConvertFrom helps implement apis.Convertible -func (sink *SubscribableSpec) ConvertFrom(ctx context.Context, source eventingduckv1.SubscribableSpec) error { - if len(source.Subscribers) > 0 { - sink.Subscribers = make([]SubscriberSpec, len(source.Subscribers)) - for i, s := range source.Subscribers { - if err := sink.Subscribers[i].ConvertFrom(ctx, s); err != nil { - return err +func (sink *SubscribableSpec) ConvertFrom(ctx context.Context, obj apis.Convertible) error { + switch source := obj.(type) { + case *eventingduckv1.SubscribableSpec: + if len(source.Subscribers) > 0 { + sink.Subscribers = make([]SubscriberSpec, len(source.Subscribers)) + for i, s := range source.Subscribers { + if err := sink.Subscribers[i].ConvertFrom(ctx, s); err != nil { + return err + } } } + default: + return fmt.Errorf("unknown version, got: %T", source) } return nil } diff --git a/pkg/apis/messaging/v1beta1/channel_conversion.go b/pkg/apis/messaging/v1beta1/channel_conversion.go index f82ad3bb990..e6177542775 100644 --- a/pkg/apis/messaging/v1beta1/channel_conversion.go +++ b/pkg/apis/messaging/v1beta1/channel_conversion.go @@ -96,7 +96,7 @@ func (sink *ChannelSpec) ConvertFrom(ctx context.Context, source v1.ChannelSpec) sink.Delivery = &v1beta1.DeliverySpec{} sink.Delivery.ConvertFrom(ctx, source.Delivery) } - sink.ChannelableSpec.SubscribableSpec.ConvertFrom(ctx, source.ChannelableSpec.SubscribableSpec) + sink.ChannelableSpec.SubscribableSpec.ConvertFrom(ctx, &source.ChannelableSpec.SubscribableSpec) } // ConvertFrom helps implement apis.Convertible diff --git a/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go b/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go index c266a79dff2..c5c8f9524ea 100644 --- a/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go +++ b/pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go @@ -91,7 +91,7 @@ func (sink *InMemoryChannelSpec) ConvertFrom(ctx context.Context, source v1.InMe } } sink.SubscribableSpec = eventingduckv1beta1.SubscribableSpec{} - sink.SubscribableSpec.ConvertFrom(ctx, source.SubscribableSpec) + sink.SubscribableSpec.ConvertFrom(ctx, &source.SubscribableSpec) return nil } From 4dd737d8512c8942bb30b808e5c5ba4c119b0b95 Mon Sep 17 00:00:00 2001 From: Ali Ok Date: Fri, 3 Jul 2020 13:10:22 +0300 Subject: [PATCH 2/4] Tests for bad types --- .../duck/v1/subscribable_types_conversion_test.go | 12 ++++++++++++ .../v1alpha1/subscribable_types_conversion_test.go | 12 ++++++++++++ .../v1beta1/subscribable_types_conversion_test.go | 12 ++++++++++++ 3 files changed, 36 insertions(+) diff --git a/pkg/apis/duck/v1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1/subscribable_types_conversion_test.go index 77ef17b9123..bbb0e6ba885 100644 --- a/pkg/apis/duck/v1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1/subscribable_types_conversion_test.go @@ -33,6 +33,18 @@ func TestSubscribableConversionBadType(t *testing.T) { } } +func TestSubscribableSpecConversionBadType(t *testing.T) { + good, bad := &SubscribableSpec{}, &SubscribableSpec{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} + func TestSubscribableStatusConversionBadType(t *testing.T) { good, bad := &SubscribableStatus{}, &SubscribableStatus{} diff --git a/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go index acb6cbfda77..338ee5fe7f2 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go @@ -215,6 +215,18 @@ func TestSubscribableTypeConversionWithV1Beta1(t *testing.T) { } } +func TestSubscribableTypeSpecStatusConversionBadType(t *testing.T) { + good, bad := &SubscribableTypeSpec{}, &SubscribableTypeSpec{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} + func TestSubscribableTypeStatusConversionBadType(t *testing.T) { good, bad := &SubscribableTypeStatus{}, &SubscribableTypeStatus{} diff --git a/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go b/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go index 9fc36a144af..d85eb171340 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go +++ b/pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go @@ -266,6 +266,18 @@ func TestSubscribableTypeConversionWithV1(t *testing.T) { } } +func TestSubscribableSpecConversionBadType(t *testing.T) { + good, bad := &SubscribableSpec{}, &SubscribableSpec{} + + if err := good.ConvertTo(context.Background(), bad); err == nil { + t.Errorf("ConvertTo() = %#v, wanted error", bad) + } + + if err := good.ConvertFrom(context.Background(), bad); err == nil { + t.Errorf("ConvertFrom() = %#v, wanted error", good) + } +} + func TestSubscribableStatusConversionBadType(t *testing.T) { good, bad := &SubscribableStatus{}, &SubscribableStatus{} From 51720ea5a1355c70a7f02c6324d5899e532cd1de Mon Sep 17 00:00:00 2001 From: Ali Ok Date: Fri, 3 Jul 2020 13:15:51 +0300 Subject: [PATCH 3/4] Fix build --- pkg/apis/duck/v1beta1/subscribable_types_conversion.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go index 806187bf0fb..b5dbf73bb5f 100644 --- a/pkg/apis/duck/v1beta1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1beta1/subscribable_types_conversion.go @@ -96,7 +96,7 @@ func (sink *Subscribable) ConvertFrom(ctx context.Context, from apis.Convertible case *eventingduckv1.Subscribable: sink.ObjectMeta = source.ObjectMeta sink.Status.ConvertFrom(ctx, &source.Status) - return sink.Spec.ConvertFrom(ctx, source.Spec) + return sink.Spec.ConvertFrom(ctx, &source.Spec) default: return fmt.Errorf("unknown version, got: %T", source) } From 1ef897b52131898404e35f4987c250b3956f215f Mon Sep 17 00:00:00 2001 From: Ali Ok Date: Fri, 3 Jul 2020 13:26:07 +0300 Subject: [PATCH 4/4] Fix build --- pkg/apis/duck/v1alpha1/subscribable_types_conversion.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go index 43953230d0d..54539fd97a8 100644 --- a/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go +++ b/pkg/apis/duck/v1alpha1/subscribable_types_conversion.go @@ -103,7 +103,7 @@ func (sink *SubscribableType) ConvertFrom(ctx context.Context, obj apis.Converti case *duckv1beta1.Subscribable: sink.ObjectMeta = source.ObjectMeta sink.Status.ConvertFrom(ctx, &source.Status) - sink.Spec.ConvertFrom(ctx, source.Spec) + sink.Spec.ConvertFrom(ctx, &source.Spec) return nil default: return fmt.Errorf("unknown version, got: %T", source)