Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / log4js / test / smtpAppender-test.js
1 "use strict";
2 var vows = require('vows');
3 var assert = require('assert');
4 var log4js = require('../lib/log4js');
5 var sandbox = require('sandboxed-module');
6
7 function setupLogging(category, options) {
8     var msgs = [];
9
10     var fakeMailer = {
11         createTransport: function (name, options) {
12             return {
13                 config: options,
14                 sendMail: function (msg, callback) {
15                     msgs.push(msg);
16                     callback(null, true);
17                 },
18                 close: function () {
19                 }
20             };
21         }
22     };
23
24     var fakeLayouts = {
25         layout: function (type, config) {
26             this.type = type;
27             this.config = config;
28             return log4js.layouts.messagePassThroughLayout;
29         },
30         basicLayout: log4js.layouts.basicLayout,
31         messagePassThroughLayout: log4js.layouts.messagePassThroughLayout
32     };
33
34     var fakeConsole = {
35         errors: [],
36         error: function (msg, value) {
37             this.errors.push({msg: msg, value: value});
38         }
39     };
40
41     var fakeTransportPlugin = function () {
42     };
43
44     var smtpModule = sandbox.require('../lib/appenders/smtp', {
45         requires: {
46             'nodemailer': fakeMailer,
47             'nodemailer-sendmail-transport': fakeTransportPlugin,
48             'nodemailer-smtp-transport': fakeTransportPlugin,
49             '../layouts': fakeLayouts
50         },
51         globals: {
52             console: fakeConsole
53         }
54     });
55
56     log4js.addAppender(smtpModule.configure(options), category);
57
58     return {
59         logger: log4js.getLogger(category),
60         mailer: fakeMailer,
61         layouts: fakeLayouts,
62         console: fakeConsole,
63         results: msgs
64     };
65 }
66
67 function checkMessages(result, sender, subject) {
68     for (var i = 0; i < result.results.length; ++i) {
69         assert.equal(result.results[i].from, sender);
70         assert.equal(result.results[i].to, 'recipient@domain.com');
71         assert.equal(result.results[i].subject, subject ? subject : 'Log event #' + (i + 1));
72         assert.ok(new RegExp('.+Log event #' + (i + 1) + '\n$').test(result.results[i].text));
73     }
74 }
75
76 log4js.clearAppenders();
77 vows.describe('log4js smtpAppender').addBatch({
78     'minimal config': {
79         topic: function () {
80             var setup = setupLogging('minimal config', {
81                 recipients: 'recipient@domain.com',
82                 SMTP: {
83                     port: 25,
84                     auth: {
85                         user: 'user@domain.com'
86                     }
87                 }
88             });
89             setup.logger.info('Log event #1');
90             return setup;
91         },
92         'there should be one message only': function (result) {
93             assert.equal(result.results.length, 1);
94         },
95         'message should contain proper data': function (result) {
96             checkMessages(result);
97         }
98     },
99     'fancy config': {
100         topic: function () {
101             var setup = setupLogging('fancy config', {
102                 recipients: 'recipient@domain.com',
103                 sender: 'sender@domain.com',
104                 subject: 'This is subject',
105                 SMTP: {
106                     port: 25,
107                     auth: {
108                         user: 'user@domain.com'
109                     }
110                 }
111             });
112             setup.logger.info('Log event #1');
113             return setup;
114         },
115         'there should be one message only': function (result) {
116             assert.equal(result.results.length, 1);
117         },
118         'message should contain proper data': function (result) {
119             checkMessages(result, 'sender@domain.com', 'This is subject');
120         }
121     },
122     'config with layout': {
123         topic: function () {
124             var setup = setupLogging('config with layout', {
125                 layout: {
126                     type: "tester"
127                 }
128             });
129             return setup;
130         },
131         'should configure layout': function (result) {
132             assert.equal(result.layouts.type, 'tester');
133         }
134     },
135     'separate email for each event': {
136         topic: function () {
137             var self = this;
138             var setup = setupLogging('separate email for each event', {
139                 recipients: 'recipient@domain.com',
140                 SMTP: {
141                     port: 25,
142                     auth: {
143                         user: 'user@domain.com'
144                     }
145                 }
146             });
147             setTimeout(function () {
148                 setup.logger.info('Log event #1');
149             }, 0);
150             setTimeout(function () {
151                 setup.logger.info('Log event #2');
152             }, 500);
153             setTimeout(function () {
154                 setup.logger.info('Log event #3');
155             }, 1100);
156             setTimeout(function () {
157                 self.callback(null, setup);
158             }, 3000);
159         },
160         'there should be three messages': function (result) {
161             assert.equal(result.results.length, 3);
162         },
163         'messages should contain proper data': function (result) {
164             checkMessages(result);
165         }
166     },
167     'multiple events in one email': {
168         topic: function () {
169             var self = this;
170             var setup = setupLogging('multiple events in one email', {
171                 recipients: 'recipient@domain.com',
172                 sendInterval: 1,
173                 SMTP: {
174                     port: 25,
175                     auth: {
176                         user: 'user@domain.com'
177                     }
178                 }
179             });
180             setTimeout(function () {
181                 setup.logger.info('Log event #1');
182             }, 0);
183             setTimeout(function () {
184                 setup.logger.info('Log event #2');
185             }, 100);
186             setTimeout(function () {
187                 setup.logger.info('Log event #3');
188             }, 1500);
189             setTimeout(function () {
190                 self.callback(null, setup);
191             }, 3000);
192         },
193         'there should be two messages': function (result) {
194             assert.equal(result.results.length, 2);
195         },
196         'messages should contain proper data': function (result) {
197             assert.equal(result.results[0].to, 'recipient@domain.com');
198             assert.equal(result.results[0].subject, 'Log event #1');
199             assert.equal(
200               result.results[0].text.match(new RegExp('.+Log event #[1-2]$', 'gm')).length,
201               2
202             );
203             assert.equal(result.results[1].to, 'recipient@domain.com');
204             assert.equal(result.results[1].subject, 'Log event #3');
205             assert.ok(new RegExp('.+Log event #3\n$').test(result.results[1].text));
206         }
207     },
208     'error when sending email': {
209         topic: function () {
210             var setup = setupLogging('error when sending email', {
211                 recipients: 'recipient@domain.com',
212                 sendInterval: 0,
213                 SMTP: {port: 25, auth: {user: 'user@domain.com'}}
214             });
215
216             setup.mailer.createTransport = function () {
217                 return {
218                     sendMail: function (msg, cb) {
219                         cb({message: "oh noes"});
220                     },
221                     close: function () {
222                     }
223                 };
224             };
225
226             setup.logger.info("This will break");
227             return setup.console;
228         },
229         'should be logged to console': function (cons) {
230             assert.equal(cons.errors.length, 1);
231             assert.equal(cons.errors[0].msg, "log4js.smtpAppender - Error happened");
232             assert.equal(cons.errors[0].value.message, 'oh noes');
233         }
234     },
235     'transport full config': {
236         topic: function () {
237             var setup = setupLogging('transport full config', {
238                 recipients: 'recipient@domain.com',
239                 transport: {
240                     plugin: 'sendmail',
241                     options: {
242                         path: '/usr/sbin/sendmail'
243                     }
244                 }
245             });
246             setup.logger.info('Log event #1');
247             return setup;
248         },
249         'there should be one message only': function (result) {
250             assert.equal(result.results.length, 1);
251         },
252         'message should contain proper data': function (result) {
253             checkMessages(result);
254         }
255     },
256     'transport no-options config': {
257         topic: function () {
258             var setup = setupLogging('transport no-options config', {
259                 recipients: 'recipient@domain.com',
260                 transport: {
261                     plugin: 'sendmail'
262                 }
263             });
264             setup.logger.info('Log event #1');
265             return setup;
266         },
267         'there should be one message only': function (result) {
268             assert.equal(result.results.length, 1);
269         },
270         'message should contain proper data': function (result) {
271             checkMessages(result);
272         }
273     },
274     'transport no-plugin config': {
275         topic: function () {
276             var setup = setupLogging('transport no-plugin config', {
277                 recipients: 'recipient@domain.com',
278                 transport: {
279                 }
280             });
281             setup.logger.info('Log event #1');
282             return setup;
283         },
284         'there should be one message only': function (result) {
285             assert.equal(result.results.length, 1);
286         },
287         'message should contain proper data': function (result) {
288             checkMessages(result);
289         }
290     },
291     'attachment config': {
292         topic: function () {
293             var setup = setupLogging('attachment config', {
294                 recipients: 'recipient@domain.com',
295                 attachment: {
296                     enable: true
297                 },
298                 SMTP: {
299                     port: 25,
300                     auth: {
301                         user: 'user@domain.com'
302                     }
303                 }
304             });
305             setup.logger.info('Log event #1');
306             return setup;
307         },
308         'message should contain proper data': function (result) {
309             assert.equal(result.results.length, 1);
310             assert.equal(result.results[0].attachments.length, 1);
311             var attachment = result.results[0].attachments[0];
312             assert.equal(result.results[0].text, "See logs as attachment");
313             assert.equal(attachment.filename, "default.log");
314             assert.equal(attachment.contentType, "text/x-log");
315             assert.ok(new RegExp('.+Log event #' + 1 + '\n$').test(attachment.content));
316         }
317     }
318 }).export(module);