From 86e03b75018ec6dd9e17b14d680aac2b06b250fe Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 18 Feb 2015 09:34:10 +0000 Subject: [PATCH 1/4] add function to measure event loop run times --- node_modules/c9/blocked.js | 16 ++++++++ node_modules/c9/blocked_test.js | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 node_modules/c9/blocked.js create mode 100644 node_modules/c9/blocked_test.js diff --git a/node_modules/c9/blocked.js b/node_modules/c9/blocked.js new file mode 100644 index 00000000..14e760fb --- /dev/null +++ b/node_modules/c9/blocked.js @@ -0,0 +1,16 @@ +// module.exports = function (callback) { +// var start = Date.now(); +// setImmediate(function () { +// var took = Date.now() - start; +// return callback(null, took); +// }, 0); +// }; +module.exports = function (callback) { + var start = Date.now(); + // setInterval is handled after setImmediate and setTimeout handlers + var interval = setTimeout(function () { + clearInterval(interval); + var took = Date.now() - start; + return callback(null, took); + }, 0); +}; \ No newline at end of file diff --git a/node_modules/c9/blocked_test.js b/node_modules/c9/blocked_test.js new file mode 100644 index 00000000..63896960 --- /dev/null +++ b/node_modules/c9/blocked_test.js @@ -0,0 +1,65 @@ +"use strict"; +"use server"; + +var assert = require("assert"); +var blocked = require("./blocked"); + +module.exports = { + + "test normal run should return low blocked time": function(next) { + blocked(function(err, time) { + assert(!err, err); + assert(time < 10); + next(); + }); + }, + "test busy loop should report high blocked time": function(next) { + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + + var start = Date.now(); + while (Date.now() - start < 100) {} + }, + "test busy loop in setTimeout should report high blocked time": function(next) { + setTimeout(function() { + var start = Date.now(); + while (Date.now() - start < 100) {} + }, 0); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + }, + "test busy loop in setInterval should report high blocked time": function(next) { + var interval = setInterval(function() { + clearInterval(interval); + var start = Date.now(); + while (Date.now() - start < 100) {} + }); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + }, + "test busy loop in setImmediate should report high blocked time": function(next) { + setImmediate(function() { + var start = Date.now(); + while (Date.now() - start < 100) {} + }); + + blocked(function(err, time) { + assert(!err, err); + assert(time >= 100); + next(); + }); + } +}; + +!module.parent && require("asyncjs").test.testcase(module.exports).exec(); \ No newline at end of file From e2b9e86fecbd401dae066890f57a541c682b441b Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 18 Feb 2015 09:34:26 +0000 Subject: [PATCH 2/4] cleanup --- node_modules/c9/git_test.js | 4 ++-- node_modules/c9/passcrypt_test.js | 24 +++--------------------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/node_modules/c9/git_test.js b/node_modules/c9/git_test.js index 690eb76e..fae73a2b 100644 --- a/node_modules/c9/git_test.js +++ b/node_modules/c9/git_test.js @@ -58,7 +58,7 @@ module.exports = { }, "test get head revision sync": function(next) { - var rev = git.getHeadRevisionSync(__dirname + "/../"); + var rev = git.getHeadRevisionSync(__dirname + "/../../"); assert.equal(rev.length, 40); next(); @@ -70,6 +70,6 @@ module.exports = { next(); }); } -} +}; !module.parent && require("asyncjs").test.testcase(module.exports).exec(); diff --git a/node_modules/c9/passcrypt_test.js b/node_modules/c9/passcrypt_test.js index d1dabfbc..d373e9d8 100644 --- a/node_modules/c9/passcrypt_test.js +++ b/node_modules/c9/passcrypt_test.js @@ -1,30 +1,14 @@ /*global describe it before after beforeEach afterEach define*/ "use strict"; -"use client"; "use server"; "use mocha"; -// Test flags -// -// "use root"; the unit test will be executed as root (using sudo); use with care! (ex. back-up / restore tests) -// "use non-osx"; test will be skipped if the operating system is Mac OS -// "use server"; tests are supposed to run on server-side (either with node or mocha) -// "use client"; tests are run by means of Selenium on client side -// "use mocha"; tests can be run by mocha or by node; this label indicates needs be run using mocha. +require("c9/inline-mocha")(module); -if (typeof define === "undefined") { - require("c9/inline-mocha")(module); - require("amd-loader"); - require("../../test/setup_paths"); -} - -define(function(require, exports, module) { - -var assert = require("ace/test/assertions"); +var assert = require("assert"); var passcrypt = require('./passcrypt'); var bcrypt = require('bcrypt'); - describe("c9/passcrypt", function(){ this.timeout(2000); @@ -78,6 +62,4 @@ describe("c9/passcrypt", function(){ }); }); -if (typeof onload !== "undefined") - onload(); -}); +if (typeof onload !== "undefined") onload(); From 8635ad355753100afcd2b862e72a21b0f53a9d0d Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 18 Feb 2015 11:43:43 +0000 Subject: [PATCH 3/4] add event loop and gc monitoring --- node_modules/c9/blocked.js | 9 +-------- node_modules/c9/blocked_test.js | 15 +++++---------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/node_modules/c9/blocked.js b/node_modules/c9/blocked.js index 14e760fb..fcb1e2f7 100644 --- a/node_modules/c9/blocked.js +++ b/node_modules/c9/blocked.js @@ -1,16 +1,9 @@ -// module.exports = function (callback) { -// var start = Date.now(); -// setImmediate(function () { -// var took = Date.now() - start; -// return callback(null, took); -// }, 0); -// }; module.exports = function (callback) { var start = Date.now(); // setInterval is handled after setImmediate and setTimeout handlers var interval = setTimeout(function () { clearInterval(interval); var took = Date.now() - start; - return callback(null, took); + return callback(took); }, 0); }; \ No newline at end of file diff --git a/node_modules/c9/blocked_test.js b/node_modules/c9/blocked_test.js index 63896960..108325d1 100644 --- a/node_modules/c9/blocked_test.js +++ b/node_modules/c9/blocked_test.js @@ -7,15 +7,13 @@ var blocked = require("./blocked"); module.exports = { "test normal run should return low blocked time": function(next) { - blocked(function(err, time) { - assert(!err, err); + blocked(function(time) { assert(time < 10); next(); }); }, "test busy loop should report high blocked time": function(next) { - blocked(function(err, time) { - assert(!err, err); + blocked(function(time) { assert(time >= 100); next(); }); @@ -29,8 +27,7 @@ module.exports = { while (Date.now() - start < 100) {} }, 0); - blocked(function(err, time) { - assert(!err, err); + blocked(function(time) { assert(time >= 100); next(); }); @@ -42,8 +39,7 @@ module.exports = { while (Date.now() - start < 100) {} }); - blocked(function(err, time) { - assert(!err, err); + blocked(function(time) { assert(time >= 100); next(); }); @@ -54,8 +50,7 @@ module.exports = { while (Date.now() - start < 100) {} }); - blocked(function(err, time) { - assert(!err, err); + blocked(function(time) { assert(time >= 100); next(); }); From 94c3148eaaf06639539eb9d102bf7e68a2f4b95c Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Wed, 18 Feb 2015 15:33:05 +0000 Subject: [PATCH 4/4] fix unit test --- scripts/makestatic.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/scripts/makestatic.js b/scripts/makestatic.js index c3d5344d..ea4370c1 100755 --- a/scripts/makestatic.js +++ b/scripts/makestatic.js @@ -67,18 +67,24 @@ function main(config, settings, options, callback) { compress: options.compress, virtual: options.virtual }) - .concat({ - consumes: [], - provides: ["cdn.build", "db"], - setup: function(options, imports, register) { - register(null, { "cdn.build": {}, "db": {} }); - } - }) .filter(function(p) { var path = p.packagePath; return !path || path.indexOf("c9.db.redis/redis") == -1 && path.indexOf("c9.static/build") == -1 && path.indexOf("c9.api/health") == -1; + }) + .concat({ + consumes: [], + provides: ["cdn.build", "db", "health"], + setup: function(options, imports, register) { + register(null, { + "cdn.build": {}, + "db": {}, + "health": { + addCheck: function() {} + } + }); + } });