Skip to content

Commit

Permalink
Fix panic on publish before RetryClient.SetClient (#158)
Browse files Browse the repository at this point in the history
  • Loading branch information
at-wat authored Feb 22, 2021
1 parent 70ce0b0 commit 8825bfc
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
10 changes: 8 additions & 2 deletions retryclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ func (c *RetryClient) Publish(ctx context.Context, message *Message) error {
cli := c.cli
c.mu.Unlock()

if err := cli.ValidateMessage(message); err != nil {
return wrapError(err, "validating publishing message")
if cli != nil {
if err := cli.ValidateMessage(message); err != nil {
return wrapError(err, "validating publishing message")
}
}

return wrapError(c.pushTask(ctx, func(ctx context.Context, cli *BaseClient) {
c.publish(ctx, cli, message)
}), "retryclient: publishing")
Expand All @@ -78,6 +81,9 @@ func (c *RetryClient) Unsubscribe(ctx context.Context, topics ...string) error {
}

func (c *RetryClient) publish(ctx context.Context, cli *BaseClient, message *Message) {
if err := cli.ValidateMessage(message); err != nil {
return
}
publish := func(ctx context.Context, cli *BaseClient, message *Message) {
if err := cli.Publish(ctx, message); err != nil {
select {
Expand Down
24 changes: 24 additions & 0 deletions retryclient_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,27 @@ func TestRetryClientPublish_MessageValidationError(t *testing.T) {
)
}
}

func TestRetryClient_NilClient(t *testing.T) {
cli := &RetryClient{}
t.Run("Publish", func(t *testing.T) {
if err := cli.Publish(context.Background(), &Message{
Payload: make([]byte, 101),
}); err != nil {
t.Errorf("Unexpected error: '%v'", err)
}
})
t.Run("Subscribe", func(t *testing.T) {
if _, err := cli.Subscribe(context.Background(), Subscription{
Topic: "test",
QoS: QoS1,
}); err != nil {
t.Errorf("Unexpected error: '%v'", err)
}
})
t.Run("Unsubscribe", func(t *testing.T) {
if err := cli.Unsubscribe(context.Background(), "test"); err != nil {
t.Errorf("Unexpected error: '%v'", err)
}
})
}

0 comments on commit 8825bfc

Please sign in to comment.