summaryrefslogtreecommitdiff
path: root/jstests/libs
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/libs')
-rw-r--r--jstests/libs/mongoebench.js49
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};
+})();