-
Type: Epic
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
To Do
-
Implement All Spec Tests
Motivation
The C++ driver has historically chosen not to implement all spec tests, and instead rely on the C driver's existing testing. However, there is value in implementing all spec tests, even if there is a bit of redundancy.
- It's not always clear which tests are implemented and why. In general the C++ driver relies on the C driver for much of the behavior, but there are exceptions (e.g. GridFS). By implementing all test runners, there'd be no question about which specification tests to run.
- Swift has caught bugs / unexpected behavior in libmongoc when implementing spec tests (e.g. CDRIVER-3130, CDRIVER-3147)
- If the C++ driver does in the future remove the dependency of libbson/libmongoc, the testing will already be in place to enable such a transition.
Scope
Implement test runners for the following spec tests (specifications directory/file in parenthesis):
- Auth tests (source/auth/tests)
- BSON corpus tests (source/bson-corpus/tests)
- Causal consistency prose tests (causal-consistency/causal-consistency.rst)
- Connection string (source/connection-string)
- Connections survive step down (source/connections-survive-step-down/tests)
- Initial DNS seedlist discovery (source/initial-dns-seedlist-discovery/tests)
- Max staleness (source/max-staleness/tests)
- OCSP (source/ocsp-support/tests)
- Retryable writes (source/retryable-writes/tests)
- Server discovery and monitoring (source/server-discovery-and-monitoring/tests)
- Server selection (source/server-selection/tests)
- Sessions (source/sessions/tests)
- URI options (source/uri-options/tests)
It may be best to wait until the Unified Test Format project is complete, as that may simplify many of the existing test formats.