gristlabs_grist-core/test/server/utils/LogSanitizer.ts

70 lines
2.2 KiB
TypeScript
Raw Normal View History

import {LogSanitizer} from "app/server/utils/LogSanitizer";
import {assert} from "chai";
describe("LogSanitizer", () => {
it("should return neutral logs untouched", done => {
const exampleLog
= 'DocTriggers: Webhook responded with non-200 status status=404, attempt=1, docId=8x9U6xe4hNz8WaJCzAjDBM,' +
' queueLength=8, drainingQueue=false, shuttingDown=false, sending=true, redisClient=true';
const sanitizer = new LogSanitizer();
const sanitizedLog = sanitizer.sanitize(exampleLog);
assert.equal(sanitizedLog, exampleLog);
done();
});
it("should not crashed when empty log was passed to sanitizer", done => {
const exampleLog = undefined;
const sanitizer = new LogSanitizer();
const sanitizedLog = sanitizer.sanitize(exampleLog);
assert.equal(sanitizedLog, exampleLog);
done();
});
it("should sanitize redis webhooks rpush logs", done => {
const exampleLog = {
command: "RPUSH",
code: "NR_CLOSED",
args: [
"webhook-queue-8x9U6xe4hNz8WaJCzAjDBM",
// Data send to redis is kept there in string format, therefore in our solution we are stringify them before
// sending. we know that the payload is a json though, so here we are trying to reproduce that data structure.
JSON.stringify({
id: "f3517b07-9846-4fe3-bcb2-d26cc07e40bd",
payload: {
id: 355,
manualSort: 355,
Name: "Johny",
InsuranceNumber: "12345"
}
}),
// in thie redis those are json, but send as a strings, so we need to parse them
JSON.stringify({
id: "b3091e47-00a0-4614-a58f-cb1ae383ea43",
payload: {
id: 355,
manualSort: 355,
Name: "Mark",
InsuranceNumber: "65844"
}
})
]
};
const sanitizer = new LogSanitizer();
const sanitizedLogObj = sanitizer.sanitize(exampleLog);
const sanitizedLog = JSON.stringify(sanitizedLogObj);
// tests on stringify object, to make it fast to search in.
assert.isTrue(sanitizedLog.includes("[sanitized]"));
assert.isFalse(sanitizedLog.includes("InsuranceNumber"));
assert.isFalse(sanitizedLog.includes("Name"));
done();
});
});