Files
Zos/Skills/@be/node_modules/udp-streams2/test.js

226 lines
6.2 KiB
JavaScript

'use strict';
var dgram = require('dgram'),
UdpStream = require('./index');
var BIND_PORT = 1234;
require('should');
describe('UdpStream', function () {
var server, server6,
_onMessage = function () { };
var onMessage = function (cb) { _onMessage = cb; }
before(function (_done) {
var count = 2;
function done() {
count--;
if (!count) _done();
};
server = dgram.createSocket('udp4', function () {
_onMessage.apply(null, arguments);
});
server.bind({
address: '127.0.0.1',
port: BIND_PORT
}, done);
server6 = dgram.createSocket('udp6', function () {
_onMessage.apply(null, arguments);
});
server6.bind({
address: '::1',
port: BIND_PORT
}, done);
});
after(function () {
server.close();
server6.close();
});
afterEach(function () {
onMessage(function () { });
});
it('should pass messages', function (done) {
var client = new UdpStream();
client.connect({
host: '127.0.0.1',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
onMessage(done.bind(null, null));
client.write('hello');
});
});
it('should support connect(port, host) syntax', function (done) {
var client = new UdpStream();
client.connect(BIND_PORT, '127.0.0.1', function (e) {
if (e) { done(e); return; }
onMessage(done.bind(null, null));
client.write('hello');
});
});
it('should support connect(port) syntax', function (done) {
var client = new UdpStream();
client.connect(BIND_PORT, function (e) {
if (e) { done(e); return; }
onMessage(done.bind(null, null));
client.write('hello');
});
});
it('should support dns resolution', function (done) {
var client = new UdpStream();
client.connect({
host: 'localhost',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
onMessage(done.bind(null, null));
client.write('hello');
});
});
it('should support IPv6', function (done) {
var client = new UdpStream();
client.connect({
host: '::1',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
onMessage(done.bind(null, null));
client.write('hello');
});
});
it('should end gracefully', function (done) {
var client = new UdpStream();
client.connect({
host: 'localhost',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
client.end(done);
});
});
it('should emit a \'connect\' event on the next tick', function (done) {
var client = new UdpStream();
client.connect({ host: '127.0.0.1', port: BIND_PORT });
client.on('connect', done.bind(null, null));
});
it('should emit a \'close\' event', function (done) {
var client = new UdpStream();
client.connect({
host: 'localhost',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
client.end();
});
client.on('close', done.bind(null, null));
});
it('should error on write after end', function () {
var client = new UdpStream();
client.connect({
host: 'localhost',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
client.end();
(function () {
client.write('foo');
}).should.throw(/write after end/);
});
});
it('should pass along socket errors and end', function (done) {
var client = new UdpStream();
client.connect({
host: 'localhost',
port: BIND_PORT
}, function (e, client) {
if (e) { done(e); return; }
var received = null;
client.on('error', function (err) { received = err; });
client.on('finish', function () {
received.should.equal('fake');
done();
});
client.socket.emit('error', 'fake');
});
});
it('should fail if no port is provided', function (done) {
var client = new UdpStream();
client.connect(function (err, res) {
err.message.should.match(/opts\.port is required/);
done();
});
});
it('should not throw synchronously with invalid parameters', function (done) {
this.timeout(40000);
var count = 0;
function swallow() {
count++;
if (count === 8) { done(); }
}
UdpStream.create().on('error', swallow);
UdpStream.create('foo').on('error', swallow);
UdpStream.create('foo', 'foo').on('error', swallow);
UdpStream.create('foo', 'foo', 'foo').on('error', swallow);
UdpStream.create(null).on('error', swallow);
UdpStream.create(null, null).on('error', swallow);
UdpStream.create(null, null, null).on('error', swallow);
UdpStream.create({
host: null,
port: null
}).on('error', swallow);
});
it('should wait until stream is ended to destroy socket (fixes syslog2 #3, #4)', function (done) {
var PassThrough = require('stream').PassThrough;
var client = new UdpStream(),
pt = new PassThrough();
client.connect({
host: '127.0.0.1',
port: BIND_PORT
}, function (e) {
if (e) { done(e); return; }
pt.pipe(client);
pt.write('one', function () {
pt.write('two', function () {
pt.end(done.bind(null, null));
});
});
});
});
});