5.4 KiB
Resmoke
Resmoke is MongoDB's integration test runner.
The JS Tests it can run live in the jstests/ directory - reference its
README to learn about their content.
Build
Though the source is built with bazel, resmoke is not yet integrated. This means that the source has to be built prior to using resmoke, eg:
bazel build install-dist-test
Actions
run Runs the specified tests.
list-suites Lists the names of the suites available to execute.
generate-matrix-suites
Generate matrix suite config files from the mapping files.
find-suites Lists the names of the suites that will execute the specified tests.
list-tags Lists the tags and their documentation available in the suites.
generate-multiversion-exclude-tags
Create a tag file associating multiversion tests to tags for exclusion. Compares the BACKPORTS_REQUIRED_FILE on the current branch with the same file on the last-lts and/or last-continuous branch to determine which tests should be
denylisted.
core-analyzer Analyzes the core dumps from the specified input files.
hang-analyzer Hang Analyzer module. A prototype hang analyzer for Evergreen integration to help investigate test timeouts 1. Script supports taking dumps, and/or dumping a summary of useful information about a process 2. Script will iterate
through a list of interesting processes, and run the tools from step 1. The list of processes can be provided as an option. 3. Java processes will be dumped using jstack, if available. Supports Linux, MacOS X, and Windows.
powercycle Powercycle test. Tests robustness of mongod to survive multiple powercycle events. Client & server side powercycle test script. This script is used in conjunction with certain Evergreen hosts created with the `evergreen host
create` command.
generate-fcv-constants
==SUPPRESS==
test-discovery Discover what tests are run by a suite.
suiteconfig Display configuration of a test suite.
multiversion-config
Display configuration for multiversion testing
generate-fuzz-config
Generate a mongod.conf and mongos.conf using config fuzzer.
Note: bisect, setup-multiversion, and symbolize commands have been moved to
db-contrib-tool.
Suites
Many of the above commands use the concept of a "suite". Loosely, suites group which tests run, and how.
Read more about suites here.
run
The run command is the most used feature of resmoke.
The most typical approach is to run a particular JS test file given a suite, eg:
buildscripts/resmoke.py run --suites=no_passthrough jstests/noPassthrough/shell/js/string.js
That executes the content of that file, using the suite configuration as a fixture setup. The suite "no_passthrough" is associated with the file buildscripts/resmokeconfig/suites/no_passthrough.yml.
Run has 100+ flags! Use resmoke run --help to inspect them. To avoid risk of multiple sources
of truth that can drift and become stale, we do not attempt to document them all here - they
should each be self-descriptive and documented within the CLI help.
Below are very high-level descriptions for high-usage flags.
Suites (--suites)
The run subcommand can run suites (list of tests and the MongoDB topology and configuration to run them against), and explicitly named test files.
A single suite can be specified using the --suite flag, and multiple suites can be specified by
providing a comma separated list to the --suites flag.
Additional documentation on our suite configuration can be found in buildscripts/resmokeconfig/suites/README.md.
Testable Installations (--installDir)
resmoke can run tests against any testable installation of MongoDB (such as ASAN, Debug, Release).
When possible, resmoke will automatically locate and run with a locally built copy of MongoDB
Server, so long as that build was installed to a subdirectory of the root of the git repository, and
there is exactly one build. In other situations, the --installDir flag, passed to run subcommand,
can be used to indicate the location of the mongod/mongos binaries.
As an alternative, you may instead prefer to use the resmoke.py wrapper script located in the same
directory as the mongod binary, which will automatically set installDir for you.
Note that this wrapper is unavailable in packaged installations of MongoDB Server, such as those
provided by Homebrew, and other package managers. If you would like to run tests against a packaged
installation, you must explicitly pass --installDir to resmoke.py
Resmoke test telemetry
We capture telemetry from resmoke using open telemetry.
Using open telemetry (OTel) we capture more specific information about the internals of resmoke. This data is used for improvements specifically when running in evergreen. This data is captured on every resmoke invocation but only sent to honeycomb when running in evergreen. More info about how we use OTel in resmoke can be found here.