Skip to content

test(NODE-3710): sync max srv hosts tests #3015

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

Merged
merged 3 commits into from
Oct 26, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 78 additions & 46 deletions test/spec/initial-dns-seedlist-discovery/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,20 @@ Test Setup

The tests in the ``replica-set`` directory MUST be executed against a
three-node replica set on localhost ports 27017, 27018, and 27019 with
replica set name ``repl0``. The tests in ``load-balanced`` MUST be executed
against a load-balanced sharded cluster with the mongos servers running on
localhost ports 27017 and 27018 and load balancers, shard servers, and config
servers running on any open ports. In both cases, the clusters MUST be
started with SSL enabled.
replica set name ``repl0``.

The tests in the ``load-balanced`` directory MUST be executed against a
load-balanced sharded cluster with the mongos servers running on localhost ports
27017 and 27018 (corresponding to the script in `drivers-evergreen-tools`_). The
load balancers, shard servers, and config servers may run on any open ports.

.. _`drivers-evergreen-tools`: https://github.com/mongodb-labs/drivers-evergreen-tools/blob/master/.evergreen/run-load-balancer.sh

The tests in the ``sharded`` directory MUST be executed against a sharded
cluster with the mongos servers running on localhost ports 27017 and 27018.
Shard servers and config servers may run on any open ports.

In all cases, the clusters MUST be started with SSL enabled.

To run the tests that accompany this spec, you need to configure the SRV and
TXT records with a real name server. The following records are required for
Expand All @@ -24,29 +33,30 @@ these tests::
localhost.test.build.10gen.cc. 86400 IN A 127.0.0.1
localhost.sub.test.build.10gen.cc. 86400 IN A 127.0.0.1

Record TTL Class Port Target
_mongodb._tcp.test1.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test1.test.build.10gen.cc. 86400 IN SRV 27018 localhost.test.build.10gen.cc.
_mongodb._tcp.test2.test.build.10gen.cc. 86400 IN SRV 27018 localhost.test.build.10gen.cc.
_mongodb._tcp.test2.test.build.10gen.cc. 86400 IN SRV 27019 localhost.test.build.10gen.cc.
_mongodb._tcp.test3.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test5.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test6.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test7.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test8.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test10.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test11.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test12.test.build.10gen.cc. 86400 IN SRV 27017 localhost.build.10gen.cc.
_mongodb._tcp.test13.test.build.10gen.cc. 86400 IN SRV 27017 test.build.10gen.cc.
_mongodb._tcp.test14.test.build.10gen.cc. 86400 IN SRV 27017 localhost.not-test.build.10gen.cc.
_mongodb._tcp.test15.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.not-build.10gen.cc.
_mongodb._tcp.test16.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.not-10gen.cc.
_mongodb._tcp.test17.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.not-cc.
_mongodb._tcp.test18.test.build.10gen.cc. 86400 IN SRV 27017 localhost.sub.test.build.10gen.cc.
_mongodb._tcp.test19.test.build.10gen.cc. 86400 IN SRV 27017 localhost.evil.build.10gen.cc.
_mongodb._tcp.test19.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test20.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test21.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
Record TTL Class Port Target
_mongodb._tcp.test1.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test1.test.build.10gen.cc. 86400 IN SRV 27018 localhost.test.build.10gen.cc.
_mongodb._tcp.test2.test.build.10gen.cc. 86400 IN SRV 27018 localhost.test.build.10gen.cc.
_mongodb._tcp.test2.test.build.10gen.cc. 86400 IN SRV 27019 localhost.test.build.10gen.cc.
_mongodb._tcp.test3.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test5.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test6.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test7.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test8.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test10.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test11.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test12.test.build.10gen.cc. 86400 IN SRV 27017 localhost.build.10gen.cc.
_mongodb._tcp.test13.test.build.10gen.cc. 86400 IN SRV 27017 test.build.10gen.cc.
_mongodb._tcp.test14.test.build.10gen.cc. 86400 IN SRV 27017 localhost.not-test.build.10gen.cc.
_mongodb._tcp.test15.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.not-build.10gen.cc.
_mongodb._tcp.test16.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.not-10gen.cc.
_mongodb._tcp.test17.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.not-cc.
_mongodb._tcp.test18.test.build.10gen.cc. 86400 IN SRV 27017 localhost.sub.test.build.10gen.cc.
_mongodb._tcp.test19.test.build.10gen.cc. 86400 IN SRV 27017 localhost.evil.build.10gen.cc.
_mongodb._tcp.test19.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test20.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_mongodb._tcp.test21.test.build.10gen.cc. 86400 IN SRV 27017 localhost.test.build.10gen.cc.
_customname._tcp.test22.test.build.10gen.cc 86400 IN SRV 27017 localhost.test.build.10gen.cc

Record TTL Class Text
test5.test.build.10gen.cc. 86400 IN TXT "replicaSet=repl0&authSource=thisDB"
Expand All @@ -62,7 +72,8 @@ these tests::
Note that ``test4`` is omitted deliberately to test what happens with no SRV
record. ``test9`` is missing because it was deleted during the development of
the tests. The missing ``test.`` sub-domain in the SRV record target for
``test12`` is deliberate.
``test12`` is deliberate. ``test22`` is used to test a custom service name
(``customname``).

In our tests we have used ``localhost.test.build.10gen.cc`` as the domain, and
then configured ``localhost.test.build.10gen.cc`` to resolve to 127.0.0.1.
Expand All @@ -76,28 +87,49 @@ Test Format and Use

These YAML and JSON files contain the following fields:

- ``uri``: a mongodb+srv connection string
- ``uri``: a ``mongodb+srv`` connection string
- ``seeds``: the expected set of initial seeds discovered from the SRV record
- ``numSeeds``: the expected number of initial seeds discovered from the SRV
record. This is mainly used to test ``srvMaxHosts``, since randomly selected
hosts cannot be deterministically asserted.
- ``hosts``: the discovered topology's list of hosts once SDAM completes a scan
- ``options``: the parsed connection string options as discovered from URI and
TXT records
- ``parsed_options``: additional options present in the `Connection String`_
URI such as ``Userinfo`` (as ``user`` and ``password``), and ``Auth
database`` (as ``auth_database``).
- ``numHosts``: the expected number of hosts discovered once SDAM completes a
scan. This is mainly used to test ``srvMaxHosts``, since randomly selected
hosts cannot be deterministically asserted.
- ``options``: the parsed `URI options`_ as discovered from the
`Connection String`_'s "Connection Options" component and SRV resolution
(e.g. TXT records, implicit ``tls`` default).
- ``parsed_options``: additional, parsed options from other `Connection String`_
components. This is mainly used for asserting ``UserInfo`` (as ``user`` and
``password``) and ``Auth database`` (as ``auth_database``).
- ``error``: indicates that the parsing of the URI, or the resolving or
contents of the SRV or TXT records included errors.
- ``comment``: a comment to indicate why a test would fail.

.. _`Connection String`: ../../connection-string/connection-string-spec.rst
.. _`URI options`: ../../uri-options/uri-options.rst

For each file, create a MongoClient initialized with the ``mongodb+srv``
connection string.

If ``seeds`` is specified, drivers SHOULD verify that the set of hosts in the
client's initial seedlist matches the list in ``seeds``. If ``numSeeds`` is
specified, drivers SHOULD verify that the size of that set matches ``numSeeds``.

If ``hosts`` is specified, drivers MUST verify that the set of
ServerDescriptions in the client's TopologyDescription eventually matches the
list in ``hosts``. If ``numHosts`` is specified, drivers MUST verify that the
size of that set matches ``numHosts``.

If ``options`` is specified, drivers MUST verify each of the values under
``options`` match the MongoClient's parsed value for that option. There may be
other options parsed by the MongoClient as well, which a test does not verify.

If ``parsed_options`` is specified, drivers MUST verify that each of the values
under ``parsed_options`` match the MongoClient's parsed value for that option.
Supported values include, but are not limited to, ``user`` and ``password``
(parsed from ``UserInfo``) and ``auth_database`` (parsed from
``Auth database``).

For each file, create MongoClient initialized with the mongodb+srv connection
string. You SHOULD verify that the client's initial seed list matches the list of
seeds. You MUST verify that the set of ServerDescriptions in the client's
TopologyDescription eventually matches the list of hosts. You MUST verify that
each of the values of the Connection String Options under ``options`` match the
Client's parsed value for that option. There may be other options parsed by
the Client as well, which a test does not verify. In ``uri-with-auth`` the URI
contains a user/password set and additional options are provided in
``parsed_options`` so that tests can verify authentication is maintained when
evaluating URIs. You MUST verify that an error has been thrown if ``error`` is
present.
If ``error`` is specified and ``true``, drivers MUST verify that an error has
been thrown.

This file was deleted.

13 changes: 0 additions & 13 deletions test/spec/initial-dns-seedlist-discovery/dbname-with-commas.yml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"uri": "mongodb+srv://test20.test.build.10gen.cc/?directConnection=false",
"seeds": [
"localhost.test.build.10gen.cc:27017"
],
"hosts": [
"localhost.test.build.10gen.cc:27017"
],
"options": {
"loadBalanced": true,
"ssl": true,
"directConnection": false
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# The TXT record for test20.test.build.10gen.cc contains loadBalanced=true.
# DRIVERS-1721 introduced this test as passing.
uri: "mongodb+srv://test20.test.build.10gen.cc/?directConnection=false"
seeds:
- localhost.test.build.10gen.cc:27017
hosts:
# In LB mode, the driver does not do server discovery, so the hostname does
# not get resolved to localhost:27017.
- localhost.test.build.10gen.cc:27017
options:
loadBalanced: true
ssl: true
directConnection: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"uri": "mongodb+srv://test4.test.build.10gen.cc/?loadBalanced=true",
"seeds": [],
"hosts": [],
"error": true,
"comment": "Should fail because no SRV records are present for this URI."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
uri: "mongodb+srv://test4.test.build.10gen.cc/?loadBalanced=true"
seeds: []
hosts: []
error: true
comment: Should fail because no SRV records are present for this URI.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"uri": "mongodb+srv://test20.test.build.10gen.cc/?srvMaxHosts=1",
"seeds": [],
"hosts": [],
"error": true,
"comment": "Should fail because positive integer for srvMaxHosts conflicts with loadBalanced=true (TXT)"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
uri: "mongodb+srv://test20.test.build.10gen.cc/?srvMaxHosts=1"
seeds: []
hosts: []
error: true
comment: Should fail because positive integer for srvMaxHosts conflicts with loadBalanced=true (TXT)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"uri": "mongodb+srv://test3.test.build.10gen.cc/?loadBalanced=true&srvMaxHosts=1",
"seeds": [],
"hosts": [],
"error": true,
"comment": "Should fail because positive integer for srvMaxHosts conflicts with loadBalanced=true"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
uri: "mongodb+srv://test3.test.build.10gen.cc/?loadBalanced=true&srvMaxHosts=1"
seeds: []
hosts: []
error: true
comment: Should fail because positive integer for srvMaxHosts conflicts with loadBalanced=true
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"uri": "mongodb+srv://test20.test.build.10gen.cc/?srvMaxHosts=0",
"seeds": [
"localhost.test.build.10gen.cc:27017"
],
"hosts": [
"localhost.test.build.10gen.cc:27017"
],
"options": {
"loadBalanced": true,
"srvMaxHosts": 0,
"ssl": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# loadBalanced=true (TXT) is permitted because srvMaxHosts is non-positive
uri: "mongodb+srv://test20.test.build.10gen.cc/?srvMaxHosts=0"
seeds:
- localhost.test.build.10gen.cc:27017
hosts:
- localhost.test.build.10gen.cc:27017
options:
loadBalanced: true
srvMaxHosts: 0
ssl: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"uri": "mongodb+srv://test3.test.build.10gen.cc/?loadBalanced=true&srvMaxHosts=0",
"seeds": [
"localhost.test.build.10gen.cc:27017"
],
"hosts": [
"localhost.test.build.10gen.cc:27017"
],
"options": {
"loadBalanced": true,
"srvMaxHosts": 0,
"ssl": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# loadBalanced=true is permitted because srvMaxHosts is non-positive
uri: "mongodb+srv://test3.test.build.10gen.cc/?loadBalanced=true&srvMaxHosts=0"
seeds:
- localhost.test.build.10gen.cc:27017
hosts:
- localhost.test.build.10gen.cc:27017
options:
loadBalanced: true
srvMaxHosts: 0
ssl: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"uri": "mongodb+srv://test21.test.build.10gen.cc/",
"seeds": [
"localhost.test.build.10gen.cc:27017"
],
"hosts": [
"localhost:27017",
"localhost:27018",
"localhost:27019"
],
"options": {
"loadBalanced": false,
"ssl": true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
uri: "mongodb+srv://test21.test.build.10gen.cc/"
seeds:
- localhost.test.build.10gen.cc:27017
hosts:
- localhost:27017
- localhost:27018
- localhost:27019
options:
loadBalanced: false
ssl: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"uri": "mongodb+srv://test22.test.build.10gen.cc/?srvServiceName=customname",
"seeds": [
"localhost.test.build.10gen.cc:27017",
"localhost.test.build.10gen.cc:27018"
],
"hosts": [
"localhost:27017",
"localhost:27018",
"localhost:27019"
],
"options": {
"ssl": true,
"srvServiceName": "customname"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
uri: "mongodb+srv://test22.test.build.10gen.cc/?srvServiceName=customname"
seeds:
- localhost.test.build.10gen.cc:27017
- localhost.test.build.10gen.cc:27018
hosts:
- localhost:27017
- localhost:27018
- localhost:27019
options:
ssl: true
srvServiceName: "customname"
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"uri": "mongodb+srv://test5.test.build.10gen.cc/?srvMaxHosts=1",
"seeds": [],
"hosts": [],
"error": true,
"comment": "Should fail because positive integer for srvMaxHosts conflicts with replicaSet option (TXT)"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
uri: "mongodb+srv://test5.test.build.10gen.cc/?srvMaxHosts=1"
seeds: []
hosts: []
error: true
comment: Should fail because positive integer for srvMaxHosts conflicts with replicaSet option (TXT)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"uri": "mongodb+srv://test1.test.build.10gen.cc/?replicaSet=repl0&srvMaxHosts=1",
"seeds": [],
"hosts": [],
"error": true,
"comment": "Should fail because positive integer for srvMaxHosts conflicts with replicaSet option"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
uri: "mongodb+srv://test1.test.build.10gen.cc/?replicaSet=repl0&srvMaxHosts=1"
seeds: []
hosts: []
error: true
comment: Should fail because positive integer for srvMaxHosts conflicts with replicaSet option
Loading