aboutsummaryrefslogtreecommitdiffstats
path: root/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/logstashUDP-test.js
blob: 25d356c9ef885c20ec049372fc99c095e3077e2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
"use strict";
var vows = require('vows')
, assert = require('assert')
, log4js = require('../lib/log4js')
, sandbox = require('sandboxed-module')
;

function setupLogging(category, options) {
  var udpSent = {};

  var fakeDgram = {
    createSocket: function (type) {
      return {
        send: function(buffer, offset, length, port, host, callback) {
          udpSent.date = new Date();
          udpSent.host = host;
          udpSent.port = port;
          udpSent.length = length;
          udpSent.offset = 0;
          udpSent.buffer = buffer;
          callback(undefined, length);
        }
      };
    }
  };

  var logstashModule = sandbox.require('../lib/appenders/logstashUDP', {
    requires: {
      'dgram': fakeDgram
    }
  });
  log4js.clearAppenders();
  log4js.addAppender(logstashModule.configure(options), category);

  return {
    logger: log4js.getLogger(category),
    results: udpSent
  };
}

vows.describe('logstashUDP appender').addBatch({
  'when logging with logstash via UDP': {
    topic: function() {
      var setup = setupLogging('myCategory', {
        "host": "127.0.0.1",
        "port": 10001,
        "type": "logstashUDP",
        "logType": "myAppType",
        "category": "myLogger",
        "fields": {
          "field1": "value1",
          "field2": "value2"
        },
        "layout": {
          "type": "pattern",
          "pattern": "%m"
        }
      });
      setup.logger.log('trace', 'Log event #1');
      return setup;
    },
    'an UDP packet should be sent': function (topic) {
      assert.equal(topic.results.host, "127.0.0.1");
      assert.equal(topic.results.port, 10001);
      assert.equal(topic.results.offset, 0);
      var json = JSON.parse(topic.results.buffer.toString());
      assert.equal(json.type, 'myAppType');
      var fields = {
        field1: 'value1',
        field2: 'value2',
        level: 'TRACE'
      };
      assert.equal(JSON.stringify(json.fields), JSON.stringify(fields));
      assert.equal(json.message, 'Log event #1');
      // Assert timestamp, up to hours resolution.
      var date = new Date(json['@timestamp']);
      assert.equal(
        date.toISOString().substring(0, 14),
        topic.results.date.toISOString().substring(0, 14)
      );
    }
  },

  'when missing some options': {
    topic: function() {
      var setup = setupLogging('myLogger', {
        "host": "127.0.0.1",
        "port": 10001,
        "type": "logstashUDP",
        "category": "myLogger",
        "layout": {
          "type": "pattern",
          "pattern": "%m"
        }
      });
      setup.logger.log('trace', 'Log event #1');
      return setup;
    },
    'it sets some defaults': function (topic) {
      var json = JSON.parse(topic.results.buffer.toString());
      assert.equal(json.type, 'myLogger');
      assert.equal(JSON.stringify(json.fields), JSON.stringify({'level': 'TRACE'}));
    }
  },

  'when extra fields provided': {
    topic: function() {
      var setup = setupLogging('myLogger', {
        "host": "127.0.0.1",
        "port": 10001,
        "type": "logstashUDP",
        "category": "myLogger",
        "layout": {
          "type": "dummy"
        }
      });
      setup.logger.log('trace', 'Log event #1', {'extra1': 'value1', 'extra2': 'value2'});
      return setup;
    },'they should be added to fields structure': function (topic) {
      var json = JSON.parse(topic.results.buffer.toString());
      var fields = {'extra1': 'value1', 'extra2': 'value2', 'level': 'TRACE'};
      assert.equal(JSON.stringify(json.fields), JSON.stringify(fields));
    }
  }

}).export(module);