Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Avatar for KuCalc : devops.
Download
50659 views
1
/*
2
* helpers.js: Test helpers for winston
3
*
4
* (C) 2010 Charlie Robbins
5
* MIT LICENSE
6
*
7
*/
8
9
var assert = require('assert'),
10
fs = require('fs'),
11
path = require('path'),
12
spawn = require('child_process').spawn,
13
util = require('util'),
14
vows = require('vows'),
15
winston = require('../lib/winston');
16
17
var helpers = exports;
18
19
helpers.size = function (obj) {
20
var size = 0, key;
21
for (key in obj) {
22
if (obj.hasOwnProperty(key)) {
23
size++;
24
}
25
}
26
27
return size;
28
};
29
30
helpers.tryUnlink = function (file) {
31
try { fs.unlinkSync(file) }
32
catch (ex) { }
33
};
34
35
helpers.assertDateInfo = function (info) {
36
assert.isNumber(Date.parse(info));
37
};
38
39
helpers.assertProcessInfo = function (info) {
40
assert.isNumber(info.pid);
41
assert.isNumber(info.uid);
42
assert.isNumber(info.gid);
43
assert.isString(info.cwd);
44
assert.isString(info.execPath);
45
assert.isString(info.version);
46
assert.isArray(info.argv);
47
assert.isObject(info.memoryUsage);
48
};
49
50
helpers.assertOsInfo = function (info) {
51
assert.isArray(info.loadavg);
52
assert.isNumber(info.uptime);
53
};
54
55
helpers.assertTrace = function (trace) {
56
trace.forEach(function (site) {
57
assert.isTrue(!site.column || typeof site.column === 'number');
58
assert.isTrue(!site.line || typeof site.line === 'number');
59
assert.isTrue(!site.file || typeof site.file === 'string');
60
assert.isTrue(!site.method || typeof site.method === 'string');
61
assert.isTrue(!site.function || typeof site.function === 'string');
62
assert.isTrue(typeof site.native === 'boolean');
63
});
64
};
65
66
helpers.assertLogger = function (logger, level) {
67
assert.instanceOf(logger, winston.Logger);
68
assert.isFunction(logger.log);
69
assert.isFunction(logger.add);
70
assert.isFunction(logger.remove);
71
assert.equal(logger.level, level || "info");
72
Object.keys(logger.levels).forEach(function (method) {
73
assert.isFunction(logger[method]);
74
});
75
};
76
77
helpers.assertConsole = function (transport) {
78
assert.instanceOf(transport, winston.transports.Console);
79
assert.isFunction(transport.log);
80
};
81
82
helpers.assertFile = function (transport) {
83
assert.instanceOf(transport, winston.transports.File);
84
assert.isFunction(transport.log);
85
}
86
87
helpers.assertWebhook = function (transport) {
88
assert.instanceOf(transport, winston.transports.Webhook);
89
assert.isFunction(transport.log);
90
};
91
92
helpers.assertCouchdb = function (transport) {
93
assert.instanceOf(transport, winston.transports.Couchdb);
94
assert.isFunction(transport.log);
95
};
96
97
helpers.assertHandleExceptions = function (options) {
98
return {
99
topic: function () {
100
var that = this,
101
child = spawn('node', [options.script]);
102
103
helpers.tryUnlink(options.logfile);
104
child.on('exit', function () {
105
fs.readFile(options.logfile, that.callback);
106
});
107
},
108
"should save the error information to the specified file": function (err, data) {
109
assert.isTrue(!err);
110
data = JSON.parse(data);
111
112
assert.isObject(data);
113
helpers.assertProcessInfo(data.process);
114
helpers.assertOsInfo(data.os);
115
helpers.assertTrace(data.trace);
116
}
117
}
118
}
119
120
helpers.testNpmLevels = function (transport, assertMsg, assertFn) {
121
return helpers.testLevels(winston.config.npm.levels, transport, assertMsg, assertFn);
122
};
123
124
helpers.testSyslogLevels = function (transport, assertMsg, assertFn) {
125
return helpers.testLevels(winston.config.syslog.levels, transport, assertMsg, assertFn);
126
};
127
128
helpers.testLevels = function (levels, transport, assertMsg, assertFn) {
129
var tests = {};
130
131
Object.keys(levels).forEach(function (level) {
132
var test = {
133
topic: function () {
134
transport.log(level, 'test message', {}, this.callback.bind(this, null));
135
}
136
};
137
138
test[assertMsg] = assertFn;
139
tests['with the ' + level + ' level'] = test;
140
});
141
142
var metadatatest = {
143
topic: function () {
144
transport.log('info', 'test message', { metadata: true }, this.callback.bind(this, null));
145
}
146
};
147
148
metadatatest[assertMsg] = assertFn;
149
tests['when passed metadata'] = metadatatest;
150
151
var primmetadatatest = {
152
topic: function () {
153
transport.log('info', 'test message', 'metadata', this.callback.bind(this, null));
154
}
155
};
156
157
primmetadatatest[assertMsg] = assertFn;
158
tests['when passed primitive metadata'] = primmetadatatest;
159
160
var circmetadata = { };
161
circmetadata['metadata'] = circmetadata;
162
163
var circmetadatatest = {
164
topic: function () {
165
transport.log('info', 'test message', circmetadata, this.callback.bind(this, null));
166
}
167
};
168
169
circmetadatatest[assertMsg] = assertFn;
170
tests['when passed circular metadata'] = circmetadatatest;
171
172
return tests;
173
};
174
175