diff options
Diffstat (limited to 'jstests/libs')
-rw-r--r-- | jstests/libs/mongoebench.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/jstests/libs/mongoebench.js b/jstests/libs/mongoebench.js new file mode 100644 index 00000000000..f6feb4eb9f0 --- /dev/null +++ b/jstests/libs/mongoebench.js @@ -0,0 +1,49 @@ +"use strict"; + +var {runMongoeBench} = (function() { + + /** + * Spawns a mongoebench process with the specified options. + * + * If a plain JavaScript object is specified as the 'config' parameter, then it is serialized to + * a file as a JSON string which is then specified as the config file for the mongoebench + * process. + */ + function runMongoeBench(config, options = {}) { + const args = ["mongoebench"]; + + if (typeof config === "object") { + const filename = MongoRunner.dataPath + "mongoebench_config.json"; + writeFile(filename, tojson(config)); + args.push(filename); + } else if (typeof config === "string") { + args.push(config); + } else { + throw new Error("'config' parameter must be a string or an object"); + } + + if (!options.hasOwnProperty("dbpath")) { + options.dbpath = MongoRunner.dataDir; + } + + for (let key of Object.keys(options)) { + const value = options[key]; + if (value === null || value === undefined) { + throw new Error( + "Value '" + value + "' for '" + key + + "' option is ambiguous; specify {flag: ''} to add --flag command line" + + " options'"); + } + + args.push("--" + key); + if (value !== "") { + args.push(value.toString()); + } + } + + const exitCode = _runMongoProgram(...args); + assert.eq(0, exitCode, "encountered an error in mongoebench"); + } + + return {runMongoeBench}; +})(); |