Skip to content

Commit

Permalink
Make SubscribableStatus implement apis.Convertible (#3471)
Browse files Browse the repository at this point in the history
* Make SubscribableStatus implement apis.Convertible

* Tests for bad types
  • Loading branch information
aliok authored Jul 3, 2020
1 parent 996c931 commit 5e065fb
Show file tree
Hide file tree
Showing 11 changed files with 120 additions and 48 deletions.
1 change: 1 addition & 0 deletions pkg/apis/duck/v1/subscribable_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ var (
_ apis.Listable = (*Subscribable)(nil)

_ apis.Convertible = (*Subscribable)(nil)
_ apis.Convertible = (*SubscribableStatus)(nil)
)

// GetFullType implements duck.Implementable
Expand Down
10 changes: 10 additions & 0 deletions pkg/apis/duck/v1/subscribable_types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,13 @@ func (source *Subscribable) ConvertTo(ctx context.Context, sink apis.Convertible
func (sink *Subscribable) 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)
}

// ConvertFrom implements apis.Convertible
func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, source apis.Convertible) error {
return fmt.Errorf("v1 is the highest known version, got: %T", source)
}
14 changes: 13 additions & 1 deletion pkg/apis/duck/v1/subscribable_types_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
"testing"
)

func TestInMemoryChannelConversionBadType(t *testing.T) {
func TestSubscribableConversionBadType(t *testing.T) {
good, bad := &Subscribable{}, &Subscribable{}

if err := good.ConvertTo(context.Background(), bad); err == nil {
Expand All @@ -32,3 +32,15 @@ func TestInMemoryChannelConversionBadType(t *testing.T) {
t.Errorf("ConvertFrom() = %#v, wanted error", good)
}
}

func TestSubscribableStatusConversionBadType(t *testing.T) {
good, bad := &SubscribableStatus{}, &SubscribableStatus{}

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)
}
}
2 changes: 2 additions & 0 deletions pkg/apis/duck/v1alpha1/subscribable_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ var (
_ apis.Listable = (*SubscribableType)(nil)

_ apis.Convertible = (*SubscribableType)(nil)

_ apis.Convertible = (*SubscribableTypeStatus)(nil)
)

// GetSubscribableTypeStatus method Returns the Default SubscribableStatus in this case it's SubscribableStatus
Expand Down
59 changes: 35 additions & 24 deletions pkg/apis/duck/v1alpha1/subscribable_types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,26 @@ func (source *SubscriberSpec) ConvertTo(ctx context.Context, sink *duckv1beta1.S
}
}

// ConvertTo helps implement apis.Convertible
func (source *SubscribableTypeStatus) ConvertTo(ctx context.Context, sink *duckv1beta1.SubscribableStatus) {
if source.SubscribableStatus != nil &&
len(source.SubscribableStatus.Subscribers) > 0 {
sink.Subscribers = make([]duckv1beta1.SubscriberStatus, len(source.SubscribableStatus.Subscribers))
for i, ss := range source.SubscribableStatus.Subscribers {
sink.Subscribers[i] = duckv1beta1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
// ConvertTo implements apis.Convertible
func (source *SubscribableTypeStatus) ConvertTo(ctx context.Context, obj apis.Convertible) error {
switch sink := obj.(type) {
case *duckv1beta1.SubscribableStatus:
if source.SubscribableStatus != nil &&
len(source.SubscribableStatus.Subscribers) > 0 {
sink.Subscribers = make([]duckv1beta1.SubscriberStatus, len(source.SubscribableStatus.Subscribers))
for i, ss := range source.SubscribableStatus.Subscribers {
sink.Subscribers[i] = duckv1beta1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
}
}
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}

// ConvertFrom implements apis.Convertible.
Expand All @@ -91,7 +97,7 @@ func (sink *SubscribableType) ConvertFrom(ctx context.Context, obj apis.Converti
switch source := obj.(type) {
case *duckv1beta1.Subscribable:
sink.ObjectMeta = source.ObjectMeta
sink.Status.ConvertFrom(ctx, source.Status)
sink.Status.ConvertFrom(ctx, &source.Status)
sink.Spec.ConvertFrom(ctx, source.Spec)
return nil
default:
Expand Down Expand Up @@ -126,20 +132,25 @@ func (sink *SubscriberSpec) ConvertFrom(ctx context.Context, source duckv1beta1.

}

// ConvertFrom helps implement apis.Convertible
func (sink *SubscribableTypeStatus) ConvertFrom(ctx context.Context, source duckv1beta1.SubscribableStatus) error {
if len(source.Subscribers) > 0 {
sink.SubscribableStatus = &SubscribableStatus{
Subscribers: make([]duckv1beta1.SubscriberStatus, len(source.Subscribers)),
}
for i, ss := range source.Subscribers {
sink.SubscribableStatus.Subscribers[i] = duckv1beta1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
// ConvertFrom implements apis.Convertible
func (sink *SubscribableTypeStatus) ConvertFrom(ctx context.Context, obj apis.Convertible) error {
switch source := obj.(type) {
case *duckv1beta1.SubscribableStatus:
if len(source.Subscribers) > 0 {
sink.SubscribableStatus = &SubscribableStatus{
Subscribers: make([]duckv1beta1.SubscriberStatus, len(source.Subscribers)),
}
for i, ss := range source.Subscribers {
sink.SubscribableStatus.Subscribers[i] = duckv1beta1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
}
}
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}
12 changes: 12 additions & 0 deletions pkg/apis/duck/v1alpha1/subscribable_types_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,15 @@ func TestSubscribableTypeConversionWithV1Beta1(t *testing.T) {
}
}
}

func TestSubscribableTypeStatusConversionBadType(t *testing.T) {
good, bad := &SubscribableTypeStatus{}, &SubscribableTypeStatus{}

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)
}
}
1 change: 1 addition & 0 deletions pkg/apis/duck/v1beta1/subscribable_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ var (
_ apis.Listable = (*Subscribable)(nil)

_ apis.Convertible = (*Subscribable)(nil)
_ apis.Convertible = (*SubscribableStatus)(nil)
)

// GetFullType implements duck.Implementable
Expand Down
53 changes: 32 additions & 21 deletions pkg/apis/duck/v1beta1/subscribable_types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,27 +64,33 @@ func (source *SubscriberSpec) ConvertTo(ctx context.Context, sink *eventingduckv
return nil
}

// ConvertTo helps implement apis.Convertible
func (source *SubscribableStatus) ConvertTo(ctx context.Context, sink *eventingduckv1.SubscribableStatus) {
if len(source.Subscribers) > 0 {
sink.Subscribers = make([]eventingduckv1.SubscriberStatus, len(source.Subscribers))
for i, ss := range source.Subscribers {
sink.Subscribers[i] = eventingduckv1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
// ConvertTo implements apis.Convertible
func (source *SubscribableStatus) ConvertTo(ctx context.Context, obj apis.Convertible) error {
switch sink := obj.(type) {
case *eventingduckv1.SubscribableStatus:
if len(source.Subscribers) > 0 {
sink.Subscribers = make([]eventingduckv1.SubscriberStatus, len(source.Subscribers))
for i, ss := range source.Subscribers {
sink.Subscribers[i] = eventingduckv1.SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
}
}
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}

// ConvertFrom implements apis.Convertible.
func (sink *Subscribable) ConvertFrom(ctx context.Context, from apis.Convertible) error {
switch source := from.(type) {
case *eventingduckv1.Subscribable:
sink.ObjectMeta = source.ObjectMeta
sink.Status.ConvertFrom(ctx, source.Status)
sink.Status.ConvertFrom(ctx, &source.Status)
return sink.Spec.ConvertFrom(ctx, source.Spec)
default:
return fmt.Errorf("unknown version, got: %T", source)
Expand Down Expand Up @@ -117,18 +123,23 @@ func (sink *SubscriberSpec) ConvertFrom(ctx context.Context, source eventingduck
return nil
}

// ConvertFrom helps implement apis.Convertible
func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, source eventingduckv1.SubscribableStatus) error {
if len(source.Subscribers) > 0 {
sink.Subscribers = make([]SubscriberStatus, len(source.Subscribers))
for i, ss := range source.Subscribers {
sink.Subscribers[i] = SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
// ConvertFrom implements apis.Convertible
func (sink *SubscribableStatus) ConvertFrom(ctx context.Context, obj apis.Convertible) error {
switch source := obj.(type) {
case *eventingduckv1.SubscribableStatus:
if len(source.Subscribers) > 0 {
sink.Subscribers = make([]SubscriberStatus, len(source.Subscribers))
for i, ss := range source.Subscribers {
sink.Subscribers[i] = SubscriberStatus{
UID: ss.UID,
ObservedGeneration: ss.ObservedGeneration,
Ready: ss.Ready,
Message: ss.Message,
}
}
}
default:
return fmt.Errorf("unknown version, got: %T", sink)
}
return nil
}
12 changes: 12 additions & 0 deletions pkg/apis/duck/v1beta1/subscribable_types_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,3 +265,15 @@ func TestSubscribableTypeConversionWithV1(t *testing.T) {
}
}
}

func TestSubscribableStatusConversionBadType(t *testing.T) {
good, bad := &SubscribableStatus{}, &SubscribableStatus{}

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)
}
}
2 changes: 1 addition & 1 deletion pkg/apis/messaging/v1beta1/channel_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,6 @@ func (sink *ChannelSpec) ConvertFrom(ctx context.Context, source v1.ChannelSpec)
func (sink *ChannelStatus) ConvertFrom(ctx context.Context, source v1.ChannelStatus) {
source.Status.ConvertTo(ctx, &sink.Status)
sink.Channel = source.Channel
sink.SubscribableStatus.ConvertFrom(ctx, source.SubscribableStatus)
sink.SubscribableStatus.ConvertFrom(ctx, &source.SubscribableStatus)
sink.AddressStatus.Address = source.AddressStatus.Address
}
2 changes: 1 addition & 1 deletion pkg/apis/messaging/v1beta1/in_memory_channel_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,5 +100,5 @@ func (sink *InMemoryChannelStatus) ConvertFrom(ctx context.Context, source v1.In
source.Status.ConvertTo(ctx, &sink.Status)
sink.AddressStatus = source.AddressStatus
sink.SubscribableStatus = eventingduckv1beta1.SubscribableStatus{}
sink.SubscribableStatus.ConvertFrom(ctx, source.SubscribableStatus)
sink.SubscribableStatus.ConvertFrom(ctx, &source.SubscribableStatus)
}

0 comments on commit 5e065fb

Please sign in to comment.