Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GODRIVER-2333 Assert that Ping op succeeds initial DNS spec tests #1124

Merged
merged 9 commits into from
Nov 16, 2022
40 changes: 40 additions & 0 deletions mongo/integration/initial_dns_seedlist_discovery_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ import (
"runtime"
"strings"
"testing"
"time"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/internal/testutil/assert"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/description"
"go.mongodb.org/mongo-driver/mongo/integration/mtest"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readpref"
"go.mongodb.org/mongo-driver/x/mongo/driver/connstring"
"go.mongodb.org/mongo-driver/x/mongo/driver/topology"
)
Expand All @@ -37,19 +40,26 @@ type seedlistTest struct {
NumHosts *int `bson:"numHosts"`
Error bool `bson:"error"`
Options bson.Raw `bson:"options"`
Ping *bool `bson:"ping"`
}

func TestInitialDNSSeedlistDiscoverySpec(t *testing.T) {
mt := mtest.New(t, noClientOpts)
defer mt.Close()

mt.RunOpts("replica set", mtest.NewOptions().Topologies(mtest.ReplicaSet).CreateClient(false), func(mt *mtest.T) {
mt.Parallel()

runSeedlistDiscoveryDirectory(mt, "replica-set")
})
mt.RunOpts("sharded", mtest.NewOptions().Topologies(mtest.Sharded).CreateClient(false), func(mt *mtest.T) {
mt.Parallel()

runSeedlistDiscoveryDirectory(mt, "sharded")
})
mt.RunOpts("load balanced", mtest.NewOptions().Topologies(mtest.LoadBalanced).CreateClient(false), func(mt *mtest.T) {
mt.Parallel()

runSeedlistDiscoveryDirectory(mt, "load-balanced")
})
}
Expand All @@ -63,6 +73,24 @@ func runSeedlistDiscoveryDirectory(mt *mtest.T, subdirectory string) {
}
}

// runSeedlistDiscoveryPingTest will create a new connection using the test URI and attempt to "ping" the server.
func runSeedlistDiscoveryPingTest(mt *mtest.T, clientOpts *options.ClientOptions) {
ctx := context.Background()

client, err := mongo.Connect(ctx, clientOpts)
assert.Nil(mt, err, "Connect error: %v", err)

defer func() { _ = client.Disconnect(ctx) }()

// Create a context with a timeout to prevent the ping operation from blocking indefinitely.
pingCtx, cancel := context.WithTimeout(ctx, 1*time.Second)
defer cancel()

// Ping the server.
err = client.Ping(pingCtx, readpref.Nearest())
assert.Nil(mt, err, "Ping error: %v", err)
}

func runSeedlistDiscoveryTest(mt *mtest.T, file string) {
content, err := ioutil.ReadFile(file)
assert.Nil(mt, err, "ReadFile error for %v: %v", file, err)
Expand Down Expand Up @@ -131,6 +159,10 @@ func runSeedlistDiscoveryTest(mt *mtest.T, file string) {
_, err := getServerByAddress(host, topo)
assert.Nil(mt, err, "error finding host %q: %v", host, err)
}

if ping := test.Ping; ping == nil || *ping {
runSeedlistDiscoveryPingTest(mt, opts)
}
}

func buildSet(list []string) map[string]struct{} {
Expand Down Expand Up @@ -230,6 +262,14 @@ func getServerByAddress(address string, topo *topology.Topology) (description.Se
if err != nil {
return description.Server{}, err
}

// If the selected server is a topology.SelectedServer, then we can get the description without creating a
// connect pool.
topologySelectedServer, ok := selectedServer.(*topology.SelectedServer)
if ok {
return topologySelectedServer.Description().Server, nil
}

selectedServerConnection, err := selectedServer.Connection(context.Background())
if err != nil {
return description.Server{}, err
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
"loadBalanced": true,
"ssl": true,
"directConnection": false
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ options:
loadBalanced: true
ssl: true
directConnection: false
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"options": {
"loadBalanced": true,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ hosts:
options:
loadBalanced: true
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
"loadBalanced": true,
"srvMaxHosts": 0,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ options:
loadBalanced: true
srvMaxHosts: 0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
"loadBalanced": true,
"srvMaxHosts": 0,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ options:
loadBalanced: true
srvMaxHosts: 0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
"options": {
"ssl": true,
"directConnection": false
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ hosts:
options:
ssl: true
directConnection: false
ping: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"uri": "mongodb+srv://b*b%40f3tt%3D:%244to%40L8%3DMC@test3.test.build.10gen.cc/mydb%3F?replicaSet=repl0",
"seeds": [
"localhost.test.build.10gen.cc:27017"
],
"hosts": [
"localhost:27017",
"localhost:27018",
"localhost:27019"
],
"options": {
"replicaSet": "repl0",
"ssl": true
},
"parsed_options": {
"user": "b*b@f3tt=",
"password": "$4to@L8=MC",
"db": "mydb?"
},
"ping": false,
"comment": "Encoded user, pass, and DB parse correctly"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
uri: "mongodb+srv://b*b%40f3tt%3D:%244to%40L8%3DMC@test3.test.build.10gen.cc/mydb%3F?replicaSet=repl0"
seeds:
- localhost.test.build.10gen.cc:27017
hosts:
- localhost:27017
- localhost:27018
- localhost:27019
options:
replicaSet: repl0
ssl: true
parsed_options:
user: "b*b@f3tt="
password: "$4to@L8=MC"
db: "mydb?"
# Don't run a ping for URIs that include userinfo. Ping doesn't require authentication, so missing
# userinfo isn't a problem, but some drivers will fail handshake on a connection if userinfo is
# provided but incorrect.
ping: false
comment: Encoded user, pass, and DB parse correctly
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
"options": {
"loadBalanced": false,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ hosts:
options:
loadBalanced: false
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"replicaSet": "repl0",
"ssl": true
},
"ping": true,
"comment": "Is correct, as returned host name shared the URI root \"test.build.10gen.cc\"."
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ hosts:
options:
replicaSet: repl0
ssl: true
ping: true
comment: Is correct, as returned host name shared the URI root "test.build.10gen.cc".
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
"options": {
"replicaSet": "repl0",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ hosts:
options:
replicaSet: repl0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@
"options": {
"replicaSet": "repl0",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ hosts:
options:
replicaSet: repl0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"replicaSet": "repl0",
"authSource": "thisDB",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ options:
replicaSet: repl0
authSource: thisDB
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"options": {
"ssl": true,
"srvServiceName": "customname"
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ hosts:
options:
ssl: true
srvServiceName: "customname"
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
"options": {
"srvMaxHosts": 2,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ hosts:
options:
srvMaxHosts: 2
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"options": {
"srvMaxHosts": 3,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ hosts:
options:
srvMaxHosts: 3
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@
"options": {
"srvMaxHosts": 1,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ hosts:
options:
srvMaxHosts: 1
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
"replicaSet": "repl0",
"srvMaxHosts": 0,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ options:
replicaSet: repl0
srvMaxHosts: 0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@
"replicaSet": "repl0",
"srvMaxHosts": 0,
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ options:
replicaSet: repl0
srvMaxHosts: 0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"options": {
"replicaSet": "repl0",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ hosts:
options:
replicaSet: repl0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"options": {
"replicaSet": "repl0",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ hosts:
options:
replicaSet: repl0
ssl: true
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"replicaSet": "repl0",
"authSource": "thisDB",
"ssl": false
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ options:
replicaSet: repl0
authSource: thisDB
ssl: false
ping: true
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
"replicaSet": "repl0",
"authSource": "otherDB",
"ssl": true
}
},
"ping": true
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ options:
replicaSet: repl0
authSource: otherDB
ssl: true
ping: true
Loading