blob: f715c5048738095d616f82510661fe453f6a16e7 [file] [log] [blame]
#!/usr/bin/env node
'use strict';
var Promise = require('lie');
var watch = require('node-watch');
var http_server = require('http-server');
var spawn = require('child_process').spawn;
var queryParams = {};
if (process.env.ADAPTERS) {
queryParams.adapters = process.env.ADAPTERS;
}
if (process.env.AUTO_COMPACTION) {
queryParams.autoCompaction = true;
}
if (process.env.POUCHDB_SRC) {
queryParams.src = process.env.POUCHDB_SRC;
}
if (process.env.COUCH_HOST) {
queryParams.couchHost = process.env.COUCH_HOST;
}
var rebuildPromise = Promise.resolve();
function rebuild() {
// only run one build at a time
rebuildPromise = rebuildPromise.then(function () {
return new Promise(function (resolve) {
var child = spawn('npm', ['run', 'build']);
child.stdout.on('data', function (buf) {
console.log(String(buf).replace(/\s*$/, ''));
});
child.stderr.on('data', function (buf) {
console.log(String(buf).replace(/\s*$/, ''));
});
child.on('close', resolve);
});
});
return rebuildPromise;
}
watch('./src', rebuild);
var filesWritten = false;
Promise.resolve().then(function () {
if (require.main !== module) {
return; // don't bother rebuilding if we're in `npm run dev`
}
return rebuild();
}).then(function () {
filesWritten = true;
checkReady();
});
var HTTP_PORT = 8000;
// if SERVER=sync-gateway we also have
// tests/misc/sync-gateway-config-server.js
// listening on port 8001
var serversStarted;
var readyCallback;
function startServers(callback) {
readyCallback = callback;
http_server.createServer().listen(HTTP_PORT, function () {
var testRoot = 'http://127.0.0.1:' + HTTP_PORT;
var query = '';
Object.keys(queryParams).forEach(function (key) {
query += (query ? '&' : '?');
query += key + '=' + encodeURIComponent(queryParams[key]);
});
console.log('Integration tests: ' + testRoot +
'/tests/integration/' + query);
console.log('Map/reduce tests: ' + testRoot +
'/tests/mapreduce' + query);
console.log('Performance tests: ' + testRoot +
'/tests/performance/' + query);
serversStarted = true;
checkReady();
});
}
function checkReady() {
if (filesWritten && serversStarted && readyCallback) {
readyCallback();
}
}
if (require.main === module) {
startServers();
} else {
module.exports.start = startServers;
}