Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provided CA parameter to pass to the tls socket connection and socket error non ECONNREFUSED reporting #6

Merged
merged 2 commits into from
Nov 15, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions lib/winston-logstash.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ var net = require('net'),
winston = require('winston'),
common = require('winston/lib/winston/common');

var ECONNREFUSED_REGEXP = /ECONNREFUSED/;

var Logstash = exports.Logstash = function (options) {
winston.Transport.call(this, options);
options = options || {};
Expand All @@ -27,6 +29,7 @@ var Logstash = exports.Logstash = function (options) {
this.ssl_enable = options.ssl_enable || false;
this.ssl_key = options.ssl_key || '';
this.ssl_cert = options.ssl_cert || '';
this.ca = options.ca || '';
this.ssl_passphrase = options.ssl_passphrase || '';

// Connection state
Expand Down Expand Up @@ -84,6 +87,7 @@ Logstash.prototype.log = function (level, msg, meta, callback) {
};

Logstash.prototype.connect = function () {
var tryReconnect = true;
var options = {};
var self = this;
this.retries++;
Expand All @@ -92,7 +96,16 @@ Logstash.prototype.connect = function () {
options = {
key: this.ssl_key ? fs.readFileSync(this.ssl_key) : null,
cert: this.ssl_cert ? fs.readFileSync(this.ssl_cert) : null,
passphrase: this.ssl_passphrase ? this.ssl_passphrase : null
passphrase: this.ssl_passphrase ? this.ssl_passphrase : null,
ca: this.ca ? (function (caList) {
var caFilesList = [];

caList.forEach(function (filePath) {
caFilesList.push(fs.readFileSync(filePath));
});

return caFilesList;
}(this.ca)) : null
}
this.socket = new tls.connect(this.port, this.host, options, function() {
self.socket.setEncoding('UTF-8');
Expand All @@ -108,6 +121,11 @@ Logstash.prototype.connect = function () {
self.connected = false;
self.socket.destroy();
self.socket = null;

if (!ECONNREFUSED_REGEXP.test(err.message)) {
tryReconnect = false;
self.emit('error', err);
}
});

this.socket.on('timeout', function() {
Expand All @@ -119,7 +137,7 @@ Logstash.prototype.connect = function () {
this.socket.on('close', function (had_error) {
self.connected = false;

if (self.max_connect_retries === -1 || self.retries < self.max_connect_retries) {
if ((tryReconnect) && (self.max_connect_retries === -1 || self.retries < self.max_connect_retries)) {
if (!self.connecting) {
setTimeout(function () {
self.connect();
Expand Down
14 changes: 14 additions & 0 deletions test/certs-generator.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash

echo Generating server key
openssl genrsa -out server.key 2048

echo Generating certificate signing request
openssl req -new -key server.key -out server.csr -config csr.config

echo Generating certificate from generated request
openssl x509 -req -in server.csr -signkey server.key -out server.cert -extfile csr.config -extensions v3_req

echo Generated certicate
echo
openssl x509 -in server.cert -noout -text
13 changes: 13 additions & 0 deletions test/csr.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
C = GB
ST = Test State or Province
L = Test Locality
O = Organization Name
OU = Organizational Unit Name
CN = Common Name
[ v3_req ]
subjectAltName = DNS.1: localhost, IP.1: 127.0.0.1
File renamed without changes.
28 changes: 28 additions & 0 deletions test/server-fail.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSrWDfSigJZfSs
iBBaX5DX6DA/e2q2PapdLMZq1bcpB5L/RVikzHHrOz7HwxNjJQFrn1jO8HQRCOIL
OhnN01HsXvYR0EL/aIUEZn7Uf0r9yIoKD/wQn9oPessHmvysJImXH6ZfDw74F+10
kxncaFnXcKgJH5s1PHGNs5PeILcyyMb8yGVnDgUWIZEApNUCaqAxz2PFt2aNjthT
diLRxjEuWWnVMXjAdpLj+Bpp3QUJXgllIGTpHFICPg1Fy33qjxRIKI17JVANXeRf
qyHUT9yle3+Y8UBMcDtFfRi/7GFFKFU0+1pd3d1Ha+pHHIrASsSKK7CkoisKqnV2
2iwnXMzNAgMBAAECggEAf/fQX9ErgIntlN8RD9P8pyjiJa1RpGDQmsgXvc0S9Fkl
cOkubuvARqI2ACD+JbrUogqoZwqndbFvnGIuSleR64HC9g8KoxlZstKPN4QaiQzG
zFXpRi/SxJRRvszlraqD6MfQxuzeqtPd6HFxw++eor5LUz9fh3avguMRbltw6+bu
E5y8ej2+XdBeonlUuMoDteRq28hs3zxrnL/e9lIxY7ULSFlz5gS5I+IfxNyGEXeV
KGVRqKarW1Nyh5BlVuUnMN14yB9s0gjI4dp3e2OIKHBcHglJqzHKWtsdjb1Hb09O
B3YS21dg2YWTKmfF/OvLn2W4TOlrYmsoeGEtIy0AAQKBgQD57UEr6Ef9jFVTsAPy
EtnnT+U7msMuHS7KN2VFHz1FOqOwcrKOK1I4ECpYz4GOyn00VaWz02Bv3Srhx6nN
uRWZw1i5RoBhzIEg9DDOwV84nWeSLMzTMBTC8Mhp/0n3NgUsifG13lYKIUR7sBmv
sRWdayBKgWgRKZrivCFAuTWtzQKBgQDXy/XVvwQ5ksH5E/kFL5LNdjxC6z3WOprX
NU3OiDzvuJt+Ince2yhFKg8sXKUQSmrfjkex0XYyzQFiDvzE7lH6ye0xzZg+MUoR
wa5ugk2iTuq9lktFQxMZllEhUb9//1nqX7FlakTDMde15T45EwDT6TjudICHsZWt
QNV9GZybAQKBgGLboPLAL3GwR7QRpI3lPQINDUx1XAzqiC5+mPUtdSvkFQlfZRdt
NVlts4JrmgCkQcAovKGT08qLvkGOm7D/K/clWPv4UiHdJZqmXIP74zFeubANPnuu
wheV7IBY9aXuXT+P1OcuafQZ0p/mOVLQhg89Z4lxBHv9bAGRjsmuOPhlAoGAfZQp
uXtxf/eRfdtLnOL0cTCPHPo8gACWvwo7/yZ1H6O0iRCRdZlfs/An6E75l6NW0kXA
HxCf0ixO07uZCRkPB/yeVc8o+3g/fFnTomedughmvnFJ2EKSSN+a0uL5qAj3UFbj
qvrOjTDiMO346cnPP4KHKO0PJugHDE2gby6KXgECgYEA6KpLRrI9FmNKILJ3FRcr
go3J6oR3EuQllwLeUQsBnwfk66d50x6+VPWWcBLYzqhAjwPJh1zOGjtQBqoE1FS6
oqVTVrljRaiczonOl0boJZ08F5Phbm6dAxk+kMW3HdUQ95765JJrDpEW2q3sUJLB
ZUiY6/aNB+H+HH/vydXhCT0=
-----END PRIVATE KEY-----
23 changes: 23 additions & 0 deletions test/server.cert
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID2TCCAsGgAwIBAgIJAIRJZ1kGT4ZGMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYD
VQQGEwJHQjEfMB0GA1UECBMWVGVzdCBTdGF0ZSBvciBQcm92aW5jZTEWMBQGA1UE
BxMNVGVzdCBMb2NhbGl0eTEaMBgGA1UEChMRT3JnYW5pemF0aW9uIE5hbWUxITAf
BgNVBAsTGE9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZTEUMBIGA1UEAxMLQ29tbW9u
IE5hbWUwHhcNMTMxMTE0MTYzMzM5WhcNMTMxMjE0MTYzMzM5WjCBmzELMAkGA1UE
BhMCR0IxHzAdBgNVBAgTFlRlc3QgU3RhdGUgb3IgUHJvdmluY2UxFjAUBgNVBAcT
DVRlc3QgTG9jYWxpdHkxGjAYBgNVBAoTEU9yZ2FuaXphdGlvbiBOYW1lMSEwHwYD
VQQLExhPcmdhbml6YXRpb25hbCBVbml0IE5hbWUxFDASBgNVBAMTC0NvbW1vbiBO
YW1lMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArpabpovFB5NQXlNx
bMY696BZRx/AIpW5ouqsrr7ISFoNJlg7lSfjcli6h6OAk+BYQz/uVYw0VdT1vNRe
++cquGfmvQMv8wbWPW7mjMnZegvGmbwZZiVxcWeinTA1+JNd+HB2a2sqVv0nDUee
Ke8cOlgkIShrsTvkCAwOAJMM+/Es1UdqxV2T68zJk/N9sYrckV1M3WlQcIxCMV/u
0Qk2gUu2FyV8ghsQp8Mm4O+TvWBBPNqkHwXN7fdsVqq5Qx4WY0KaL5/SQK25zcDM
fN48Yqm03ccfb8S0STUH5zLtOKRNQPFVUJh4Be9MYzZugfULVZNmbZN0rpyjJ6nd
ZMGK5wIDAQABox4wHDAaBgNVHREEEzARgglsb2NhbGhvc3SHBH8AAAEwDQYJKoZI
hvcNAQEFBQADggEBAD2nQNFbqklcZOR2KqIXYHMGihtYJK/twAzR/YJIDy7GKFWj
pr77BUN9iRVDHCbww78WUPJ8NIrY2iTNoDwWlCbQlmpyvFc6Rv2k855XmN2hrdU9
FqwSTIvTwVH11Ue66IcZ7xIQCnEGmCeB5qg7ueMYuO/wbuEHggTd16AS7ZOS62Qw
f7CTzMk4U+ZJaqOwm8JkjOfoSU6L9nCCLu5iECKNnhubMhIIbY5r3Y28tQKMtT/M
sWxrJunAeTRlL97q7YXyZKIGDPqKZhK3hSyc66jj2a6aBXSltKBG4RElNbuw8SQ/
QHWmJtkpng/V5HjKC9CSLq6YWlJ9ER2qsVQbToM=
-----END CERTIFICATE-----
19 changes: 19 additions & 0 deletions test/server.csr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIDDjCCAfYCAQAwgZsxCzAJBgNVBAYTAkdCMR8wHQYDVQQIExZUZXN0IFN0YXRl
IG9yIFByb3ZpbmNlMRYwFAYDVQQHEw1UZXN0IExvY2FsaXR5MRowGAYDVQQKExFP
cmdhbml6YXRpb24gTmFtZTEhMB8GA1UECxMYT3JnYW5pemF0aW9uYWwgVW5pdCBO
YW1lMRQwEgYDVQQDEwtDb21tb24gTmFtZTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAK6Wm6aLxQeTUF5TcWzGOvegWUcfwCKVuaLqrK6+yEhaDSZYO5Un
43JYuoejgJPgWEM/7lWMNFXU9bzUXvvnKrhn5r0DL/MG1j1u5ozJ2XoLxpm8GWYl
cXFnop0wNfiTXfhwdmtrKlb9Jw1HninvHDpYJCEoa7E75AgMDgCTDPvxLNVHasVd
k+vMyZPzfbGK3JFdTN1pUHCMQjFf7tEJNoFLthclfIIbEKfDJuDvk71gQTzapB8F
ze33bFaquUMeFmNCmi+f0kCtuc3AzHzePGKptN3HH2/EtEk1B+cy7TikTUDxVVCY
eAXvTGM2boH1C1WTZm2TdK6coyep3WTBiucCAwEAAaAtMCsGCSqGSIb3DQEJDjEe
MBwwGgYDVR0RBBMwEYIJbG9jYWxob3N0hwR/AAABMA0GCSqGSIb3DQEBBQUAA4IB
AQBQN6fOkBYelN/S1Sc9BC/EjkOUiUYJC+Wt7AzYwqEHpEcZ3qciZBnTDZUmjmd0
0NPM0klY0oygEpbV/aXQFDK9me/3vBF4TlXchTDOLLzvzbXvvnZbp3j5n1TzS4vu
HW+g52D87fWhjElNk4wPD2WrYagdxflTpL0TAoWl+7uW5krVa9gTTwgCQ6vw/4IV
1QdyT2G4TjUQBjk5yBerlj1k2Wzdn5ZgGnKAVBbO09raFwY0J+5JTBl+X/os7gW9
1w84wMnsd5vrsVi0UAnzwF5ZOziP2DDn+4cGe33bSvHgNP30NUXhtkX/3v6a74Tz
jYf1EnwrrWVKPmkH96V3YB5e
-----END CERTIFICATE REQUEST-----
55 changes: 27 additions & 28 deletions test/server.key
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSrWDfSigJZfSs
iBBaX5DX6DA/e2q2PapdLMZq1bcpB5L/RVikzHHrOz7HwxNjJQFrn1jO8HQRCOIL
OhnN01HsXvYR0EL/aIUEZn7Uf0r9yIoKD/wQn9oPessHmvysJImXH6ZfDw74F+10
kxncaFnXcKgJH5s1PHGNs5PeILcyyMb8yGVnDgUWIZEApNUCaqAxz2PFt2aNjthT
diLRxjEuWWnVMXjAdpLj+Bpp3QUJXgllIGTpHFICPg1Fy33qjxRIKI17JVANXeRf
qyHUT9yle3+Y8UBMcDtFfRi/7GFFKFU0+1pd3d1Ha+pHHIrASsSKK7CkoisKqnV2
2iwnXMzNAgMBAAECggEAf/fQX9ErgIntlN8RD9P8pyjiJa1RpGDQmsgXvc0S9Fkl
cOkubuvARqI2ACD+JbrUogqoZwqndbFvnGIuSleR64HC9g8KoxlZstKPN4QaiQzG
zFXpRi/SxJRRvszlraqD6MfQxuzeqtPd6HFxw++eor5LUz9fh3avguMRbltw6+bu
E5y8ej2+XdBeonlUuMoDteRq28hs3zxrnL/e9lIxY7ULSFlz5gS5I+IfxNyGEXeV
KGVRqKarW1Nyh5BlVuUnMN14yB9s0gjI4dp3e2OIKHBcHglJqzHKWtsdjb1Hb09O
B3YS21dg2YWTKmfF/OvLn2W4TOlrYmsoeGEtIy0AAQKBgQD57UEr6Ef9jFVTsAPy
EtnnT+U7msMuHS7KN2VFHz1FOqOwcrKOK1I4ECpYz4GOyn00VaWz02Bv3Srhx6nN
uRWZw1i5RoBhzIEg9DDOwV84nWeSLMzTMBTC8Mhp/0n3NgUsifG13lYKIUR7sBmv
sRWdayBKgWgRKZrivCFAuTWtzQKBgQDXy/XVvwQ5ksH5E/kFL5LNdjxC6z3WOprX
NU3OiDzvuJt+Ince2yhFKg8sXKUQSmrfjkex0XYyzQFiDvzE7lH6ye0xzZg+MUoR
wa5ugk2iTuq9lktFQxMZllEhUb9//1nqX7FlakTDMde15T45EwDT6TjudICHsZWt
QNV9GZybAQKBgGLboPLAL3GwR7QRpI3lPQINDUx1XAzqiC5+mPUtdSvkFQlfZRdt
NVlts4JrmgCkQcAovKGT08qLvkGOm7D/K/clWPv4UiHdJZqmXIP74zFeubANPnuu
wheV7IBY9aXuXT+P1OcuafQZ0p/mOVLQhg89Z4lxBHv9bAGRjsmuOPhlAoGAfZQp
uXtxf/eRfdtLnOL0cTCPHPo8gACWvwo7/yZ1H6O0iRCRdZlfs/An6E75l6NW0kXA
HxCf0ixO07uZCRkPB/yeVc8o+3g/fFnTomedughmvnFJ2EKSSN+a0uL5qAj3UFbj
qvrOjTDiMO346cnPP4KHKO0PJugHDE2gby6KXgECgYEA6KpLRrI9FmNKILJ3FRcr
go3J6oR3EuQllwLeUQsBnwfk66d50x6+VPWWcBLYzqhAjwPJh1zOGjtQBqoE1FS6
oqVTVrljRaiczonOl0boJZ08F5Phbm6dAxk+kMW3HdUQ95765JJrDpEW2q3sUJLB
ZUiY6/aNB+H+HH/vydXhCT0=
-----END PRIVATE KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEArpabpovFB5NQXlNxbMY696BZRx/AIpW5ouqsrr7ISFoNJlg7
lSfjcli6h6OAk+BYQz/uVYw0VdT1vNRe++cquGfmvQMv8wbWPW7mjMnZegvGmbwZ
ZiVxcWeinTA1+JNd+HB2a2sqVv0nDUeeKe8cOlgkIShrsTvkCAwOAJMM+/Es1Udq
xV2T68zJk/N9sYrckV1M3WlQcIxCMV/u0Qk2gUu2FyV8ghsQp8Mm4O+TvWBBPNqk
HwXN7fdsVqq5Qx4WY0KaL5/SQK25zcDMfN48Yqm03ccfb8S0STUH5zLtOKRNQPFV
UJh4Be9MYzZugfULVZNmbZN0rpyjJ6ndZMGK5wIDAQABAoIBAGmAQ3DCF387ax6F
CA62P13yPOD4888ycSpc65rxWPA30qhwOxkoMI6hxZ4/lGxH7q48zNZPUjTn6tN/
9iH9EFi9GLbxXSFb6UzYXmOHem8A/LNb8nFCgSoJeT/JqWOcEfYWZ8kDymMkuVuS
AqbOgl1TdAnBdkp0qZifSDraoccAd/VZFQA/aOIqiWGlYFb1nOpySbc+TrLlRhVz
jAOGfCs7lAFHf3FDFJOGyrIQ/othTc1ffHxfqTMYpi3szcfTBIAG1/xE/EyN5CHz
DFXfwkUU66JRll8j/E0B9OnDSuogi4FYFrqWJ+fjNPB4vxHaC8dQ+q7JehYPNWP9
A2LKiOECgYEA2mZ0PVuuhsZpv6YuoFua2nDQLCZ+p6VQjK6MasTuyEBqln3pV65B
m9xIegf4wgSCd8sh6Ops7FAw4cTy9DueB3vBzdG/kgupxo0zbDGmpaecUmXl2IVe
VaA4YWPU82Pw3tT//vpeYyOmKUTLEbtemj2xQrc/HnaddV6hOsAl9dcCgYEAzKU7
w+PJ/+QLYZuAUZq0GxQS+uOpUEW8U5SyD5ANh7sCImRa2bPhfFqefdxIQdcr2nQZ
OqdXa+sjug7CtyI+ZlGd0oHFiYhyc1WAXKlVrAtFb+ssWo40rUvvB+4H42q7I5SS
lCYxRjLd/Qph7X3M7je25PC4GVRSIWYQnBOhUXECgYBDqZo5qD3Z436/sWygocDI
DEtyYjq7Faxu6WT3byvLPqnHFhtE3ufUsdqCdBXNhjglhPlsf7RfQjjiuXHL2OyM
xPq2GVWQmaxvpy9XRcqrZ9I2dPtQqYEgZhMRmSxQe5YUc0kcZdT4QgMopfeD9tjI
UHSqhrs3ZOhDhJ3O5djc4QKBgQCI8DBT3oN29dQf1nxBHvJSBFbHB7xueJuSmjek
blJ/dsXw2ZJphxLlsYXI1rSLSj6QCYwwUXYQQuI/SE1HWmTC9u5SxH+4jlN3lck1
OCKZ41jtkUK2vd3F8L/cYI1qwirDnlGPTRc/0B33ixEIaFvPM/zwqZunZ2Ml8jQ/
HGugIQKBgQCWuZGkOz8bAGLiRifzqJJLPLPjR0IoNaljTL6h2ISl9RM3sLnSmeEa
klB8VmmPni/GxmJb6c1nj2qejw2mAqKa28KW5hYF4tkkbTasj1YE7MYsggoI4DRm
TndRVohGMPflZEbY9+lteF8oZE5igsB/qFPIsRZt2cIwUtd7+Ad59g==
-----END RSA PRIVATE KEY-----
39 changes: 31 additions & 8 deletions test/winston-logstash_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ describe('winston-logstash transport', function() {

function createTestSecureServer(port, options, on_data) {
var serverOptions = {
key: fs.readFileSync(__dirname + '/server.key'),
cert: fs.readFileSync(__dirname + '/server.pub'),
key: (options.serverKey) ? fs.readFileSync(options.serverKey) : fs.readFileSync(__dirname + '/server.key'),
cert: (options.serverCert) ? fs.readFileSync(options.serverCert) : fs.readFileSync(__dirname + '/server.cert'),
handshakeTimeout: 2000,
requestCert: options.verify ? options.verify : false,
ca: options.verify ? [ fs.readFileSync(__dirname + '/client.pub') ] : []
Expand All @@ -43,15 +43,16 @@ describe('winston-logstash transport', function() {
return server
}

function createLogger(port, secure) {
function createLogger(port, secure, caFilePath) {
return new (winston.Logger)({
transports: [
new (winston.transports.Logstash)({
port: port,
node_name: 'test',
localhost: 'localhost',
pid: 12345 ,
ssl_enable: secure ? true : false
ssl_enable: secure ? true : false,
ca: (secure && caFilePath) ? [__dirname + '/server.cert'] : undefined
})
]
});
Expand Down Expand Up @@ -113,7 +114,7 @@ describe('winston-logstash transport', function() {

it('send logs over SSL secured TCP as valid json', function(done) {
var response;
var logger = createLogger(port, true);
var logger = createLogger(port, true, __dirname + '/server.cert');
var expected = {"stream":"sample","level":"info","message":"hello world"};

test_server = createTestSecureServer(port, {}, function (data) {
Expand All @@ -127,7 +128,7 @@ describe('winston-logstash transport', function() {

it('send logs over SSL secured TCP as valid json with SSL verification', function(done) {
var response;
var logger = createLogger(port, true);
var logger = createLogger(port, true, __dirname + '/server.cert');
var expected = {"stream":"sample","level":"info","message":"hello world"};

test_server = createTestSecureServer(port, { verify: true }, function (data) {
Expand All @@ -139,6 +140,30 @@ describe('winston-logstash transport', function() {
logger.log('info', 'hello world', {stream: 'sample'});
});


it('logstash transport receive an error when there is a connection error different from ECONNREFUSED', function(done) {
var response;
var logger = createLogger(port, true, __dirname + '/server-fail.cert');
var expected = {"stream":"sample","level":"info","message":"hello world"};

test_server = createTestSecureServer(port, {
serverKey: __dirname + '/server-fail.key',
serverCert: __dirname + '/server-fail.cert',
verify: true
}, function (data) {
response = data.toString();
expect(JSON.parse(response)).to.be.eql(expected);
done();
});

logger.transports.logstash.on('error', function (err) {
expect(err).to.be.an.instanceof(Error);
done();
});

logger.log('info', 'hello world', {stream: 'sample'});
});

// Teardown
afterEach(function () {
if (test_server) {
Expand Down Expand Up @@ -171,8 +196,6 @@ describe('winston-logstash transport', function() {

});
});


});