dockertest
dockertest copied to clipboard
Create an example for starting mongodb as a replica set
Preflight checklist
- [X] I could not find a solution in the existing issues, docs, nor discussions.
- [X] I agree to follow this project's Code of Conduct.
- [X] I have read and am following this repository's Contribution Guidelines.
- [ ] I have joined the Ory Community Slack.
- [ ] I am signed up to the Ory Security Patch Newsletter.
Ory Network Project
No response
Describe your problem
I use dockertest/v3
extensively in my testing of api servers in go
.
I am getting to the point where I want to do more interesting things the backing mongodb
database (e.g. change streams, transactions) and still would like to containerize the mongo
instance for tests. I feel like I'm close to figuring this out but I'd like to successfully run rs.initiate()
inside the mongodb
container after creating the test resource, but have been running into issues successfully using the resource.Exec
function.
Describe your ideal solution
Spin up a mongodb
container, programmatically in go
, with replica set configuration and execute the rs.initiate()
command so that the repl set is connectable in code. Was hoping something like this would work:
.Exec([]string{`echo "rs.initiate().ok || rs.status().ok" | mongo`}
Workarounds or alternatives
While troubleshooting, I have tried removing the "pipe to mongo shell" at first with no success, so I think I am just going about resource.Exec
incorrectly here.
When calling: .Exec([]string{
echo "rs.initiate().ok || rs.status().ok"}
, I see output:
OCI runtime exec failed: exec failed: unable to start container process: exec: "echo \"rs.initiate().ok || rs.status().ok\"": executable file not found in $PATH: unknown
When adding "/bin/bash"
in front: Exec([]string{"/bin/bash",
echo "rs.initiate().ok || rs.status().ok"}
:
/bin/bash: echo "rs.initiate().ok || rs.status().ok": No such file or directory
Version
github.com/ory/dockertest/v3 v3.10.0
Additional Context
No response
Updated context: when originally posting this, I ran with the options:
var out bytes.Buffer
dockertest.ExecOptions{
StdOut: &out,
StdErr: &out,
}
I have since tried adding TTY: true
and see a new error:
Start exec failed: Unrecognized input header: 47
Again, I feel I am close here, just missing probably one or two (obvious) things here
I am trying to initialize a replica set for testing, too. Does anyone have a good solution?
IIRC, --keyFile
also is needed to specify with a replica set together.
- https://www.mongodb.com/docs/manual/reference/program/mongod/#std-option-mongod.--keyFile