fix(mongodb): replica set initialization & connection handling#2984
Merged
Conversation
✅ Deploy Preview for testcontainers-go ready!
To edit notification comments on pull requests, go to your Netlify site configuration. |
stevenh
requested changes
Feb 15, 2025
Contributor
stevenh
left a comment
There was a problem hiding this comment.
Thanks for the PR, here's some initial feedback.
stevenh
requested changes
Feb 16, 2025
Contributor
stevenh
left a comment
There was a problem hiding this comment.
Thanks for the updates, just done another quick pass.
mdelapenya
reviewed
Feb 17, 2025
Member
mdelapenya
left a comment
There was a problem hiding this comment.
I just left a few non-blocking comments. Will approve once discussed, thanks!
stevenh
requested changes
Feb 17, 2025
Contributor
stevenh
left a comment
There was a problem hiding this comment.
Sorry a little miss-understanding on a previous suggestion, should be good to go after this.
Co-authored-by: Steven Hartland <stevenmhartland@gmail.com>
Co-authored-by: Steven Hartland <stevenmhartland@gmail.com>
Co-authored-by: Steven Hartland <stevenmhartland@gmail.com>
Co-authored-by: Manuel de la Peña <social.mdelapenya@gmail.com>
Co-authored-by: Manuel de la Peña <social.mdelapenya@gmail.com>
Co-authored-by: Manuel de la Peña <social.mdelapenya@gmail.com>
Co-authored-by: Manuel de la Peña <social.mdelapenya@gmail.com>
Co-authored-by: Steven Hartland <stevenmhartland@gmail.com>
Co-authored-by: Steven Hartland <stevenmhartland@gmail.com>
7966110 to
37cb2c5
Compare
Contributor
|
@ttruongatl looks like the file needs a format, likely just a spacing change from one of my suggestions. |
Contributor
Author
|
@stevenh I've fixed the lint check issues. PTAL! Thank you. |
stevenh
previously approved these changes
Feb 18, 2025
mdelapenya
reviewed
Feb 25, 2025
…ialization-and-connection-handling
mdelapenya
reviewed
Mar 31, 2025
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 2, 2025
* main: fix(mongodb): replica set initialization & connection handling (testcontainers#2984)
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 3, 2025
* main: chore: bump golangci-lint to v2 (testcontainers#3082) chore(gcloud): deprecate old gcp containers, creating subpackages for them (testcontainers#3063) fix(mongodb): replica set initialization & connection handling (testcontainers#2984) chore(deps): bump docker/setup-docker-action from 4.2.0 to 4.3.0 (testcontainers#3077) chore(deps): bump github/codeql-action from 3.28.12 to 3.28.13 (testcontainers#3078) chore(deps): bump tj-actions/changed-files from 45.0.4 to 46.0.3 (testcontainers#3076) docs: add dependabot configuration (testcontainers#3074) chore(deps): replace `golang.org/x/exp/slices` with stdlib (testcontainers#3075) fix(dind): use docker image load (testcontainers#3073)
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 3, 2025
* main: fix(mssql): reduce flakiness in tests (testcontainers#3084) chore: bump golangci-lint to v2 (testcontainers#3082) chore(gcloud): deprecate old gcp containers, creating subpackages for them (testcontainers#3063) fix(mongodb): replica set initialization & connection handling (testcontainers#2984)
mdelapenya
added a commit
to mdelapenya/testcontainers-go
that referenced
this pull request
Apr 14, 2025
* main: (91 commits) chore(deps): bump github/codeql-action from 3.28.13 to 3.28.15 (testcontainers#3097) chore(deps): bump golang.org/x/crypto from 0.31.0 to 0.37.0 (testcontainers#3098) feat(aerospike): add Aerospike module (testcontainers#3094) security(compose): upgrade github.com/docker/compose/v2 to fix security vulnerability (testcontainers#3095) feat: add more functional options to the modules API (testcontainers#3070) chore(deps): bump golang.org/x/net in /modules/arangodb (testcontainers#3087) feat: add arangodb module (testcontainers#3083) chore(deps): bump actions/upload-artifact from 4.6.0 to 4.6.2 (testcontainers#3086) chore(deps): bump SonarSource/sonarqube-scan-action from 5.0.0 to 5.1.0 (testcontainers#3085) feat: add socat container (testcontainers#3071) fix(mssql): reduce flakiness in tests (testcontainers#3084) chore: bump golangci-lint to v2 (testcontainers#3082) chore(gcloud): deprecate old gcp containers, creating subpackages for them (testcontainers#3063) fix(mongodb): replica set initialization & connection handling (testcontainers#2984) chore(deps): bump docker/setup-docker-action from 4.2.0 to 4.3.0 (testcontainers#3077) chore(deps): bump github/codeql-action from 3.28.12 to 3.28.13 (testcontainers#3078) chore(deps): bump tj-actions/changed-files from 45.0.4 to 46.0.3 (testcontainers#3076) docs: add dependabot configuration (testcontainers#3074) chore(deps): replace `golang.org/x/exp/slices` with stdlib (testcontainers#3075) fix(dind): use docker image load (testcontainers#3073) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What does this PR do?
This PR addresses critical issues in the MongoDB container module regarding replica set initialization, host IP detection, and connection string formation. In addition, it expands test coverage by verifying change stream functionality when a replica set is configured.
Replica Set Initialization Reliability:
The previous implementation initialized the replica set using the container’s internal IP and a hardcoded port (27017). This approach caused issues when custom host port mappings were applied (e.g., mapping container port 27017 to host port 52120) because the advertised address was incorrect. Furthermore, the old code did not reliably wait for MongoDB to be fully ready before issuing the
rs.initiatecommand, leading to intermittent failures that went undetected by tests.This PR introduces a
waitForMongoReadyhelper, which waits for MongoDB’s readiness (using a ping command) before retrieving the host and mapped port and issuing the replica set initialization command with the correct values.Accurate Host IP Detection:
Previously, using Unix sockets defaulted to "localhost," which often broke replica set functionality since that address isn't externally reachable. This PR introduces a helper, getLocalNonLoopbackIP, to obtain a non-loopback IPv4 address—and if that fails, it falls back to "host.docker.internal"—ensuring the connection string advertises an externally accessible IP.
Enhanced Connection String Formation:
The
ConnectionStringmethod has been updated to dynamically build the connection URI. When a replica set is configured, it now appends the appropriate query parameter (e.g.,?replicaSet=rs0) so that clients can connect properly. Previously, the tests did not verify this because the connection string did not accurately reflect the replica set configuration.Expanded Testing with Change Streams:
The test suite has been extended to include change stream tests for containers configured with a replica set. If the connection string contains a replica set parameter, the tests now create a change stream on a collection, insert a document, and verify that the change event reflects an insert operation. This ensures that the replica set functionality is not only initialized correctly but also operational in terms of change stream processing.
Why is it important?
Without these enhancements, the replica set configuration might not work correctly—especially in CI or Docker host environments where custom port mappings are common. The shortcomings of the old code meant that, even though tests passed, the replica set functionality (and thus features like change streams) was not truly exercised. This PR improves reliability and test coverage, ensuring that integration tests can now fully validate replica set behavior.
How to test this PR: