remjson
Version:
JSON-RPC 1.0/2.0 compliant server and client
161 lines (125 loc) • 3.33 kB
JavaScript
var should = require('should');
var remjson = require(__dirname + '/../lib');
var support = require('./support');
var exec = require('child_process').exec;
var fs = require('fs');
var url = require('url');
var bin = __dirname + '/../bin/remjson.js';
describe('RemJson.Bin', function () {
var server = remjson.server(support.server.methods, support.server.options);
describe('port-listening http server', function () {
var http = null;
var hostname = 'localhost';
var port = 34000;
var surl = url.format({
port: port,
protocol: 'http',
hostname: hostname
});
before(function (done) {
http = server.http();
http.listen(port, hostname, done);
});
after(function (done) {
http.on('close', done);
http.close();
});
it('should be callable', function (done) {
var args = get_args(bin, {
url: surl,
method: 'add',
quiet: true,
json: true,
params: JSON.stringify([4, 9])
});
exec(args, function (err, stdout, stderr) {
if (err) throw err;
should.exist(stdout, stderr);
stderr.should.equal('');
console.log(stdout);
var json = JSON.parse(stdout);
json.should.containDeep({
result: 4 + 9
});
done();
});
});
});
describe('port-listening tcp server', function () {
var tcp = null;
var hostname = 'localhost';
var port = "35000";
var socket = hostname + ":" + port;
before(function (done) {
tcp = server.tcp();
tcp.listen(port, hostname, done);
});
after(function (done) {
tcp.on('close', done);
tcp.close();
});
it('should be callable', function (done) {
var args = get_args(bin, {
socket: socket,
method: 'add',
quiet: true,
json: true,
params: JSON.stringify([1, 2])
});
exec(args, function (err, stdout, stderr) {
if (err) throw err;
var json = JSON.parse(stdout);
stderr.should.equal('');
json.should.containDeep({
result: 1 + 2
});
done();
});
});
});
describe('unix domain socket-listening server', function () {
var http = null;
var socketPath = __dirname + '/support/bin.test.socket';
before(function (done) {
try {
fs.unlinkSync(socketPath);
} catch (ignore) {
}
http = server.http();
http.listen(socketPath, done);
});
after(function (done) {
http.on('close', done);
http.close();
});
it('should be callable', function (done) {
var args = get_args(bin, {
socket: socketPath,
method: 'add',
quiet: true,
json: true,
params: JSON.stringify([1, 2])
});
exec(args, function (err, stdout, stderr) {
if (err) throw err;
var json = JSON.parse(stdout);
stderr.should.equal('');
json.should.containDeep({
result: 1 + 2
});
done();
});
});
});
});
function get_args(binary, args) {
var buf = binary;
for (var arg in args) {
var value = args[arg];
buf += ' --' + arg;
if (typeof(value) === 'string') {
buf += ' "' + value + '"';
}
}
return buf;
}