/** * Performs basic checks on the failpoint command. Also check * mongo/util/fail_point_test.cpp for unit tests. * * @param adminDB {DB} the admin database database object */ var runTest = function(adminDB) { /** * Checks whether the result object from the configureFailPoint command * matches what we expect. * * @param resultObj {Object} * @param expectedMode {Number} * @param expectedData {Object} */ var expectedFPState = function(resultObj, expectedMode, expectedData) { assert(resultObj.ok); assert.eq(expectedMode, resultObj.mode); // Valid only for 1 level field checks for (var field in expectedData) { assert.eq(expectedData[field], resultObj.data[field]); } for (field in resultObj.data) { assert.eq(expectedData[field], resultObj.data[field]); } }; expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 0, {}); // Test non-existing fail point assert.commandFailed(adminDB.runCommand({ configureFailPoint: 'fpNotExist', mode: 'alwaysOn', data: { x: 1 }})); // Test bad mode string assert.commandFailed(adminDB.runCommand({ configureFailPoint: 'dummy', mode: 'madMode', data: { x: 1 }})); expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 0, {}); // Test bad mode obj assert.commandFailed(adminDB.runCommand({ configureFailPoint: 'dummy', mode: { foo: 3 }, data: { x: 1 }})); expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 0, {}); // Test bad mode type assert.commandFailed(adminDB.runCommand({ configureFailPoint: 'dummy', mode: true, data: { x: 1 }})); expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 0, {}); // Test bad data type assert.commandFailed(adminDB.runCommand({ configureFailPoint: 'dummy', mode: 'alwaysOn', data: 'data'})); expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 0, {}); // Test good command w/ data assert.commandWorked(adminDB.runCommand({ configureFailPoint: 'dummy', mode: 'alwaysOn', data: { x: 1 }})); expectedFPState(adminDB.runCommand({ configureFailPoint: 'dummy' }), 1, { x: 1 }); }; var conn = MongoRunner.runMongod(); runTest(conn.getDB('admin')); MongoRunner.stopMongod(conn.port); /////////////////////////////////////////////////////////// // Test mongos var st = new ShardingTest({ shards: 1 }); runTest(st.s.getDB('admin')); st.stop();