From c5019a7c61ef0020205500c140de3d19e5ae3607 Mon Sep 17 00:00:00 2001 From: Benjamin Rewis <32186188+benjirewis@users.noreply.github.com> Date: Thu, 17 Feb 2022 10:39:19 -0500 Subject: [PATCH] GODRIVER-2305 Correctly append empty tagset from URI (#853) --- x/mongo/driver/connstring/connstring.go | 4 +++- x/mongo/driver/connstring/connstring_test.go | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/x/mongo/driver/connstring/connstring.go b/x/mongo/driver/connstring/connstring.go index f5f8631b57..25869ef425 100644 --- a/x/mongo/driver/connstring/connstring.go +++ b/x/mongo/driver/connstring/connstring.go @@ -746,7 +746,9 @@ func (p *parser) addOption(pair string) error { p.ReadPreference = value case "readpreferencetags": if value == "" { - // for when readPreferenceTags= at end of URI + // If "readPreferenceTags=" is supplied, append an empty map to tag sets to + // represent a wild-card. + p.ReadPreferenceTagSets = append(p.ReadPreferenceTagSets, map[string]string{}) break } diff --git a/x/mongo/driver/connstring/connstring_test.go b/x/mongo/driver/connstring/connstring_test.go index b051c7e588..c5eccdc077 100644 --- a/x/mongo/driver/connstring/connstring_test.go +++ b/x/mongo/driver/connstring/connstring_test.go @@ -382,8 +382,8 @@ func TestReadPreferenceTags(t *testing.T) { {s: "readPreferenceTags=one:1,two:2", expected: []map[string]string{{"one": "1", "two": "2"}}}, {s: "readPreferenceTags=one:1&readPreferenceTags=two:2", expected: []map[string]string{{"one": "1"}, {"two": "2"}}}, {s: "readPreferenceTags=one:1:3,two:2", err: true}, - {s: "readPreferenceTags=one:1&readPreferenceTags=two:2&readPreferenceTags=", expected: []map[string]string{{"one": "1"}, {"two": "2"}}}, - {s: "readPreferenceTags=", expected: nil}, + {s: "readPreferenceTags=one:1&readPreferenceTags=two:2&readPreferenceTags=", expected: []map[string]string{{"one": "1"}, {"two": "2"}, {}}}, + {s: "readPreferenceTags=", expected: []map[string]string{{}}}, } for _, test := range tests {