summaryrefslogtreecommitdiff
path: root/jstests/core/profile4.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/profile4.js')
-rw-r--r--jstests/core/profile4.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/jstests/core/profile4.js b/jstests/core/profile4.js
new file mode 100644
index 00000000000..5b9a0a66be2
--- /dev/null
+++ b/jstests/core/profile4.js
@@ -0,0 +1,98 @@
+// Check debug information recorded for a query.
+
+// special db so that it can be run in parallel tests
+var stddb = db;
+var db = db.getSisterDB("profile4");
+
+db.dropAllUsers();
+t = db.profile4;
+t.drop();
+
+function profileCursor() {
+ return db.system.profile.find( { user:username + "@" + db.getName() } );
+}
+
+function lastOp() {
+ p = profileCursor().sort( { $natural:-1 } ).next();
+// printjson( p );
+ return p;
+}
+
+function checkLastOp( spec ) {
+ p = lastOp();
+ for( i in spec ) {
+ s = spec[ i ];
+ assert.eq( s[ 1 ], p[ s[ 0 ] ], s[ 0 ] );
+ }
+}
+
+try {
+ username = "jstests_profile4_user";
+ db.createUser({user: username, pwd: "password", roles: jsTest.basicUserRoles});
+ db.auth( username, "password" );
+
+ db.setProfilingLevel(0);
+
+ db.system.profile.drop();
+ assert.eq( 0 , profileCursor().count() )
+
+ db.setProfilingLevel(2);
+
+ t.find().itcount();
+ checkLastOp( [ [ "op", "query" ],
+ [ "ns", "profile4.profile4" ],
+ [ "query", {} ],
+ [ "ntoreturn", 0 ],
+ [ "ntoskip", 0 ],
+ [ "nscanned", 0 ],
+ [ "keyUpdates", 0 ],
+ [ "nreturned", 0 ],
+ [ "responseLength", 20 ] ] );
+
+ t.save( {} );
+
+ // check write lock stats are set
+ o = lastOp();
+ assert.eq('insert', o.op);
+ assert.eq( 0, o.lockStats.timeLockedMicros.r );
+ assert.lt( 0, o.lockStats.timeLockedMicros.w );
+ assert.eq( 0, o.lockStats.timeAcquiringMicros.r );
+ //assert.lt( 0, o.lockStats.timeAcquiringMicros.w ); // Removed due to SERVER-8331
+
+ // check read lock stats are set
+ t.find();
+ o = lastOp();
+ assert.eq('query', o.op);
+ assert.lt( 0, o.lockStats.timeLockedMicros.r );
+ assert.eq( 0, o.lockStats.timeLockedMicros.w );
+ //assert.lt( 0, o.lockStats.timeAcquiringMicros.r ); // Removed due to SERVER-8331
+ //assert.lt( 0, o.lockStats.timeAcquiringMicros.w ); // Removed due to SERVER-8331
+
+ t.save( {} );
+ t.save( {} );
+ t.find().skip( 1 ).limit( 4 ).itcount();
+ checkLastOp( [ [ "ntoreturn", 4 ],
+ [ "ntoskip", 1 ],
+ [ "nscanned", 3 ],
+ [ "nreturned", 2 ] ] );
+
+ t.find().batchSize( 2 ).next();
+ o = lastOp();
+ assert.lt( 0, o.cursorid );
+
+ t.find( {a:1} ).itcount();
+ checkLastOp( [ [ "query", {a:1} ] ] );
+
+ t.find( {_id:0} ).itcount();
+ checkLastOp( [ [ "idhack", true ] ] );
+
+ t.find().sort( {a:1} ).itcount();
+ checkLastOp( [ [ "scanAndOrder", true ] ] );
+
+ db.setProfilingLevel(0);
+ db.system.profile.drop();
+}
+finally {
+ db.setProfilingLevel(0);
+ db = stddb;
+}