kayvee 3.18.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +147 -202
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/kayvee.d.ts +12 -0
- package/dist/kayvee.d.ts.map +1 -0
- package/{build/lib → dist}/kayvee.js +17 -30
- package/dist/logger/logger.d.ts +49 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/{build/lib → dist}/logger/logger.js +91 -83
- package/dist/middleware.d.ts +23 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +196 -0
- package/dist/package.json +89 -0
- package/dist/router/index.d.ts +23 -0
- package/dist/router/index.d.ts.map +1 -0
- package/{build/lib → dist}/router/index.js +33 -45
- package/package.json +63 -27
- package/.circleci/config.yml +0 -25
- package/.eslintrc.js +0 -124
- package/.github/workflows/notify-ci-status.yml +0 -20
- package/.nvmrc +0 -1
- package/.prettierrc.json +0 -1
- package/Makefile +0 -55
- package/benchmarks/data/.keep +0 -1
- package/benchmarks/data/corpus-basic.json +0 -22
- package/benchmarks/data/corpus-pathological.json +0 -22
- package/benchmarks/data/corpus-realistic.json +0 -22
- package/benchmarks/data/kvconfig-basic.yml +0 -7
- package/benchmarks/data/kvconfig-pathological.yml +0 -222
- package/benchmarks/data/kvconfig-realistic.yml +0 -39
- package/benchmarks/routing.js +0 -116
- package/build/lib/logger/helpers.js +0 -0
- package/build/lib/middleware.js +0 -274
- package/build/package.json +0 -53
- package/build/test/context_logger.js +0 -69
- package/build/test/kayvee.js +0 -36
- package/build/test/logger_test.js +0 -345
- package/build/test/middleware.js +0 -556
- package/build/test/router.js +0 -451
- package/index.js +0 -7
- package/lib/kayvee.ts +0 -73
- package/lib/logger/helpers.ts +0 -0
- package/lib/logger/logger.ts +0 -312
- package/lib/middleware.ts +0 -317
- package/lib/router/index.ts +0 -234
- package/lib/router/schema_definitions.json +0 -158
- package/test/context_logger.ts +0 -76
- package/test/kayvee.ts +0 -50
- package/test/kvconfig.yml +0 -14
- package/test/logger_test.ts +0 -378
- package/test/middleware.ts +0 -632
- package/test/router.ts +0 -558
- package/test/static/empty.css +0 -0
- package/test/static/js/empty.js +0 -0
- package/test/tests.json +0 -100
- package/tsconfig.json +0 -10
- /package/{build/lib → dist}/router/schema_definitions.json +0 -0
package/build/test/middleware.js
DELETED
|
@@ -1,556 +0,0 @@
|
|
|
1
|
-
var assert = require("assert");
|
|
2
|
-
var express = require("express");
|
|
3
|
-
var http = require("http");
|
|
4
|
-
var path = require("path");
|
|
5
|
-
var request = require("supertest");
|
|
6
|
-
var split = require("split");
|
|
7
|
-
var _ = require("underscore");
|
|
8
|
-
var kayee_logger = require("../lib/logger/logger");
|
|
9
|
-
var kv_middleware = require("../lib/middleware");
|
|
10
|
-
kayee_logger.setGlobalRouting(path.join(__dirname, "/kvconfig.yml"));
|
|
11
|
-
/*
|
|
12
|
-
* Helpers copied from expressjs/morgan
|
|
13
|
-
* https://github.com/expressjs/morgan/blob/master/test/morgan.js#L1332-L1380
|
|
14
|
-
*
|
|
15
|
-
* Modified `createServer`, since we are always testing Kayvee middleware here.
|
|
16
|
-
* Renamed `after` -> `afterTest`; preventing typescript errors from overloading a Mocha function.
|
|
17
|
-
*/
|
|
18
|
-
function afterTest(count, callback) {
|
|
19
|
-
var args = new Array(3);
|
|
20
|
-
var i = 0;
|
|
21
|
-
return (err, arg1, arg2) => {
|
|
22
|
-
assert.ok(i++ < count, `callback called ${count} times`);
|
|
23
|
-
args[0] = args[0] || err;
|
|
24
|
-
args[1] = args[1] || arg1;
|
|
25
|
-
args[2] = args[2] || arg2;
|
|
26
|
-
if (count === i) {
|
|
27
|
-
callback(...args);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function createLineStream(callback) {
|
|
32
|
-
return split().on("data", callback);
|
|
33
|
-
}
|
|
34
|
-
function noopMiddleware(req, res, next) {
|
|
35
|
-
next();
|
|
36
|
-
}
|
|
37
|
-
function createServer(server_type, clever_options, morgan_options, fn) {
|
|
38
|
-
var logger = kv_middleware(clever_options, morgan_options);
|
|
39
|
-
var middle = fn || noopMiddleware;
|
|
40
|
-
var server = null;
|
|
41
|
-
if (server_type === "http") {
|
|
42
|
-
server = http.createServer((req, res) => {
|
|
43
|
-
logger(req, res, (err) => {
|
|
44
|
-
// allow req, res alterations
|
|
45
|
-
middle(req, res, () => {
|
|
46
|
-
if (err) {
|
|
47
|
-
res.statusCode = 500;
|
|
48
|
-
res.end(err.message);
|
|
49
|
-
}
|
|
50
|
-
res.setHeader("X-Sent", "true");
|
|
51
|
-
res.setHeader("Content-Length", 12345);
|
|
52
|
-
res.end((req.connection && req.connection.remoteAddress) || "-");
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
else if (server_type === "express") {
|
|
58
|
-
var app = express();
|
|
59
|
-
app.use(logger);
|
|
60
|
-
app.use(express.static(`${__dirname}/static`));
|
|
61
|
-
app.get("*", (req, res) => {
|
|
62
|
-
res.header("Content-Length", 12345);
|
|
63
|
-
res.end();
|
|
64
|
-
});
|
|
65
|
-
server = app;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
throw new Error(`unknown server type: ${server_type}`);
|
|
69
|
-
}
|
|
70
|
-
return server;
|
|
71
|
-
}
|
|
72
|
-
_.each(["http", "express"], (serverType) => {
|
|
73
|
-
describe(`middleware for *${serverType}* server: prototype pollution testing`, () => {
|
|
74
|
-
it("params with toString is stripped", (done) => {
|
|
75
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
76
|
-
if (err) {
|
|
77
|
-
return done(err);
|
|
78
|
-
}
|
|
79
|
-
const expected = {
|
|
80
|
-
method: "GET",
|
|
81
|
-
path: "/hello/world",
|
|
82
|
-
params: "?",
|
|
83
|
-
"response-size": 12345,
|
|
84
|
-
"response-time": 99999,
|
|
85
|
-
"status-code": 200,
|
|
86
|
-
ip: "::ffff:127.0.0.1",
|
|
87
|
-
via: "kayvee-middleware",
|
|
88
|
-
level: "info",
|
|
89
|
-
title: "request-finished",
|
|
90
|
-
deploy_env: "testing",
|
|
91
|
-
wf_id: "abc",
|
|
92
|
-
source: "test-app",
|
|
93
|
-
_kvmeta: {
|
|
94
|
-
team: "UNSET",
|
|
95
|
-
kv_version: "X.X.X",
|
|
96
|
-
kv_language: "js",
|
|
97
|
-
routes: [
|
|
98
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
99
|
-
],
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
var actual = JSON.parse(line);
|
|
103
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
104
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
105
|
-
assert.deepEqual(actual, expected);
|
|
106
|
-
return done();
|
|
107
|
-
});
|
|
108
|
-
var stream = createLineStream((line) => {
|
|
109
|
-
cb(null, null, line);
|
|
110
|
-
});
|
|
111
|
-
var options = {
|
|
112
|
-
source: "test-app",
|
|
113
|
-
ignore_dir: {
|
|
114
|
-
directory: `${__dirname}/static`,
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
118
|
-
next();
|
|
119
|
-
});
|
|
120
|
-
// this one is logged
|
|
121
|
-
request(server).get("/hello/world?toString=foo").expect(200, cb);
|
|
122
|
-
});
|
|
123
|
-
it("params from actual attack is stripped", (done) => {
|
|
124
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
125
|
-
if (err) {
|
|
126
|
-
return done(err);
|
|
127
|
-
}
|
|
128
|
-
const expected = {
|
|
129
|
-
method: "GET",
|
|
130
|
-
path: "/hello/world",
|
|
131
|
-
params: "?",
|
|
132
|
-
"response-size": 12345,
|
|
133
|
-
"response-time": 99999,
|
|
134
|
-
"status-code": 200,
|
|
135
|
-
ip: "::ffff:127.0.0.1",
|
|
136
|
-
via: "kayvee-middleware",
|
|
137
|
-
level: "info",
|
|
138
|
-
title: "request-finished",
|
|
139
|
-
deploy_env: "testing",
|
|
140
|
-
wf_id: "abc",
|
|
141
|
-
source: "test-app",
|
|
142
|
-
_kvmeta: {
|
|
143
|
-
team: "UNSET",
|
|
144
|
-
kv_version: "X.X.X",
|
|
145
|
-
kv_language: "js",
|
|
146
|
-
routes: [
|
|
147
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
var actual = JSON.parse(line);
|
|
152
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
153
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
154
|
-
assert.deepEqual(actual, expected);
|
|
155
|
-
return done();
|
|
156
|
-
});
|
|
157
|
-
var stream = createLineStream((line) => {
|
|
158
|
-
cb(null, null, line);
|
|
159
|
-
});
|
|
160
|
-
var options = {
|
|
161
|
-
source: "test-app",
|
|
162
|
-
ignore_dir: {
|
|
163
|
-
directory: `${__dirname}/static`,
|
|
164
|
-
},
|
|
165
|
-
};
|
|
166
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
167
|
-
next();
|
|
168
|
-
});
|
|
169
|
-
const params = `__proto__[Expect]=xxx
|
|
170
|
-
&constructor[prototype][Expect]=xxx`;
|
|
171
|
-
// this one is logged
|
|
172
|
-
request(server).get(`/hello/world?${params}`).expect(200, cb);
|
|
173
|
-
});
|
|
174
|
-
});
|
|
175
|
-
describe(`middleware for *${serverType}* server`, () => {
|
|
176
|
-
it("should throw error on intialization if `source` not set in `options`", (done) => {
|
|
177
|
-
var options = {};
|
|
178
|
-
var erroringServer = () => createServer(serverType, options, null, (req, res, next) => {
|
|
179
|
-
res.setHeader("some-header", "some-header-value");
|
|
180
|
-
next();
|
|
181
|
-
});
|
|
182
|
-
assert.throws(erroringServer, Error, "Expected an error to be thrown");
|
|
183
|
-
return done();
|
|
184
|
-
});
|
|
185
|
-
it("should pass default fields", (done) => {
|
|
186
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
187
|
-
if (err) {
|
|
188
|
-
return done(err);
|
|
189
|
-
}
|
|
190
|
-
const expected = {
|
|
191
|
-
method: "GET",
|
|
192
|
-
path: "/hello/world",
|
|
193
|
-
params: "?a=1&b=2",
|
|
194
|
-
"response-size": 12345,
|
|
195
|
-
"response-time": 99999,
|
|
196
|
-
"status-code": 200,
|
|
197
|
-
ip: "::ffff:127.0.0.1",
|
|
198
|
-
via: "kayvee-middleware",
|
|
199
|
-
level: "info",
|
|
200
|
-
title: "request-finished",
|
|
201
|
-
deploy_env: "testing",
|
|
202
|
-
wf_id: "abc",
|
|
203
|
-
source: "test-app",
|
|
204
|
-
_kvmeta: {
|
|
205
|
-
team: "UNSET",
|
|
206
|
-
kv_version: "X.X.X",
|
|
207
|
-
kv_language: "js",
|
|
208
|
-
routes: [
|
|
209
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
210
|
-
],
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
var actual = JSON.parse(line);
|
|
214
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
215
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
216
|
-
assert.deepEqual(actual, expected);
|
|
217
|
-
return done();
|
|
218
|
-
});
|
|
219
|
-
var stream = createLineStream((line) => {
|
|
220
|
-
cb(null, null, line);
|
|
221
|
-
});
|
|
222
|
-
var options = { source: "test-app" };
|
|
223
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
224
|
-
res.setHeader("some-header", "some-header-value");
|
|
225
|
-
next();
|
|
226
|
-
});
|
|
227
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
228
|
-
});
|
|
229
|
-
it("should allow logging user-specified request headers", (done) => {
|
|
230
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
231
|
-
if (err) {
|
|
232
|
-
return done(err);
|
|
233
|
-
}
|
|
234
|
-
const expected = {
|
|
235
|
-
"some-header": "some-header-value",
|
|
236
|
-
"another-header": "another-header-value",
|
|
237
|
-
method: "GET",
|
|
238
|
-
path: "/hello/world",
|
|
239
|
-
params: "?a=1&b=2",
|
|
240
|
-
"response-size": 12345,
|
|
241
|
-
"response-time": 99999,
|
|
242
|
-
"status-code": 200,
|
|
243
|
-
ip: "::ffff:127.0.0.1",
|
|
244
|
-
via: "kayvee-middleware",
|
|
245
|
-
level: "info",
|
|
246
|
-
title: "request-finished",
|
|
247
|
-
deploy_env: "testing",
|
|
248
|
-
wf_id: "abc",
|
|
249
|
-
source: "test-app",
|
|
250
|
-
_kvmeta: {
|
|
251
|
-
team: "UNSET",
|
|
252
|
-
kv_version: "X.X.X",
|
|
253
|
-
kv_language: "js",
|
|
254
|
-
routes: [
|
|
255
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
256
|
-
],
|
|
257
|
-
},
|
|
258
|
-
};
|
|
259
|
-
var actual = JSON.parse(line);
|
|
260
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
261
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
262
|
-
assert.deepEqual(actual, expected);
|
|
263
|
-
return done();
|
|
264
|
-
});
|
|
265
|
-
var stream = createLineStream((line) => {
|
|
266
|
-
cb(null, null, line);
|
|
267
|
-
});
|
|
268
|
-
var options = {
|
|
269
|
-
source: "test-app",
|
|
270
|
-
headers: ["some-header", "another-header"],
|
|
271
|
-
};
|
|
272
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
273
|
-
next();
|
|
274
|
-
});
|
|
275
|
-
request(server)
|
|
276
|
-
.get("/hello/world?a=1&b=2")
|
|
277
|
-
.set("some-header", "some-header-value")
|
|
278
|
-
.set("another-header", "another-header-value")
|
|
279
|
-
.expect(200, cb);
|
|
280
|
-
});
|
|
281
|
-
it("should allow logging from user-specified handlers", (done) => {
|
|
282
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
283
|
-
if (err) {
|
|
284
|
-
return done(err);
|
|
285
|
-
}
|
|
286
|
-
const expected = {
|
|
287
|
-
global: 1,
|
|
288
|
-
global2: 2,
|
|
289
|
-
url: "/hello/world?a=1&b=2",
|
|
290
|
-
method: "GET",
|
|
291
|
-
path: "/hello/world",
|
|
292
|
-
params: "?a=1&b=2",
|
|
293
|
-
"response-size": 12345,
|
|
294
|
-
"response-time": 99999,
|
|
295
|
-
"status-code": 200,
|
|
296
|
-
ip: "::ffff:127.0.0.1",
|
|
297
|
-
via: "kayvee-middleware",
|
|
298
|
-
level: "info",
|
|
299
|
-
title: "request-finished",
|
|
300
|
-
deploy_env: "testing",
|
|
301
|
-
wf_id: "abc",
|
|
302
|
-
source: "test-app",
|
|
303
|
-
_kvmeta: {
|
|
304
|
-
team: "UNSET",
|
|
305
|
-
kv_version: "X.X.X",
|
|
306
|
-
kv_language: "js",
|
|
307
|
-
routes: [
|
|
308
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
309
|
-
],
|
|
310
|
-
},
|
|
311
|
-
};
|
|
312
|
-
var actual = JSON.parse(line);
|
|
313
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
314
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
315
|
-
assert.deepEqual(actual, expected);
|
|
316
|
-
return done();
|
|
317
|
-
});
|
|
318
|
-
var stream = createLineStream((line) => {
|
|
319
|
-
cb(null, null, line);
|
|
320
|
-
});
|
|
321
|
-
var options = {
|
|
322
|
-
source: "test-app",
|
|
323
|
-
handlers: [() => ({ global: 1 }), () => ({ global2: 2 }), (req) => ({ url: req.url })],
|
|
324
|
-
};
|
|
325
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
326
|
-
next();
|
|
327
|
-
});
|
|
328
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
329
|
-
});
|
|
330
|
-
it("should not log null or undefined values", (done) => {
|
|
331
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
332
|
-
if (err) {
|
|
333
|
-
return done(err);
|
|
334
|
-
}
|
|
335
|
-
const expected = {
|
|
336
|
-
method: "GET",
|
|
337
|
-
path: "/hello/world",
|
|
338
|
-
params: "?a=1&b=2",
|
|
339
|
-
"response-size": 12345,
|
|
340
|
-
"response-time": 99999,
|
|
341
|
-
"status-code": 200,
|
|
342
|
-
ip: "::ffff:127.0.0.1",
|
|
343
|
-
via: "kayvee-middleware",
|
|
344
|
-
level: "info",
|
|
345
|
-
title: "request-finished",
|
|
346
|
-
deploy_env: "testing",
|
|
347
|
-
wf_id: "abc",
|
|
348
|
-
source: "test-app",
|
|
349
|
-
_kvmeta: {
|
|
350
|
-
team: "UNSET",
|
|
351
|
-
kv_version: "X.X.X",
|
|
352
|
-
kv_language: "js",
|
|
353
|
-
routes: [
|
|
354
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
355
|
-
],
|
|
356
|
-
},
|
|
357
|
-
};
|
|
358
|
-
var actual = JSON.parse(line);
|
|
359
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
360
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
361
|
-
assert.deepEqual(actual, expected);
|
|
362
|
-
return done();
|
|
363
|
-
});
|
|
364
|
-
var stream = createLineStream((line) => {
|
|
365
|
-
cb(null, null, line);
|
|
366
|
-
});
|
|
367
|
-
var options = {
|
|
368
|
-
source: "test-app",
|
|
369
|
-
// These values should not be logged
|
|
370
|
-
headers: ["this-header-dne"],
|
|
371
|
-
handlers: [() => ({ undef: undefined })],
|
|
372
|
-
};
|
|
373
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
374
|
-
next();
|
|
375
|
-
});
|
|
376
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
377
|
-
});
|
|
378
|
-
it("should keep processing if there are broken user-specified handlers", (done) => {
|
|
379
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
380
|
-
if (err) {
|
|
381
|
-
return done(err);
|
|
382
|
-
}
|
|
383
|
-
const expected = {
|
|
384
|
-
global: 1,
|
|
385
|
-
method: "GET",
|
|
386
|
-
path: "/hello/world",
|
|
387
|
-
params: "?a=1&b=2",
|
|
388
|
-
"response-size": 12345,
|
|
389
|
-
"response-time": 99999,
|
|
390
|
-
"status-code": 200,
|
|
391
|
-
ip: "::ffff:127.0.0.1",
|
|
392
|
-
via: "kayvee-middleware",
|
|
393
|
-
level: "info",
|
|
394
|
-
title: "request-finished",
|
|
395
|
-
deploy_env: "testing",
|
|
396
|
-
wf_id: "abc",
|
|
397
|
-
source: "test-app",
|
|
398
|
-
_kvmeta: {
|
|
399
|
-
team: "UNSET",
|
|
400
|
-
kv_version: "X.X.X",
|
|
401
|
-
kv_language: "js",
|
|
402
|
-
routes: [
|
|
403
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
404
|
-
],
|
|
405
|
-
},
|
|
406
|
-
};
|
|
407
|
-
var actual = JSON.parse(line);
|
|
408
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
409
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
410
|
-
assert.deepEqual(actual, expected);
|
|
411
|
-
return done();
|
|
412
|
-
});
|
|
413
|
-
var stream = createLineStream((line) => {
|
|
414
|
-
cb(null, null, line);
|
|
415
|
-
});
|
|
416
|
-
var options = {
|
|
417
|
-
source: "test-app",
|
|
418
|
-
handlers: [
|
|
419
|
-
// This handler should be ignored, because it has an error
|
|
420
|
-
() => {
|
|
421
|
-
throw new Error("handler that throws an error");
|
|
422
|
-
},
|
|
423
|
-
// This handler should still work
|
|
424
|
-
() => ({ global: 1 }),
|
|
425
|
-
],
|
|
426
|
-
};
|
|
427
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
428
|
-
next();
|
|
429
|
-
});
|
|
430
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
431
|
-
});
|
|
432
|
-
it("should allow the user to override `base_handlers`", (done) => {
|
|
433
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
434
|
-
if (err) {
|
|
435
|
-
return done(err);
|
|
436
|
-
}
|
|
437
|
-
const expected = {
|
|
438
|
-
global: 1,
|
|
439
|
-
base: 1,
|
|
440
|
-
deploy_env: "testing",
|
|
441
|
-
wf_id: "abc",
|
|
442
|
-
source: "test-app",
|
|
443
|
-
_kvmeta: {
|
|
444
|
-
team: "UNSET",
|
|
445
|
-
kv_version: "X.X.X",
|
|
446
|
-
kv_language: "js",
|
|
447
|
-
routes: [],
|
|
448
|
-
},
|
|
449
|
-
};
|
|
450
|
-
var actual = JSON.parse(line);
|
|
451
|
-
actual._kvmeta.kv_version = "X.X.X"; // Masking field that is expected to change
|
|
452
|
-
assert.deepEqual(actual, expected);
|
|
453
|
-
return done();
|
|
454
|
-
});
|
|
455
|
-
var stream = createLineStream((line) => {
|
|
456
|
-
cb(null, null, line);
|
|
457
|
-
});
|
|
458
|
-
var options = {
|
|
459
|
-
source: "test-app",
|
|
460
|
-
base_handlers: [() => ({ base: 1 })],
|
|
461
|
-
handlers: [() => ({ global: 1 })],
|
|
462
|
-
};
|
|
463
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
464
|
-
next();
|
|
465
|
-
});
|
|
466
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
467
|
-
});
|
|
468
|
-
it("should be robust to handlers that return non Objects", (done) => {
|
|
469
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
470
|
-
if (err) {
|
|
471
|
-
return done(err);
|
|
472
|
-
}
|
|
473
|
-
const expected = {
|
|
474
|
-
global: 1,
|
|
475
|
-
base: 1,
|
|
476
|
-
source: "test-app",
|
|
477
|
-
deploy_env: "testing",
|
|
478
|
-
wf_id: "abc",
|
|
479
|
-
_kvmeta: {
|
|
480
|
-
team: "UNSET",
|
|
481
|
-
kv_version: "X.X.X",
|
|
482
|
-
kv_language: "js",
|
|
483
|
-
routes: [],
|
|
484
|
-
},
|
|
485
|
-
};
|
|
486
|
-
var actual = JSON.parse(line);
|
|
487
|
-
actual._kvmeta.kv_version = "X.X.X"; // Masking field that is expected to change
|
|
488
|
-
assert.deepEqual(actual, expected);
|
|
489
|
-
return done();
|
|
490
|
-
});
|
|
491
|
-
var stream = createLineStream((line) => {
|
|
492
|
-
cb(null, null, line);
|
|
493
|
-
});
|
|
494
|
-
var options = {
|
|
495
|
-
source: "test-app",
|
|
496
|
-
base_handlers: [() => 1, () => "a", () => [], () => ({}), () => ({ base: 1 })],
|
|
497
|
-
handlers: [() => 1, () => "a", () => [], () => ({}), () => ({ global: 1 })],
|
|
498
|
-
};
|
|
499
|
-
var server = createServer(serverType, options, { stream, skip: null }, (req, res, next) => {
|
|
500
|
-
next();
|
|
501
|
-
});
|
|
502
|
-
request(server).get("/hello/world?a=1&b=2").expect(200, cb);
|
|
503
|
-
});
|
|
504
|
-
it("allows ignoring requests to files in a static directory", (done) => {
|
|
505
|
-
var cb = afterTest(2, (err, res, line) => {
|
|
506
|
-
if (err) {
|
|
507
|
-
return done(err);
|
|
508
|
-
}
|
|
509
|
-
const expected = {
|
|
510
|
-
method: "GET",
|
|
511
|
-
path: "/hello/world",
|
|
512
|
-
params: "?",
|
|
513
|
-
"response-size": 12345,
|
|
514
|
-
"response-time": 99999,
|
|
515
|
-
"status-code": 200,
|
|
516
|
-
ip: "::ffff:127.0.0.1",
|
|
517
|
-
via: "kayvee-middleware",
|
|
518
|
-
level: "info",
|
|
519
|
-
title: "request-finished",
|
|
520
|
-
deploy_env: "testing",
|
|
521
|
-
wf_id: "abc",
|
|
522
|
-
source: "test-app",
|
|
523
|
-
_kvmeta: {
|
|
524
|
-
team: "UNSET",
|
|
525
|
-
kv_version: "X.X.X",
|
|
526
|
-
kv_language: "js",
|
|
527
|
-
routes: [
|
|
528
|
-
{ type: "analytics", series: "requests.everything", rule: "all-kv_middleware" },
|
|
529
|
-
],
|
|
530
|
-
},
|
|
531
|
-
};
|
|
532
|
-
var actual = JSON.parse(line);
|
|
533
|
-
actual["response-time"] = 99999; // Masking the two fields that
|
|
534
|
-
actual._kvmeta.kv_version = "X.X.X"; // are expected to change
|
|
535
|
-
assert.deepEqual(actual, expected);
|
|
536
|
-
return done();
|
|
537
|
-
});
|
|
538
|
-
var stream = createLineStream((line) => {
|
|
539
|
-
cb(null, null, line);
|
|
540
|
-
});
|
|
541
|
-
var options = {
|
|
542
|
-
source: "test-app",
|
|
543
|
-
ignore_dir: {
|
|
544
|
-
directory: `${__dirname}/static`,
|
|
545
|
-
},
|
|
546
|
-
};
|
|
547
|
-
var server = createServer(serverType, options, { stream }, (req, res, next) => {
|
|
548
|
-
next();
|
|
549
|
-
});
|
|
550
|
-
// this line is never logged
|
|
551
|
-
request(server).get("/empty.css").expect(200);
|
|
552
|
-
// this one is logged
|
|
553
|
-
request(server).get("/hello/world").expect(200, cb);
|
|
554
|
-
});
|
|
555
|
-
});
|
|
556
|
-
});
|