diff --git a/server/jetstream_api.go b/server/jetstream_api.go index f4b703ad..8a49ecad 100644 --- a/server/jetstream_api.go +++ b/server/jetstream_api.go @@ -3744,11 +3744,12 @@ func (s *Server) jsConsumerCreateRequest(sub *subscription, c *client, a *Accoun } else { streamName = streamNameFromSubject(subject) consumerName = consumerNameFromSubject(subject) - } - // New has optional filtered subject as part of main subject.. - if n > 7 { - tokens := strings.Split(subject, tsep) - filteredSubject = strings.Join(tokens[6:], tsep) + // New has optional filtered subject as part of main subject.. + if n > 6 { + + tokens := strings.Split(subject, tsep) + filteredSubject = strings.Join(tokens[6:], tsep) + } } } diff --git a/server/jetstream_test.go b/server/jetstream_test.go index 65381f1d..844a944f 100644 --- a/server/jetstream_test.go +++ b/server/jetstream_test.go @@ -19216,6 +19216,45 @@ func TestJetStreamMetaDataFailOnKernelFault(t *testing.T) { require_True(t, si.State.Msgs == 10) } +func TestJetstreamConsumerSingleTokenSubject(t *testing.T) { + + s := RunBasicJetStreamServer(t) + defer s.Shutdown() + + nc, js := jsClientConnect(t, s) + defer nc.Close() + + filterSubject := "foo" + _, err := js.AddStream(&nats.StreamConfig{ + Name: "TEST", + Subjects: []string{filterSubject}, + }) + require_NoError(t, err) + + req, err := json.Marshal(&CreateConsumerRequest{Stream: "TEST", Config: ConsumerConfig{ + FilterSubject: filterSubject, + Name: "name", + }}) + + if err != nil { + t.Fatalf("failed to marshal consumer create request: %v", err) + } + + resp, err := nc.Request(fmt.Sprintf("$JS.API.CONSUMER.CREATE.%s.%s.%s", "TEST", "name", "not_filter_subject"), req, time.Second*10) + + var apiResp ApiResponse + json.Unmarshal(resp.Data, &apiResp) + if err != nil { + t.Fatalf("failed to unmarshal response: %v", err) + } + if apiResp.Error == nil { + t.Fatalf("expected error, got nil") + } + if apiResp.Error.ErrCode != 10131 { + t.Fatalf("expected error 10131, got %v", apiResp.Error) + } +} + // https://github.com/nats-io/nats-server/issues/3734 func TestJetStreamMsgBlkFailOnKernelFault(t *testing.T) { s := RunBasicJetStreamServer(t)