From 994b89834956fd58b4665b7bc9c4b57cafa8a5b3 Mon Sep 17 00:00:00 2001 From: MiroslavGatsanoga Date: Fri, 27 Nov 2020 15:42:03 +0200 Subject: [PATCH] Fix failing Snyk check --- consumer/mapper_test.go | 16 ++++++++-------- dispatch/dispatcher.go | 15 +++++++++++---- dispatch/dispatcher_test.go | 18 ++++++++++-------- dispatch/subscribers.go | 22 ++++++++++++++++------ go.mod | 2 +- go.sum | 4 ++-- mocks/mocks.go | 4 ++-- resources/push.go | 9 +++++++-- resources/push_test.go | 8 ++++---- 9 files changed, 61 insertions(+), 37 deletions(-) diff --git a/consumer/mapper_test.go b/consumer/mapper_test.go index c31a46d..30598d4 100644 --- a/consumer/mapper_test.go +++ b/consumer/mapper_test.go @@ -13,9 +13,9 @@ func TestMapToUpdateNotification(t *testing.T) { standout := map[string]interface{}{"scoop": true} payload := map[string]interface{}{"title": "This is a title", "standout": standout, "type": "Article"} - + id, _ := uuid.NewV4() event := ContentMessage{ - ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8081/list/blah/" + uuid.NewV4().String(), + ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8081/list/blah/" + id.String(), LastModified: "2016-11-02T10:54:22.234Z", Payload: payload, } @@ -59,9 +59,9 @@ func TestMapToUpdateNotification_ForContentWithVersion3UUID(t *testing.T) { func TestMapToDeleteNotification(t *testing.T) { t.Parallel() - + id, _ := uuid.NewV4() event := ContentMessage{ - ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8080/list/blah/" + uuid.NewV4().String(), + ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8080/list/blah/" + id.String(), LastModified: "2016-11-02T10:54:22.234Z", Payload: "", } @@ -79,9 +79,9 @@ func TestMapToDeleteNotification(t *testing.T) { func TestMapToDeleteNotification_ContentTypeHeader(t *testing.T) { t.Parallel() - + id, _ := uuid.NewV4() event := ContentMessage{ - ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8080/list/blah/" + uuid.NewV4().String(), + ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8080/list/blah/" + id.String(), LastModified: "2016-11-02T10:54:22.234Z", ContentTypeHeader: "application/vnd.ft-upp-article+json", Payload: "", @@ -122,9 +122,9 @@ func TestNotificationMappingFieldsNotExtractedFromPayload(t *testing.T) { t.Parallel() payload := map[string]interface{}{"foo": "bar"} - + id, _ := uuid.NewV4() event := ContentMessage{ - ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8081/list/blah/" + uuid.NewV4().String(), + ContentURI: "http://list-transformer-pr-uk-up.svc.ft.com:8081/list/blah/" + id.String(), LastModified: "2016-11-02T10:54:22.234Z", Payload: payload, } diff --git a/dispatch/dispatcher.go b/dispatch/dispatcher.go index a73b105..fe8a101 100644 --- a/dispatch/dispatcher.go +++ b/dispatch/dispatcher.go @@ -74,15 +74,22 @@ func (d *Dispatcher) Subscribers() []Subscriber { return subs } -func (d *Dispatcher) Subscribe(address string, subTypes []string, monitoring bool) Subscriber { +func (d *Dispatcher) Subscribe(address string, subTypes []string, monitoring bool) (Subscriber, error) { var s NotificationConsumer + var err error if monitoring { - s = NewMonitorSubscriber(address, subTypes) + s, err = NewMonitorSubscriber(address, subTypes) } else { - s = NewStandardSubscriber(address, subTypes) + s, err = NewStandardSubscriber(address, subTypes) } + + if err != nil { + return nil, err + } + d.addSubscriber(s) - return s + + return s, nil } func (d *Dispatcher) Unsubscribe(subscriber Subscriber) { diff --git a/dispatch/dispatcher_test.go b/dispatch/dispatcher_test.go index 80bbd67..933971c 100644 --- a/dispatch/dispatcher_test.go +++ b/dispatch/dispatcher_test.go @@ -57,8 +57,8 @@ func TestShouldDispatchNotificationsToMultipleSubscribers(t *testing.T) { h := NewHistory(historySize) d := NewDispatcher(delay, h, l) - m := d.Subscribe("192.168.1.2", contentSubscribeTypes, true) - s := d.Subscribe("192.168.1.3", contentSubscribeTypes, false) + m, _ := d.Subscribe("192.168.1.2", contentSubscribeTypes, true) + s, _ := d.Subscribe("192.168.1.3", contentSubscribeTypes, false) go d.Start() defer d.Stop() @@ -93,9 +93,9 @@ func TestShouldDispatchNotificationsToSubscribersByType(t *testing.T) { h := NewHistory(historySize) d := NewDispatcher(delay, h, l) - m := d.Subscribe("192.168.1.2", contentSubscribeTypes, true) - s := d.Subscribe("192.168.1.3", []string{typeArticle}, false) - annSub := d.Subscribe("192.168.1.4", []string{annotationSubType}, false) + m, _ := d.Subscribe("192.168.1.2", contentSubscribeTypes, true) + s, _ := d.Subscribe("192.168.1.3", []string{typeArticle}, false) + annSub, _ := d.Subscribe("192.168.1.4", []string{annotationSubType}, false) go d.Start() defer d.Stop() @@ -156,8 +156,10 @@ func TestAddAndRemoveOfSubscribers(t *testing.T) { h := NewHistory(historySize) d := NewDispatcher(delay, h, l) - m := d.Subscribe("192.168.1.2", contentSubscribeTypes, true).(NotificationConsumer) - s := d.Subscribe("192.168.1.3", contentSubscribeTypes, false).(NotificationConsumer) + m, _ := d.Subscribe("192.168.1.2", contentSubscribeTypes, true) + m = m.(NotificationConsumer) + s, _ := d.Subscribe("192.168.1.3", contentSubscribeTypes, false) + s = s.(NotificationConsumer) go d.Start() defer d.Stop() @@ -186,7 +188,7 @@ func TestDispatchDelay(t *testing.T) { h := NewHistory(historySize) d := NewDispatcher(delay, h, l) - s := d.Subscribe("192.168.1.3", contentSubscribeTypes, false) + s, _ := d.Subscribe("192.168.1.3", contentSubscribeTypes, false) go d.Start() defer d.Stop() diff --git a/dispatch/subscribers.go b/dispatch/subscribers.go index b883621..930403a 100644 --- a/dispatch/subscribers.go +++ b/dispatch/subscribers.go @@ -38,15 +38,20 @@ type StandardSubscriber struct { } // NewStandardSubscriber returns a new instance of a standard subscriber -func NewStandardSubscriber(address string, subTypes []string) *StandardSubscriber { +func NewStandardSubscriber(address string, subTypes []string) (*StandardSubscriber, error) { notificationChannel := make(chan string, notificationBuffer) + id, err := uuid.NewV4() + if err != nil { + return nil, err + } + return &StandardSubscriber{ - id: uuid.NewV4().String(), + id: id.String(), notificationChannel: notificationChannel, addr: address, sinceTime: time.Now(), acceptedTypes: subTypes, - } + }, nil } // Id returns the uniquely generated subscriber identifier @@ -167,15 +172,20 @@ func (m *MonitorSubscriber) Send(n Notification) error { } // NewMonitorSubscriber returns a new instance of a Monitor subscriber -func NewMonitorSubscriber(address string, subTypes []string) *MonitorSubscriber { +func NewMonitorSubscriber(address string, subTypes []string) (*MonitorSubscriber, error) { notificationChannel := make(chan string, notificationBuffer) + id, err := uuid.NewV4() + if err != nil { + return nil, err + } + return &MonitorSubscriber{ - id: uuid.NewV4().String(), + id: id.String(), notificationChannel: notificationChannel, addr: address, sinceTime: time.Now(), acceptedTypes: subTypes, - } + }, nil } func buildMonitorNotificationMsg(n Notification) (string, error) { diff --git a/go.mod b/go.mod index 2e179c6..4b3f01b 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/onsi/gomega v1.7.0 // indirect github.com/pkg/errors v0.8.0 github.com/samuel/go-zookeeper v0.0.0-20161028232340-1d7be4effb13 - github.com/satori/go.uuid v1.1.1-0.20170321230731-5bf94b69c6b6 + github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b github.com/sirupsen/logrus v1.0.5 github.com/stretchr/testify v1.3.0 github.com/wvanbergen/kazoo-go v0.0.0-20180202103751-f72d8611297a diff --git a/go.sum b/go.sum index e800a0c..f429961 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhD github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/samuel/go-zookeeper v0.0.0-20161028232340-1d7be4effb13 h1:4AQBn5RJY4WH8t8TLEMZUsWeXHAUcoao42TCAfpEJJE= github.com/samuel/go-zookeeper v0.0.0-20161028232340-1d7be4effb13/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/satori/go.uuid v1.1.1-0.20170321230731-5bf94b69c6b6 h1:oZag5hylqWwZrDdj/laMwWQnXaeWBQf66qm4PGQI6Wc= -github.com/satori/go.uuid v1.1.1-0.20170321230731-5bf94b69c6b6/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= +github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sirupsen/logrus v1.0.5 h1:8c8b5uO0zS4X6RPl/sd1ENwSkIc0/H2PaHxE3udaE8I= github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= diff --git a/mocks/mocks.go b/mocks/mocks.go index f2d28f9..10ebc9a 100644 --- a/mocks/mocks.go +++ b/mocks/mocks.go @@ -46,9 +46,9 @@ func (m *Dispatcher) Subscribers() []dispatch.Subscriber { return args.Get(0).([]dispatch.Subscriber) } -func (m *Dispatcher) Subscribe(address string, subTypes []string, monitoring bool) dispatch.Subscriber { +func (m *Dispatcher) Subscribe(address string, subTypes []string, monitoring bool) (dispatch.Subscriber, error) { args := m.Called(address, subTypes, monitoring) - return args.Get(0).(dispatch.Subscriber) + return args.Get(0).(dispatch.Subscriber), nil } func (m *Dispatcher) Unsubscribe(s dispatch.Subscriber) { m.Called(s) diff --git a/resources/push.go b/resources/push.go index 5604a67..dc8af7b 100644 --- a/resources/push.go +++ b/resources/push.go @@ -38,7 +38,7 @@ type keyValidator interface { } type notifier interface { - Subscribe(address string, subTypes []string, monitoring bool) dispatch.Subscriber + Subscribe(address string, subTypes []string, monitoring bool) (dispatch.Subscriber, error) Unsubscribe(subscriber dispatch.Subscriber) } @@ -100,7 +100,12 @@ func (h *SubHandler) HandleSubscription(w http.ResponseWriter, r *http.Request) monitorParam := r.URL.Query().Get("monitor") isMonitor, _ := strconv.ParseBool(monitorParam) - s := h.notif.Subscribe(getClientAddr(r), subscriptionParams, isMonitor) + s, err := h.notif.Subscribe(getClientAddr(r), subscriptionParams, isMonitor) + if err != nil { + h.log.WithError(err).Error("Error creating subscription") + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } defer h.notif.Unsubscribe(s) ctx, cancel := context.WithCancel(r.Context()) diff --git a/resources/push_test.go b/resources/push_test.go index 70e440b..7332214 100644 --- a/resources/push_test.go +++ b/resources/push_test.go @@ -93,7 +93,7 @@ func TestSubscription(t *testing.T) { v.On("Validate", mock.Anything, apiKey).Return(nil) if test.ExpectStream { - sub := dispatch.NewStandardSubscriber(subAddress, test.ExpectedType) + sub, _ := dispatch.NewStandardSubscriber(subAddress, test.ExpectedType) d.On("Subscribe", subAddress, test.ExpectedType, test.IsMonitor).Run(func(args mock.Arguments) { go func() { <-time.After(time.Millisecond * 10) @@ -148,7 +148,7 @@ func TestPassKeyAsParameter(t *testing.T) { v := &mocks.KeyValidator{} v.On("Validate", mock.Anything, keyAPI).Return(nil) - sub := dispatch.NewStandardSubscriber(req.RemoteAddr, []string{defaultSubscriptionType}) + sub, _ := dispatch.NewStandardSubscriber(req.RemoteAddr, []string{defaultSubscriptionType}) d := &mocks.Dispatcher{} d.On("Subscribe", req.RemoteAddr, []string{defaultSubscriptionType}, false).Run(func(args mock.Arguments) { go func() { @@ -221,7 +221,7 @@ func TestHeartbeat(t *testing.T) { v := &mocks.KeyValidator{} v.On("Validate", mock.Anything, keyAPI).Return(nil) - sub := dispatch.NewStandardSubscriber(subAddress, []string{defaultSubscriptionType}) + sub, _ := dispatch.NewStandardSubscriber(subAddress, []string{defaultSubscriptionType}) d := &mocks.Dispatcher{} d.On("Subscribe", subAddress, []string{defaultSubscriptionType}, false).Return(sub) d.On("Unsubscribe", mock.AnythingOfType("*dispatch.StandardSubscriber")).Return() @@ -288,7 +288,7 @@ func TestPushNotificationDelay(t *testing.T) { v := &mocks.KeyValidator{} v.On("Validate", mock.Anything, keyAPI).Return(nil) - sub := dispatch.NewStandardSubscriber(subAddress, []string{defaultSubscriptionType}) + sub, _ := dispatch.NewStandardSubscriber(subAddress, []string{defaultSubscriptionType}) d := &mocks.Dispatcher{} d.On("Subscribe", subAddress, []string{defaultSubscriptionType}, false).Run(func(args mock.Arguments) { go func() {