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

Commit 08d018b

Browse files
authored
fix: skip message when invalid JSON
1 parent 53c73a7 commit 08d018b

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

message/handler/validate.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ func ValidateMessage(validator message.Validator, failWhenInvalid bool) watermil
1919
return func(msg *watermillmessage.Message) ([]*watermillmessage.Message, error) {
2020
validationErr, err := validator(msg)
2121
if err != nil {
22-
return nil, err
22+
logrus.WithError(err).Error("failed to validate message. Skipping message...")
23+
return nil, nil
2324
}
2425

2526
if validationErr != nil {

message/handler/validate_test.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
watermillmessage "github.com/ThreeDotsLabs/watermill/message"
88
"github.com/asyncapi/event-gateway/message"
9+
"github.com/pkg/errors"
910
"github.com/stretchr/testify/assert"
1011
"github.com/stretchr/testify/require"
1112
)
@@ -17,6 +18,7 @@ func TestValidateMessage(t *testing.T) {
1718
failWhenInvalid bool
1819
expectedValidationErr string
1920
expectedErr error
21+
messageIsInvalid bool
2022
}{
2123
{
2224
name: "Message is valid",
@@ -36,6 +38,11 @@ func TestValidateMessage(t *testing.T) {
3638
expectedValidationErr: "testing error",
3739
expectedErr: ErrMessageIsInvalid,
3840
},
41+
{
42+
name: "Skip message if message is invalid",
43+
validator: erroredMessageValidator,
44+
messageIsInvalid: true,
45+
},
3946
}
4047
for _, test := range tests {
4148
t.Run(test.name, func(t *testing.T) {
@@ -47,8 +54,12 @@ func TestValidateMessage(t *testing.T) {
4754
assert.NoError(t, err)
4855
}
4956

50-
assert.Len(t, returnedMsgs, 1)
51-
assert.Same(t, msg, returnedMsgs[0])
57+
if test.messageIsInvalid {
58+
assert.Empty(t, returnedMsgs)
59+
} else {
60+
assert.Len(t, returnedMsgs, 1)
61+
assert.Same(t, msg, returnedMsgs[0])
62+
}
5263

5364
validationErr, err := message.ValidationErrorFromMessage(msg)
5465
require.NoError(t, err)
@@ -66,3 +77,7 @@ func invalidMessageValidator(_ *watermillmessage.Message) (*message.ValidationEr
6677
Errors: []string{"testing error"},
6778
}, nil
6879
}
80+
81+
func erroredMessageValidator(_ *watermillmessage.Message) (*message.ValidationError, error) {
82+
return nil, errors.New("random error")
83+
}

0 commit comments

Comments
 (0)