(#6167) - fix and improve test scripts
diff --git a/bin/dev-server.js b/bin/dev-server.js index b6cbc07..444bc55 100755 --- a/bin/dev-server.js +++ b/bin/dev-server.js
@@ -24,7 +24,12 @@ if (process.env.COUCH_HOST) { queryParams.couchHost = process.env.COUCH_HOST; } - +if (process.env.ADAPTER) { + queryParams.adapter = process.env.ADAPTER; +} +if (process.env.ITERATIONS) { + queryParams.iterations = process.env.ITERATIONS; +} if (process.env.NEXT) { queryParams.src = '../../packages/node_modules/pouchdb/dist/pouchdb-next.js'; } @@ -35,6 +40,7 @@ rebuildPromise = rebuildPromise.then(buildPouchDB).then(function () { console.log('Rebuilt packages/node_modules/pouchdb'); }).catch(console.error); + return rebuildPromise; } function browserifyPromise(src, dest) { @@ -52,6 +58,7 @@ }).then(function () { console.log('Rebuilt tests/integration/utils-bundle.js'); }).catch(console.error); + return rebuildPromise; } function rebuildPerf() { @@ -61,6 +68,7 @@ }).then(function () { console.log('Rebuilt tests/performance-bundle.js'); }).catch(console.error); + return rebuildPromise; } function watchAll() { @@ -84,6 +92,7 @@ rebuildPerf() ]); }).then(function () { + console.log('Rebuilt PouchDB/test/perf JS bundles'); filesWritten = true; checkReady(); });
diff --git a/bin/test-browser.js b/bin/test-browser.js index c22a2e7..db093e0 100755 --- a/bin/test-browser.js +++ b/bin/test-browser.js
@@ -77,6 +77,12 @@ if (process.env.COUCH_HOST) { qs.couchHost = process.env.COUCH_HOST; } +if (process.env.ADAPTER) { + qs.adapter = process.env.ADAPTER; +} +if (process.env.ITERATIONS) { + qs.iterations = process.env.ITERATIONS; +} if (process.env.NEXT) { qs.NEXT = '1'; } @@ -125,7 +131,7 @@ } function testComplete(result) { - console.log(result); + console.log('=>', JSON.stringify(result, null, ' '), '<='); sauceClient.quit().then(function () { if (sauceConnectProcess) { @@ -204,7 +210,7 @@ clearInterval(interval); testComplete(results); } else { - console.log('=> ', results); + console.log(results); } }); }, 10 * 1000);
diff --git a/tests/performance/index.js b/tests/performance/index.js index 13a1447..e19330d 100644 --- a/tests/performance/index.js +++ b/tests/performance/index.js
@@ -3,9 +3,7 @@ var opts = {}; -var levelAdapter; if (typeof process !== 'undefined' && process.env) { - levelAdapter = process.env.LEVEL_ADAPTER; if (process.env.ADAPTER) { opts.adapter = process.env.ADAPTER; } @@ -16,13 +14,22 @@ function runTestsNow() { var reporter = require('./perf.reporter'); reporter.log('Testing PouchDB version ' + PouchDB.version + - ((opts.adapter || levelAdapter) ? - (', using adapter: ' + (opts.adapter || levelAdapter)) : '') + + (opts.adapter ? + (', using adapter: ' + opts.adapter) : '') + '\n\n'); - require('./perf.basics')(PouchDB, opts); - require('./perf.views')(PouchDB, opts); - require('./perf.attachments')(PouchDB, opts); + var theAdapterUsed; + var count = 0; + function checkDone(adapterUsed) { + theAdapterUsed = theAdapterUsed || adapterUsed; + if (++count === 3) { // number of perf.xxxx.js tests + reporter.complete(theAdapterUsed); + } + } + + require('./perf.basics')(PouchDB, opts, checkDone); + require('./perf.views')(PouchDB, opts, checkDone); + require('./perf.attachments')(PouchDB, opts, checkDone); } if (typeof process === 'undefined' || process.browser) { @@ -69,6 +76,8 @@ // fails in Node 0.11-0.12 due to sqlite3 being incompatible PouchDB.plugin(require('../../packages/node_modules/' + 'pouchdb-adapter-node-websql')); + PouchDB.plugin(require('../../packages/node_modules/' + + 'pouchdb-adapter-memory')); } runTestSuites(PouchDB); }
diff --git a/tests/performance/perf.attachments.js b/tests/performance/perf.attachments.js index b00c229..307c607 100644 --- a/tests/performance/perf.attachments.js +++ b/tests/performance/perf.attachments.js
@@ -28,7 +28,7 @@ } } -module.exports = function (PouchDB, opts) { +module.exports = function (PouchDB, opts, callback) { require('lie'); var utils = require('./utils'); @@ -53,6 +53,6 @@ } ]; - utils.runTests(PouchDB, 'views', testCases, opts); + utils.runTests(PouchDB, 'views', testCases, opts, callback); };
diff --git a/tests/performance/perf.basics.js b/tests/performance/perf.basics.js index a4632c1..46bc2d6 100644 --- a/tests/performance/perf.basics.js +++ b/tests/performance/perf.basics.js
@@ -1,6 +1,6 @@ 'use strict'; -module.exports = function (PouchDB, opts) { +module.exports = function (PouchDB, opts, callback) { var Promise = require('lie'); var utils = require('./utils'); @@ -61,10 +61,10 @@ { name: 'basic-gets', assertions: 1, - iterations: 10000, + iterations: 1000, setup: function (db, callback) { var docs = []; - for (var i = 0; i < 10000; i++) { + for (var i = 0; i < 1000; i++) { docs.push({_id : commonUtils.createDocId(i), foo : 'bar', baz : 'quux'}); } @@ -223,5 +223,5 @@ } ]; - utils.runTests(PouchDB, 'basics', testCases, opts); + utils.runTests(PouchDB, 'basics', testCases, opts, callback); };
diff --git a/tests/performance/perf.reporter.js b/tests/performance/perf.reporter.js index ae629a3..0c70dc8 100644 --- a/tests/performance/perf.reporter.js +++ b/tests/performance/perf.reporter.js
@@ -4,7 +4,9 @@ var ua = !isNode && new UAParser(navigator.userAgent); var marky = require('marky'); var median = require('median'); -global.results = {}; +global.results = { + tests: {} +}; // fix for Firefox max timing entries capped to 150: // https://bugzilla.mozilla.org/show_bug.cgi?id=1331135 @@ -33,15 +35,17 @@ var key = testCase.name; log('Starting test: ' + key + ' with ' + testCase.assertions + ' assertions and ' + iter + ' iterations... '); - global.results[key] = { + global.results.tests[key] = { iterations: [] }; }; exports.end = function (testCase) { var key = testCase.name; - var obj = global.results[key]; + var obj = global.results.tests[key]; obj.median = median(obj.iterations); + obj.numIterations = obj.iterations.length; + delete obj.iterations; // keep it simple when reporting log('median: ' + obj.median + ' ms\n'); }; @@ -51,13 +55,15 @@ exports.endIteration = function (testCase) { var entry = marky.stop(testCase.name); - global.results[testCase.name].iterations.push(entry.duration); + global.results.tests[testCase.name].iterations.push(entry.duration); }; -exports.complete = function () { +exports.complete = function (adapter) { global.results.completed = true; if (isNode) { - global.results.client = {node: process.version}; + global.results.client = { + node: process.version + }; } else { global.results.client = { browser: ua.getBrowser(), @@ -68,7 +74,8 @@ userAgent: navigator.userAgent }; } - console.log(global.results); + global.results.adapter = adapter; + console.log('=>', JSON.stringify(global.results, null, ' '), '<='); log('\nTests Complete!\n\n'); };
diff --git a/tests/performance/perf.views.js b/tests/performance/perf.views.js index 206a710..82c9251 100644 --- a/tests/performance/perf.views.js +++ b/tests/performance/perf.views.js
@@ -1,6 +1,6 @@ 'use strict'; -module.exports = function (PouchDB, opts) { +module.exports = function (PouchDB, opts, callback) { var Promise = require('lie'); var utils = require('./utils'); @@ -173,6 +173,6 @@ } ]; - utils.runTests(PouchDB, 'views', testCases, opts); + utils.runTests(PouchDB, 'views', testCases, opts, callback); };
diff --git a/tests/performance/utils.js b/tests/performance/utils.js index 481777c..d6665d5 100644 --- a/tests/performance/utils.js +++ b/tests/performance/utils.js
@@ -19,24 +19,28 @@ iterations = process.env.ITERATIONS && parseInt(process.env.ITERATIONS, 10); } -var levelAdapter = typeof process !== 'undefined' && process.env && - process.env.LEVEL_ADAPTER; +var adapterUsed; -exports.runTests = function (PouchDB, suiteName, testCases, opts) { - testCases.forEach(function (testCase, i) { - var testName = testCase.name; +exports.runTests = function (PouchDB, suiteName, testCases, opts, callback) { + + testCases = testCases.filter(function (testCase) { if (grep && suiteName.indexOf(grep) === -1 && - testName.indexOf(grep) === -1) { - return; + testCase.name.indexOf(grep) === -1) { + return false; } - var iter = typeof iterations === 'number' ? iterations : testCase.iterations; + return iter !== 0; + }); - if (iter === 0) { - return; - } + if (!testCases.length) { + return callback(); + } + testCases.forEach(function (testCase, i) { + var testName = testCase.name; + var iter = typeof iterations === 'number' ? iterations : + testCase.iterations; test('benchmarking', function (t) { var db; var setupObj; @@ -45,10 +49,8 @@ t.test('setup', function (t) { opts.size = 3000; - if (levelAdapter) { - opts.db = require(levelAdapter); - } db = new PouchDB(localDbName, opts); + adapterUsed = db.adapter; testCase.setup(db, function (err, res) { if (err) { t.error(err); @@ -95,14 +97,11 @@ testCaseTeardown.then(function () { reporter.end(testCase); var opts = {adapter : db.adapter}; - if (levelAdapter) { - opts.db = require(levelAdapter); - } return new PouchDB(localDbName, opts).destroy(); }).then(function () { t.end(); if (i === testCases.length - 1) { - reporter.complete(suiteName); + callback(adapterUsed); } }); });