raptor-rpc
Version:
Raptor RPC is a transport-agnostic RPC server with middleware support and an easy to use api. It will allow you to have a server up and running in a matter of minutes, without limiting you to a specific transport.
77 lines (59 loc) • 1.99 kB
JavaScript
/* eslint-env mocha */
var dgram = require('dgram')
var assert = require('assert')
var createApp = require('./_app')
var requests = require('./_requests')
var PORT_CLIENT = 30100
var PORT_SERVER = 30101
describe('dgram', function () {
var app, id, server, client
function send (obj) {
return new Promise(function (resolve) {
if (obj.id !== undefined) {
client.once('message', function (msg) {
resolve(JSON.parse(msg.toString()))
})
}
var buf = new Buffer(JSON.stringify(obj))
client.send(buf, 0, buf.length, PORT_SERVER, 'localhost')
if (obj.id === undefined) resolve(null)
})
}
before(function () {
id = 0
app = createApp()
server = dgram.createSocket('udp4')
client = dgram.createSocket('udp4')
app.attach(server)
return Promise.all([
new Promise(function (resolve) { server.bind(PORT_SERVER, resolve) }),
new Promise(function (resolve) { client.bind(PORT_CLIENT, resolve) })
])
})
after(function () {
return Promise.all([
/* Node.js 0.12 doesn't support `.close(callback)` */
new Promise(function (resolve) { server.on('close', resolve); server.close() }),
new Promise(function (resolve) { client.on('close', resolve); client.close() })
])
})
requests.forEach(function (request) {
it('should handle ' + request[0], function () {
var obj = { jsonrpc: '2.0', method: request[0], params: request[1], id: id++ }
return send(obj).then(request[2])
})
})
it('should handle notifications', function () {
var obj = { jsonrpc: '2.0', method: 'ping' }
return send(obj).then(function (res) {
assert.equal(res, null)
})
})
it('should give remote information', function () {
var obj = { jsonrpc: '2.0', method: 'remote', id: id++ }
return send(obj).then(function (res) {
assert.equal(res.result.type, 'dgram')
assert.equal(res.result.port, PORT_CLIENT)
})
})
})