UNPKG

stompit

Version:

STOMP client library for node.js

264 lines (203 loc) 7.87 kB
/*jslint node: true, indent: 2, unused: true, maxlen: 160, camelcase: true, esversion: 9 */ const net = require('net'); const tls = require('tls'); const fs = require('fs'); const path = require('path'); const { Client, connect } = require('../lib/index'); const Server = require('../lib/Server'); const assert = require('assert'); const startServer = function(listener){ var server = net.createServer({family: 4}, function(socket){ var stomp = new Server(socket); listener(stomp); }); server.listen(0); return server; }; const readFile = function(filename){ if(filename[0] !== '/'){ filename = path.dirname(module.filename) + path.sep + filename; } return fs.readFileSync(filename); }; const startBrokenServer = function(){ return startServer(function(stomp){ stomp.on('error', function(){}); stomp.destroy(new Error('unavailable')); }); }; describe('connect(options, [connectionListener])', function(){ it('should connect to a stomp server', function(done){ var serverCallback = false; var connectCallback = false; var server = startServer(function(stomp){ stomp.on('connection', function(){ serverCallback = true; if(serverCallback && connectCallback){ done(); } }); }); connect({ host: '127.0.0.1', port: server.address().port }, function(error, client){ assert(!error); assert(client instanceof Client); connectCallback = true; if(serverCallback && connectCallback){ done(); } }); }); it('should include headers defined by the caller in the CONNECT frame', function(done){ var server = startServer(function(stomp){ stomp.on('connection', function(conn){ assert(conn.headers.host === 'test'); assert(conn.headers.login === 'a'); assert(conn.headers.passcode === 'b'); assert(conn.headers.foo === 'bar'); done(); }); }); connect({ port: server.address().port, connectHeaders:{ host: 'test', login: 'a', passcode: 'b', foo: 'bar' } }); }); it('should callback on error', function(done){ var server = startBrokenServer(); connect({ host:'127.0.0.1', port: server.address().port }, function(error){ assert(error); done(); }); }); it('should accept a transport connect function', function(done){ var transport = function(options) { assert(options.host == '127.0.0.7'); assert(options.port == 61619); done(); }; connect({ host:'127.0.0.7', port: 61619, connect: transport }); }); it('should use tls.connect when ssl option is true', function(done){ var nativeTlsConnect = tls.connect; tls.connect = function() { tls.connect = nativeTlsConnect; done(); return nativeTlsConnect.apply(this, arguments); }; connect({ host: 'localhost', port: 61613, ssl: true, ca: [readFile('fixtures/ca.crt')], }); }); }); describe('connect(port, [host], [connectListener])', function(){ it('should connect to a stomp server', function(done){ var serverCallback = false; var connectCallback = false; var server = startServer(function(stomp){ stomp.on('connection', function(){ serverCallback = true; if(serverCallback && connectCallback){ done(); } }); }); connect(server.address().port, function(error, client){ assert(!error); assert(client instanceof Client); connectCallback = true; if(serverCallback && connectCallback){ done(); } }); }); }); describe('connect', function(){ it('throw error on zero arguments', function() { assert.throws(function(){ connect(); }, function(error){ return error.message == 'no connect arguments'; }); }); it('throw error on invalid port/path argument', function() { assert.throws(function(){ connect(function(){}); }, function(error){ return error.message === 'invalid connect argument (expected port or path value)'; }); }); it('throw on invalid connectListener argument', function() { assert.throws(function(){ connect(61613, 'localhost', 'not_a_function'); }, function(error){ return error.message == 'invalid connect argument ' + '(expected connectListener argument to be a function)'; }); }); it('throw on too many arguments', function() { assert.throws(function(){ connect(61613, 'localhost', function(){}, true); }, function(error){ return error.message == 'too many arguments'; }); }); }); describe('connect.normalizeConnectArgs', function() { it('normalize (path, [connectListner])', function(){ var cb = function(){}; var args = connect.normalizeConnectArgs(['/foo.sock', cb]); assert.equal(args[0].path, '/foo.sock'); assert.equal(args[0].host, void 0); assert.equal(args[0].port, void 0); assert.equal(args[1], cb); args = connect.normalizeConnectArgs(['/foo.sock']); assert.equal(args[0].path, '/foo.sock'); assert.equal(args[0].host, void 0); assert.equal(args[0].port, void 0); assert.equal(args[1], void 0); }); it('normalize (port, [connectListner])', function(){ var cb = function(){}; var args = connect.normalizeConnectArgs(['123', cb]); assert.equal(args[0].path, void 0); assert.equal(args[0].host, 'localhost'); assert.equal(args[0].port, 123); assert.equal(args[1], cb); args = connect.normalizeConnectArgs([65534]); assert.equal(args[0].path, void 0); assert.equal(args[0].host, 'localhost'); assert.equal(args[0].port, 65534); assert.equal(args[1], void 0); }); it('normalize (port, host, [connectListner])', function(){ var cb = function(){}; var args = connect.normalizeConnectArgs(['123', 'example.com', cb]); assert.equal(args[0].path, void 0); assert.equal(args[0].host, 'example.com'); assert.equal(args[0].port, 123); assert.equal(args[1], cb); args = connect.normalizeConnectArgs([65300, 'example.com']); assert.equal(args[0].path, void 0); assert.equal(args[0].host, 'example.com'); assert.equal(args[0].port, 65300); assert.equal(args[1], void 0); }); });