Skip to content
This repository has been archived by the owner on Apr 11, 2024. It is now read-only.

Commit

Permalink
fix: skip message when invalid JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
smoya committed Dec 20, 2021
1 parent 53c73a7 commit 08d018b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
3 changes: 2 additions & 1 deletion message/handler/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ func ValidateMessage(validator message.Validator, failWhenInvalid bool) watermil
return func(msg *watermillmessage.Message) ([]*watermillmessage.Message, error) {
validationErr, err := validator(msg)
if err != nil {
return nil, err
logrus.WithError(err).Error("failed to validate message. Skipping message...")
return nil, nil
}

if validationErr != nil {
Expand Down
19 changes: 17 additions & 2 deletions message/handler/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

watermillmessage "github.com/ThreeDotsLabs/watermill/message"
"github.com/asyncapi/event-gateway/message"
"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand All @@ -17,6 +18,7 @@ func TestValidateMessage(t *testing.T) {
failWhenInvalid bool
expectedValidationErr string
expectedErr error
messageIsInvalid bool
}{
{
name: "Message is valid",
Expand All @@ -36,6 +38,11 @@ func TestValidateMessage(t *testing.T) {
expectedValidationErr: "testing error",
expectedErr: ErrMessageIsInvalid,
},
{
name: "Skip message if message is invalid",
validator: erroredMessageValidator,
messageIsInvalid: true,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
Expand All @@ -47,8 +54,12 @@ func TestValidateMessage(t *testing.T) {
assert.NoError(t, err)
}

assert.Len(t, returnedMsgs, 1)
assert.Same(t, msg, returnedMsgs[0])
if test.messageIsInvalid {
assert.Empty(t, returnedMsgs)
} else {
assert.Len(t, returnedMsgs, 1)
assert.Same(t, msg, returnedMsgs[0])
}

validationErr, err := message.ValidationErrorFromMessage(msg)
require.NoError(t, err)
Expand All @@ -66,3 +77,7 @@ func invalidMessageValidator(_ *watermillmessage.Message) (*message.ValidationEr
Errors: []string{"testing error"},
}, nil
}

func erroredMessageValidator(_ *watermillmessage.Message) (*message.ValidationError, error) {
return nil, errors.New("random error")
}

0 comments on commit 08d018b

Please sign in to comment.