From eced2999efefeedbdf1697f449174529dc87334c Mon Sep 17 00:00:00 2001 From: Ivan Kozlovic Date: Tue, 31 Aug 2021 18:32:44 -0600 Subject: [PATCH 1/2] [FIXED] Inboxes suffix would contain many zeros This was introduced by PR https://github.com/nats-io/nats.go/pull/767 when the nuidSize was used instead of replySuffixLen to just build the reply suffix. This meant that the suffix part with 22 characters long and had lots of zeros at the end. Added a test to make sure we don't break that in the future. Signed-off-by: Ivan Kozlovic --- go_test.mod | 2 +- go_test.sum | 6 +++--- nats.go | 3 ++- nats_test.go | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/go_test.mod b/go_test.mod index 65ac99cb1..78cb13978 100644 --- a/go_test.mod +++ b/go_test.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/golang/protobuf v1.4.2 - github.com/nats-io/nats-server/v2 v2.3.5-0.20210825221009-41a253dabb43 + github.com/nats-io/nats-server/v2 v2.4.1-0.20210831212757-2539bbb957ef github.com/nats-io/nkeys v0.3.0 github.com/nats-io/nuid v1.0.1 google.golang.org/protobuf v1.23.0 diff --git a/go_test.sum b/go_test.sum index 050ae228c..b6fda2094 100644 --- a/go_test.sum +++ b/go_test.sum @@ -19,9 +19,9 @@ github.com/nats-io/jwt v1.2.2 h1:w3GMTO969dFg+UOKTmmyuu7IGdusK+7Ytlt//OYH/uU= github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= -github.com/nats-io/nats-server/v2 v2.3.5-0.20210825221009-41a253dabb43 h1:Sbb4QxNsccsPERg0C7uQX7/xgOCOTMIvDH9Ytb5MXsU= -github.com/nats-io/nats-server/v2 v2.3.5-0.20210825221009-41a253dabb43/go.mod h1:jgHRB+EfZisUr6j50/g7Gcah7AR8qtk3as42DJmESCk= -github.com/nats-io/nats.go v1.11.1-0.20210819195927-9053aa4200f0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nats-server/v2 v2.4.1-0.20210831212757-2539bbb957ef h1:fVi/sPmt1MjO1bA4M4jFlrCs9DYuZbpHPeKr7IQRM2Q= +github.com/nats-io/nats-server/v2 v2.4.1-0.20210831212757-2539bbb957ef/go.mod h1:TUAhMFYh1VISyY/D4WKJUMuGHg8yHtoUTuxkbiej1lc= +github.com/nats-io/nats.go v1.12.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= diff --git a/nats.go b/nats.go index f0148e291..14b795d71 100644 --- a/nats.go +++ b/nats.go @@ -3566,6 +3566,7 @@ func (nc *Conn) oldRequest(subj string, hdr, data []byte, timeout time.Duration) const ( InboxPrefix = "_INBOX." inboxPrefixLen = len(InboxPrefix) + replySuffixLen = 8 // Gives us 62^8 rdigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" base = 62 ) @@ -3615,7 +3616,7 @@ func (nc *Conn) newRespInbox() string { sb.WriteString(nc.respSubPrefix) rn := nc.respRand.Int63() - for i := 0; i < nuidSize; i++ { + for i := 0; i < replySuffixLen; i++ { sb.WriteByte(rdigits[rn%base]) rn /= base } diff --git a/nats_test.go b/nats_test.go index 342c48206..fd965b27c 100644 --- a/nats_test.go +++ b/nats_test.go @@ -2702,3 +2702,37 @@ func TestCustomInboxPrefix(t *testing.T) { t.Fatalf("did not receive ok: %q", resp.Data) } } + +func TestRespInbox(t *testing.T) { + s := RunServerOnPort(-1) + defer s.Shutdown() + + nc, err := Connect(s.ClientURL()) + if err != nil { + t.Fatalf("Expected to connect to server, got %v", err) + } + defer nc.Close() + + if _, err := nc.Subscribe("foo", func(msg *Msg) { + lastDot := strings.LastIndex(msg.Reply, ".") + if lastDot == -1 { + msg.Respond([]byte(fmt.Sprintf("Invalid reply subject: %q", msg.Reply))) + return + } + lastToken := msg.Reply[lastDot+1:] + if len(lastToken) != replySuffixLen { + msg.Respond([]byte(fmt.Sprintf("Invalid last token: %q", lastToken))) + return + } + msg.Respond(nil) + }); err != nil { + t.Fatalf("subscribe failed: %s", err) + } + resp, err := nc.Request("foo", []byte("check inbox"), time.Second) + if err != nil { + t.Fatalf("Request failed: %v", err) + } + if len(resp.Data) > 0 { + t.Fatalf("Error: %s", resp.Data) + } +} From 6ea6f6a379a1d119aaa2ec28bc16e35f5ae8e99c Mon Sep 17 00:00:00 2001 From: Ivan Kozlovic Date: Tue, 31 Aug 2021 18:45:15 -0600 Subject: [PATCH 2/2] Update readme's "master" to "main" for badges Signed-off-by: Ivan Kozlovic --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ecac808ec..e17a16648 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ A [Go](http://golang.org) client for the [NATS messaging system](https://nats.io [![License Apache 2](https://img.shields.io/badge/License-Apache2-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fnats-io%2Fgo-nats.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fnats-io%2Fgo-nats?ref=badge_shield) -[![Go Report Card](https://goreportcard.com/badge/github.com/nats-io/nats.go)](https://goreportcard.com/report/github.com/nats-io/nats.go) [![Build Status](https://travis-ci.com/nats-io/nats.go.svg?branch=master)](http://travis-ci.com/nats-io/nats.go) [![GoDoc](https://img.shields.io/badge/GoDoc-reference-007d9c)](https://pkg.go.dev/github.com/nats-io/nats.go) - [![Coverage Status](https://coveralls.io/repos/nats-io/nats.go/badge.svg?branch=master)](https://coveralls.io/r/nats-io/nats.go?branch=master) +[![Go Report Card](https://goreportcard.com/badge/github.com/nats-io/nats.go)](https://goreportcard.com/report/github.com/nats-io/nats.go) [![Build Status](https://travis-ci.com/nats-io/nats.go.svg?branch=main)](https://travis-ci.com/nats-io/nats.go) [![GoDoc](https://img.shields.io/badge/GoDoc-reference-007d9c)](https://pkg.go.dev/github.com/nats-io/nats.go) [![Coverage Status](https://coveralls.io/repos/nats-io/nats.go/badge.svg?branch=main)](https://coveralls.io/r/nats-io/nats.go?branch=main) ## Installation