index.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { expect } from 'chai';
  2. import { Client } from '../../../src/models/client';
  3. import { Realm } from '../../../src/models/realm';
  4. import { IMessage } from '../../../src/models/message';
  5. import { MessagesExpire } from '../../../src/services/messagesExpire';
  6. import { MessageHandler } from '../../../src/messageHandler';
  7. import { MessageType } from '../../../src/enums';
  8. import { wait } from '../../utils';
  9. describe('MessagesExpire', () => {
  10. const createTestMessage = (dst: string): IMessage => {
  11. return {
  12. type: MessageType.OPEN,
  13. src: 'src',
  14. dst,
  15. };
  16. };
  17. it('should remove client if no read from queue', async () => {
  18. const realm = new Realm();
  19. const messageHandler = new MessageHandler(realm);
  20. const checkInterval = 10;
  21. const expireTimeout = 50;
  22. const config = { cleanup_out_msgs: checkInterval, expire_timeout: expireTimeout };
  23. const messagesExpire = new MessagesExpire({ realm, config, messageHandler });
  24. const client = new Client({ id: 'id', token: '' });
  25. realm.setClient(client, 'id');
  26. realm.addMessageToQueue(client.getId(), createTestMessage('dst'));
  27. messagesExpire.startMessagesExpiration();
  28. await wait(checkInterval * 2);
  29. expect(realm.getMessageQueueById(client.getId())?.getMessages().length).to.be.eq(1);
  30. await wait(expireTimeout);
  31. expect(realm.getMessageQueueById(client.getId())).to.be.undefined;
  32. messagesExpire.stopMessagesExpiration();
  33. });
  34. it('should fire EXPIRE message', async () => {
  35. const realm = new Realm();
  36. const messageHandler = new MessageHandler(realm);
  37. const checkInterval = 10;
  38. const expireTimeout = 50;
  39. const config = { cleanup_out_msgs: checkInterval, expire_timeout: expireTimeout };
  40. const messagesExpire = new MessagesExpire({ realm, config, messageHandler });
  41. const client = new Client({ id: 'id', token: '' });
  42. realm.setClient(client, 'id');
  43. realm.addMessageToQueue(client.getId(), createTestMessage('dst1'));
  44. realm.addMessageToQueue(client.getId(), createTestMessage('dst2'));
  45. let handledCount = 0;
  46. messageHandler.handle = (client, message): boolean => {
  47. expect(client).to.be.undefined;
  48. expect(message.type).to.be.eq(MessageType.EXPIRE);
  49. handledCount++;
  50. return true;
  51. };
  52. messagesExpire.startMessagesExpiration();
  53. await wait(checkInterval * 2);
  54. await wait(expireTimeout);
  55. expect(handledCount).to.be.eq(2);
  56. messagesExpire.stopMessagesExpiration();
  57. });
  58. });