| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- require('chai').should()
- expect = require("chai").expect
- SandboxedModule = require('sandboxed-module')
- modulePath = '../../../app/js/EventLogger'
- sinon = require("sinon")
- tk = require "timekeeper"
- describe 'EventLogger', ->
- beforeEach ->
- @start = Date.now()
- tk.freeze(new Date(@start))
- @EventLogger = SandboxedModule.require modulePath, requires:
- "logger-sharelatex": @logger = {error: sinon.stub(), warn: sinon.stub()}
- "metrics-sharelatex": @metrics = {inc: sinon.stub()}
- @channel = "applied-ops"
- @id_1 = "random-hostname:abc-1"
- @message_1 = "message-1"
- @id_2 = "random-hostname:abc-2"
- @message_2 = "message-2"
- afterEach ->
- tk.reset()
- describe 'checkEventOrder', ->
- describe 'when the events are in order', ->
- beforeEach ->
- @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- @status = @EventLogger.checkEventOrder(@channel, @id_2, @message_2)
- it 'should accept events in order', ->
- expect(@status).to.be.undefined
- it 'should increment the valid event metric', ->
- @metrics.inc.calledWith("event.#{@channel}.valid", 1)
- .should.equal.true
- describe 'when there is a duplicate events', ->
- beforeEach ->
- @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- @status = @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- it 'should return "duplicate" for the same event', ->
- expect(@status).to.equal "duplicate"
- it 'should increment the duplicate event metric', ->
- @metrics.inc.calledWith("event.#{@channel}.duplicate", 1)
- .should.equal.true
- describe 'when there are out of order events', ->
- beforeEach ->
- @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- @EventLogger.checkEventOrder(@channel, @id_2, @message_2)
- @status = @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- it 'should return "out-of-order" for the event', ->
- expect(@status).to.equal "out-of-order"
- it 'should increment the out-of-order event metric', ->
- @metrics.inc.calledWith("event.#{@channel}.out-of-order", 1)
- .should.equal.true
- describe 'after MAX_STALE_TIME_IN_MS', ->
- it 'should flush old entries', ->
- @EventLogger.MAX_EVENTS_BEFORE_CLEAN = 10
- @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- for i in [1..8]
- status = @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- expect(status).to.equal "duplicate"
- # the next event should flush the old entries aboce
- @EventLogger.MAX_STALE_TIME_IN_MS=1000
- tk.freeze(new Date(@start + 5 * 1000))
- # because we flushed the entries this should not be a duplicate
- @EventLogger.checkEventOrder(@channel, 'other-1', @message_2)
- status = @EventLogger.checkEventOrder(@channel, @id_1, @message_1)
- expect(status).to.be.undefined
|