index.spec.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { describe, expect, it } from "@jest/globals";
  2. import { Client } from '../../../src/models/client';
  3. import { Realm } from '../../../src/models/realm';
  4. import type { 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).toBe(1);
  30. await wait(expireTimeout);
  31. expect(realm.getMessageQueueById(client.getId())).toBeUndefined();
  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).toBeUndefined();
  48. expect(message.type).toBe(MessageType.EXPIRE);
  49. handledCount++;
  50. return true;
  51. };
  52. messagesExpire.startMessagesExpiration();
  53. await wait(checkInterval * 2);
  54. await wait(expireTimeout);
  55. expect(handledCount).toBe(2);
  56. messagesExpire.stopMessagesExpiration();
  57. });
  58. });