diff --git a/js.go b/js.go index c0ae58e2b..6683edbcb 100644 --- a/js.go +++ b/js.go @@ -718,6 +718,10 @@ func (m *Msg) checkReply() (*js, bool, error) { } sub := m.Sub sub.mu.Lock() + if sub.jsi == nil { + sub.mu.Unlock() + return nil, false, ErrNotJSMessage + } js := sub.jsi.js isPullMode := sub.jsi.pull > 0 sub.mu.Unlock() diff --git a/test/js_test.go b/test/js_test.go index b0b0eed6a..aa12f0fcd 100644 --- a/test/js_test.go +++ b/test/js_test.go @@ -472,6 +472,27 @@ func TestJetStreamSubscribe(t *testing.T) { } } +func TestAckForNonJetStream(t *testing.T) { + s := RunBasicJetStreamServer() + defer s.Shutdown() + + nc, err := nats.Connect(s.ClientURL()) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + defer nc.Close() + + sub, _ := nc.SubscribeSync("foo") + nc.PublishRequest("foo", "_INBOX_", []byte("OK")) + m, err := sub.NextMsg(time.Second) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + if err := m.Ack(); err != nats.ErrNotJSMessage { + t.Fatalf("Expected an error of '%v', got '%v'", nats.ErrNotJSMessage, err) + } +} + // TODO(dlc) - fill out with more stuff. func TestJetStreamManagement(t *testing.T) { s := RunBasicJetStreamServer()