mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
106 lines
No EOL
4 KiB
JavaScript
106 lines
No EOL
4 KiB
JavaScript
/* eslint-disable
|
|
no-return-assign,
|
|
*/
|
|
// TODO: This file was created by bulk-decaffeinate.
|
|
// Fix any style issues and re-enable lint.
|
|
/*
|
|
* decaffeinate suggestions:
|
|
* DS102: Remove unnecessary code created because of implicit returns
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
require('chai').should();
|
|
const {
|
|
expect
|
|
} = require("chai");
|
|
const SandboxedModule = require('sandboxed-module');
|
|
const modulePath = '../../../app/js/EventLogger';
|
|
const sinon = require("sinon");
|
|
const tk = require("timekeeper");
|
|
|
|
describe('EventLogger', function() {
|
|
beforeEach(function() {
|
|
this.start = Date.now();
|
|
tk.freeze(new Date(this.start));
|
|
this.EventLogger = SandboxedModule.require(modulePath, { requires: {
|
|
"logger-sharelatex": (this.logger = {error: sinon.stub(), warn: sinon.stub()}),
|
|
"metrics-sharelatex": (this.metrics = {inc: sinon.stub()})
|
|
}
|
|
});
|
|
this.channel = "applied-ops";
|
|
this.id_1 = "random-hostname:abc-1";
|
|
this.message_1 = "message-1";
|
|
this.id_2 = "random-hostname:abc-2";
|
|
return this.message_2 = "message-2";
|
|
});
|
|
|
|
afterEach(function() { return tk.reset(); });
|
|
|
|
return describe('checkEventOrder', function() {
|
|
|
|
describe('when the events are in order', function() {
|
|
beforeEach(function() {
|
|
this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
return this.status = this.EventLogger.checkEventOrder(this.channel, this.id_2, this.message_2);
|
|
});
|
|
|
|
it('should accept events in order', function() {
|
|
return expect(this.status).to.be.undefined;
|
|
});
|
|
|
|
return it('should increment the valid event metric', function() {
|
|
return this.metrics.inc.calledWith(`event.${this.channel}.valid`, 1)
|
|
.should.equal.true;
|
|
});
|
|
});
|
|
|
|
describe('when there is a duplicate events', function() {
|
|
beforeEach(function() {
|
|
this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
return this.status = this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
});
|
|
|
|
it('should return "duplicate" for the same event', function() {
|
|
return expect(this.status).to.equal("duplicate");
|
|
});
|
|
|
|
return it('should increment the duplicate event metric', function() {
|
|
return this.metrics.inc.calledWith(`event.${this.channel}.duplicate`, 1)
|
|
.should.equal.true;
|
|
});
|
|
});
|
|
|
|
describe('when there are out of order events', function() {
|
|
beforeEach(function() {
|
|
this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
this.EventLogger.checkEventOrder(this.channel, this.id_2, this.message_2);
|
|
return this.status = this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
});
|
|
|
|
it('should return "out-of-order" for the event', function() {
|
|
return expect(this.status).to.equal("out-of-order");
|
|
});
|
|
|
|
return it('should increment the out-of-order event metric', function() {
|
|
return this.metrics.inc.calledWith(`event.${this.channel}.out-of-order`, 1)
|
|
.should.equal.true;
|
|
});
|
|
});
|
|
|
|
return describe('after MAX_STALE_TIME_IN_MS', function() { return it('should flush old entries', function() {
|
|
let status;
|
|
this.EventLogger.MAX_EVENTS_BEFORE_CLEAN = 10;
|
|
this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
for (let i = 1; i <= 8; i++) {
|
|
status = this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
expect(status).to.equal("duplicate");
|
|
}
|
|
// the next event should flush the old entries aboce
|
|
this.EventLogger.MAX_STALE_TIME_IN_MS=1000;
|
|
tk.freeze(new Date(this.start + (5 * 1000)));
|
|
// because we flushed the entries this should not be a duplicate
|
|
this.EventLogger.checkEventOrder(this.channel, 'other-1', this.message_2);
|
|
status = this.EventLogger.checkEventOrder(this.channel, this.id_1, this.message_1);
|
|
return expect(status).to.be.undefined;
|
|
}); });
|
|
});
|
|
}); |