sails
Version:
API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)
309 lines (266 loc) • 11.6 kB
JavaScript
/**
* Module dependencies
*/
var util = require('util');
var assert = require('assert');
var tmp = require('tmp');
var _ = require('@sailshq/lodash');
var request = require('@sailshq/request');
var Filesystem = require('machinepack-fs');
var appHelper = require('../integration/helpers/appHelper');
var Sails = require('../../lib').constructor;
var benchmarx = require('./helpers/benchmarx');
if (process.env.BENCHMARK) {
tmp.setGracefulCleanup();
describe('benchmarks', function() {
describe('sails requests :: ', function() {
describe('generic requests ::', function() {
this.timeout(0);
describe('baseline (load only, no hooks) ::', function() {
var curDir, tmpDir, sailsApp;
var warn;
var warnings = [];
before(function(done) {
// Cache the current working directory.
curDir = process.cwd();
// Create a temp directory.
tmpDir = tmp.dirSync({gracefulCleanup: true, unsafeCleanup: true});
// Switch to the temp directory.
process.chdir(tmpDir.name);
// Load the Sails app.
(new Sails()).load({
loadHooks: [],
log: {level: 'silent'},
routes: {
'/test1': function(req, res) { return res.status(200).send(); },
'GET /test2': function(req, res) { return res.status(200).send(); },
'POST /test3': function(req, res) { return res.status(200).send(); },
'/test4/:id': function(req, res) { return res.status(200).send(); },
'/test5/*': function(req, res) { return res.status(200).send(); },
'r|test6/\\d+|foo': function(req, res) { return res.status(200).send(); },
'/test7': function(req, res) { return res.status(200).send('foo'); },
'/test8': function(req, res) { return res.status(200).json({foo: 'bar'}); },
'POST /test9': function(req, res) { return res.status(200).send(req.param('foo')); },
'POST /test10': function(req, res) { return res.status(200).json(req.allParams); },
}
}, function(err, _sails) {
sailsApp = _sails;
return done(err);
});
});
after(function(done) {
sailsApp.lower(function() {
process.chdir(curDir);
return done();
});
});
it('', function(done) {
benchmarx('', [
function route_with_no_verb(done) {
sailsApp.request('http://localhost:1342/test1', done);
},
function route_with_GET_verb(done) {
sailsApp.request('http://localhost:1342/test2', done);
},
function route_with_POST_verb(done) {
sailsApp.request({
url: 'http://localhost:1342/test3',
method: 'post',
data: {foo: 'bar'}
}, done);
},
function route_with_dynamic_param(done) {
sailsApp.request('http://localhost:1342/test4/123', done);
},
function route_with_wildcard(done) {
sailsApp.request('http://localhost:1342/test5/abc/123', done);
},
function route_with_regex(done) {
sailsApp.request('http://localhost:1342/test6/666', done);
},
function respond_with_string(done) {
sailsApp.request('http://localhost:1342/test7', done);
},
function respond_with_json(done) {
sailsApp.request('http://localhost:1342/test8', done);
},
function reflect_one_param(done) {
sailsApp.request({
url: 'http://localhost:1342/test9',
method: 'post',
data: {foo: 'bar'}
}, done);
},
function reflect_all_params(done) {
sailsApp.request({
url: 'http://localhost:1342/test10',
method: 'post',
data: {foo: 'bar', abc: 123}
}, done);
}
], done);
});
});
describe('lift w/ no hooks besides http and request) ::', function() {
var curDir, tmpDir, sailsApp;
var warn;
var warnings = [];
this.timeout(0);
before(function(done) {
// Cache the current working directory.
curDir = process.cwd();
// Create a temp directory.
tmpDir = tmp.dirSync({gracefulCleanup: true, unsafeCleanup: true});
// Switch to the temp directory.
process.chdir(tmpDir.name);
// Load the Sails app.
(new Sails()).lift({
port: 1342,
loadHooks: ['http', 'request'],
log: {level: 'silent'},
routes: {
'/test1': function(req, res) { return res.status(200).send(); },
'GET /test2': function(req, res) { return res.status(200).send(); },
'POST /test3': function(req, res) { return res.status(200).send(); },
'/test4/:id': function(req, res) { return res.status(200).send(); },
'/test5/*': function(req, res) { return res.status(200).send(); },
'r|test6/\\d+|foo': function(req, res) { return res.status(200).send(); },
'/test7': function(req, res) { return res.status(200).send('foo'); },
'/test8': function(req, res) { return res.status(200).json({foo: 'bar'}); },
'POST /test9': function(req, res) { return res.status(200).send(req.param('foo')); },
'POST /test10': function(req, res) { return res.status(200).json(req.allParams); },
}
}, function(err, _sails) {
sailsApp = _sails;
return done(err);
});
});
after(function(done) {
sailsApp.lower(function() {
process.chdir(curDir);
return done();
});
});
it('', function(done) {
benchmarx('', [
function route_with_no_verb(done) {
request.get('http://localhost:1342/test1', done);
},
function route_with_GET_verb(done) {
request.get('http://localhost:1342/test2', done);
},
function route_with_POST_verb(done) {
request({
url: 'http://localhost:1342/test3',
method: 'post',
json: {foo: 'bar'}
}, done);
},
function route_with_dynamic_param(done) {
request.get('http://localhost:1342/test4/123', done);
},
function route_with_wildcard(done) {
request.get('http://localhost:1342/test5/abc/123', done);
},
function route_with_regex(done) {
request.get('http://localhost:1342/test6/666', done);
},
function respond_with_string(done) {
request.get('http://localhost:1342/test7', done);
},
function respond_with_json(done) {
request.get('http://localhost:1342/test8', done);
},
function reflect_one_param(done) {
request.post('http://localhost:1342/test9', {foo: 'bar'}, done);
},
function reflect_all_params(done) {
request.post('http://localhost:1342/test10', {foo: 'bar', abc: 123}, done);
}
], done);
});
});
describe('lift with all default hooks ::', function() {
var curDir, tmpDir, sailsApp;
var warn;
var warnings = [];
this.timeout(0);
before(function(done) {
// Cache the current working directory.
curDir = process.cwd();
// Create a temp directory.
tmpDir = tmp.dirSync({gracefulCleanup: true, unsafeCleanup: true});
// Switch to the temp directory.
process.chdir(tmpDir.name);
// Link dependencies so that default hooks will work
appHelper.linkDeps(tmpDir.name);
// Load the Sails app.
(new Sails()).lift({
port: 1342,
log: {level: 'silent'},
routes: {
'/test1': function(req, res) { return res.status(200).send(); },
'GET /test2': function(req, res) { return res.status(200).send(); },
'POST /test3': function(req, res) { return res.status(200).send(); },
'/test4/:id': function(req, res) { return res.status(200).send(); },
'/test5/*': function(req, res) { return res.status(200).send(); },
'r|test6/\\d+|foo': function(req, res) { return res.status(200).send(); },
'/test7': function(req, res) { return res.status(200).send('foo'); },
'/test8': function(req, res) { return res.status(200).json({foo: 'bar'}); },
'POST /test9': function(req, res) { return res.status(200).send(req.param('foo')); },
'POST /test10': function(req, res) { return res.status(200).json(req.allParams); },
}
}, function(err, _sails) {
sailsApp = _sails;
return done(err);
});
});
after(function(done) {
sailsApp.lower(function() {
process.chdir(curDir);
return done();
});
});
it('', function(done) {
benchmarx('', [
function route_with_no_verb(done) {
request.get('http://localhost:1342/test1', done);
},
function route_with_GET_verb(done) {
request.get('http://localhost:1342/test2', done);
},
function route_with_POST_verb(done) {
request({
url: 'http://localhost:1342/test3',
method: 'post',
json: {foo: 'bar'}
}, done);
},
function route_with_dynamic_param(done) {
request.get('http://localhost:1342/test4/123', done);
},
function route_with_wildcard(done) {
request.get('http://localhost:1342/test5/abc/123', done);
},
function route_with_regex(done) {
request.get('http://localhost:1342/test6/666', done);
},
function respond_with_string(done) {
request.get('http://localhost:1342/test7', done);
},
function respond_with_json(done) {
request.get('http://localhost:1342/test8', done);
},
function reflect_one_param(done) {
request.post('http://localhost:1342/test9', {foo: 'bar'}, done);
},
function reflect_all_params(done) {
request.post('http://localhost:1342/test10', {foo: 'bar', abc: 123}, done);
}
], done);
});
});
});
});
});
}