summaryrefslogtreecommitdiff
path: root/jstests/core/evalb.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/evalb.js')
-rw-r--r--jstests/core/evalb.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/jstests/core/evalb.js b/jstests/core/evalb.js
new file mode 100644
index 00000000000..0caae39498b
--- /dev/null
+++ b/jstests/core/evalb.js
@@ -0,0 +1,40 @@
+// Check the return value of a db.eval function running a database query, and ensure the function's
+// contents are logged in the profile log.
+
+// Use a reserved database name to avoid a conflict in the parallel test suite.
+var stddb = db;
+var db = db.getSisterDB( 'evalb' );
+
+function profileCursor() {
+ return db.system.profile.find( { user:username + "@" + db.getName() } );
+}
+
+function lastOp() {
+ return profileCursor().sort( { $natural:-1 } ).next();
+}
+
+try {
+
+ username = 'jstests_evalb_user';
+ db.createUser({user: username, pwd: 'password', roles: jsTest.basicUserRoles});
+ db.auth( username, 'password' );
+
+ t = db.evalb;
+ t.drop();
+
+ t.save( { x:3 } );
+
+ assert.eq( 3, db.eval( function() { return db.evalb.findOne().x; } ), 'A' );
+
+ db.setProfilingLevel( 2 );
+
+ assert.eq( 3, db.eval( function() { return db.evalb.findOne().x; } ), 'B' );
+
+ o = lastOp();
+ assert( tojson( o ).indexOf( 'findOne().x' ) > 0, 'C : ' + tojson( o ) );
+}
+finally {
+
+ db.setProfilingLevel(0);
+ db = stddb;
+}