UNPKG

remjson

Version:

JSON-RPC 1.0/2.0 compliant server and client

109 lines (81 loc) 2.79 kB
var should = require('should'); var remjson = require(__dirname + '/../'); var support = require(__dirname + '/support'); var common = support.common; var http = require('http'); var url = require('url'); describe('RemJson.Http', function () { describe('server', function () { var server = null; after(function () { server.close(); }); it('should listen to a local port', function (done) { server = remjson.server(support.server.methods, support.server.options).http(); server.listen(3000, 'localhost', done); }); it('should be an instance of http.Server', function () { server.should.be.instanceof(http.Server); }); }); describe('client', function () { var client = remjson.client.http({ reviver: support.server.options.reviver, replacer: support.server.options.replacer, host: 'localhost', port: 3000 }); var server = remjson.server(support.server.methods, support.server.options); var server_http = server.http(); before(function (done) { server_http.listen(3000, 'localhost', done); }); after(function () { server_http.close(); }); describe('common tests', common(client)); it('should emit an event with the http request', function (done) { var hasFired = false; client.once('http request', function (req) { req.should.be.instanceof(http.ClientRequest); hasFired = true; }); client.request('add', [10, 2], function (err, response) { if (err) throw err; hasFired.should.be.ok; done(); }); }); it('should emit an event with the http response', function (done) { var hasFired = false; client.once('http response', function (res, req) { res.should.be.instanceof(http.IncomingMessage); req.should.be.instanceof(http.ClientRequest); hasFired = true; }); client.request('add', [9, 4], function (err, response) { if (err) throw err; hasFired.should.be.ok; done(); }); }); it('should accept a URL string as the first argument', function () { var urlStr = 'http://localhost:3000'; var client = remjson.client.http(urlStr); var urlObj = url.parse(urlStr); Object.keys(urlObj).forEach(function (key) { client.options.should.have.property(key, urlObj[key]); }); }); it('should callback with an error on timeout', function (done) { client.once('http request', function (req) { req.setTimeout(5); // timeout 5 ms }); client.request('add_slow', [4, 3, true], function (err, response) { should(err).be.instanceof(Error); should(response).not.exist; done(); }); }); }); });