Skip to content

Commit 90ebeff

Browse files
committed
Update ReadPrefSelector and move feature package
Updates ReadPrefSelector to use MaxStalenessSupported. Merges the feature package into the description package. GODRIVER-333 Change-Id: I8910ae417d6eea11515bc1fb4a9c2babfa56a973
1 parent 31d5281 commit 90ebeff

File tree

6 files changed

+68
-86
lines changed

6 files changed

+68
-86
lines changed

core/auth/default.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
"github.com/mongodb/mongo-go-driver/core/description"
1313
"github.com/mongodb/mongo-go-driver/core/wiremessage"
14-
"github.com/mongodb/mongo-go-driver/internal/feature"
1514
)
1615

1716
func newDefaultAuthenticator(cred *Cred) (Authenticator, error) {
@@ -30,7 +29,7 @@ type DefaultAuthenticator struct {
3029
func (a *DefaultAuthenticator) Auth(ctx context.Context, desc description.Server, rw wiremessage.ReadWriter) error {
3130
var actual Authenticator
3231
var err error
33-
if err = feature.ScramSHA1(desc.Version); err != nil {
32+
if err = description.ScramSHA1Supported(desc.Version); err != nil {
3433
actual, err = newMongoDBCRAuthenticator(a.Cred)
3534
} else {
3635
actual, err = newScramSHA1Authenticator(a.Cred)

core/description/feature.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package description
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
// MaxStalenessSupported returns an error if the given server version
8+
// does not support max staleness.
9+
func MaxStalenessSupported(serverVersion Version, wireVersion *VersionRange) error {
10+
if !serverVersion.AtLeast(3, 4, 0) || (wireVersion != nil && wireVersion.Max < 5) {
11+
return fmt.Errorf("max staleness is only supported for servers 3.4 or newer")
12+
}
13+
14+
return nil
15+
}
16+
17+
// ScramSHA1Supported returns an error if the given server version
18+
// does not support scram-sha-1.
19+
func ScramSHA1Supported(version Version) error {
20+
if !version.AtLeast(3, 0, 0) {
21+
return fmt.Errorf("SCRAM-SHA-1 is only supported for servers 3.0 or newer")
22+
}
23+
24+
return nil
25+
}

core/description/feature_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package description
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestMaxStaleness(t *testing.T) {
10+
wireVersionSupported := NewVersionRange(0, 5)
11+
wireVersionUnsupported := NewVersionRange(0, 4)
12+
13+
tests := []struct {
14+
version Version
15+
wire *VersionRange
16+
expected bool
17+
}{
18+
{Version{Parts: []uint8{2, 4, 0}}, nil, false},
19+
{Version{Parts: []uint8{3, 3, 99}}, nil, false},
20+
{Version{Parts: []uint8{3, 4, 0}}, nil, true},
21+
{Version{Parts: []uint8{3, 4, 1}}, nil, true},
22+
{Version{Parts: []uint8{2, 4, 0}}, &wireVersionSupported, false},
23+
{Version{Parts: []uint8{2, 4, 0}}, &wireVersionUnsupported, false},
24+
{Version{Parts: []uint8{3, 4, 1}}, &wireVersionSupported, true},
25+
{Version{Parts: []uint8{3, 4, 1}}, &wireVersionUnsupported, false},
26+
}
27+
28+
for _, test := range tests {
29+
t.Run(test.version.String(), func(t *testing.T) {
30+
t.Parallel()
31+
32+
err := MaxStalenessSupported(test.version, test.wire)
33+
if test.expected {
34+
require.NoError(t, err)
35+
} else {
36+
require.Error(t, err)
37+
}
38+
})
39+
}
40+
}

core/description/server_selector.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package description
22

33
import (
4-
"errors"
54
"fmt"
65
"math"
76
"time"
@@ -115,8 +114,8 @@ func ReadPrefSelector(rp *readpref.ReadPref) ServerSelector {
115114
if _, set := rp.MaxStaleness(); set {
116115
for _, s := range candidates {
117116
if s.Kind != Unknown {
118-
if !s.Version.AtLeast(3, 4, 0) || (s.WireVersion != nil && s.WireVersion.Max < 5) {
119-
return nil, errors.New("max staleness is only supported for servers 3.4 or newer")
117+
if err := MaxStalenessSupported(s.Version, s.WireVersion); err != nil {
118+
return nil, err
120119
}
121120
}
122121
}

internal/feature/supported.go

Lines changed: 0 additions & 33 deletions
This file was deleted.

internal/feature/supported_test.go

Lines changed: 0 additions & 48 deletions
This file was deleted.

0 commit comments

Comments
 (0)