1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { describe, expect, it } from "@jest/globals";
- import { Client } from '../../../src/models/client';
- import { Realm } from '../../../src/models/realm';
- import type { IMessage } from '../../../src/models/message';
- import { MessagesExpire } from '../../../src/services/messagesExpire';
- import { MessageHandler } from '../../../src/messageHandler';
- import { MessageType } from '../../../src/enums';
- import { wait } from '../../utils';
- describe('MessagesExpire', () => {
- const createTestMessage = (dst: string): IMessage => {
- return {
- type: MessageType.OPEN,
- src: 'src',
- dst,
- };
- };
- it('should remove client if no read from queue', async () => {
- const realm = new Realm();
- const messageHandler = new MessageHandler(realm);
- const checkInterval = 10;
- const expireTimeout = 50;
- const config = { cleanup_out_msgs: checkInterval, expire_timeout: expireTimeout };
- const messagesExpire = new MessagesExpire({ realm, config, messageHandler });
- const client = new Client({ id: 'id', token: '' });
- realm.setClient(client, 'id');
- realm.addMessageToQueue(client.getId(), createTestMessage('dst'));
- messagesExpire.startMessagesExpiration();
- await wait(checkInterval * 2);
- expect(realm.getMessageQueueById(client.getId())?.getMessages().length).toBe(1);
- await wait(expireTimeout);
- expect(realm.getMessageQueueById(client.getId())).toBeUndefined();
- messagesExpire.stopMessagesExpiration();
- });
- it('should fire EXPIRE message', async () => {
- const realm = new Realm();
- const messageHandler = new MessageHandler(realm);
- const checkInterval = 10;
- const expireTimeout = 50;
- const config = { cleanup_out_msgs: checkInterval, expire_timeout: expireTimeout };
- const messagesExpire = new MessagesExpire({ realm, config, messageHandler });
- const client = new Client({ id: 'id', token: '' });
- realm.setClient(client, 'id');
- realm.addMessageToQueue(client.getId(), createTestMessage('dst1'));
- realm.addMessageToQueue(client.getId(), createTestMessage('dst2'));
- let handledCount = 0;
- messageHandler.handle = (client, message): boolean => {
- expect(client).toBeUndefined();
- expect(message.type).toBe(MessageType.EXPIRE);
- handledCount++;
- return true;
- };
- messagesExpire.startMessagesExpiration();
- await wait(checkInterval * 2);
- await wait(expireTimeout);
- expect(handledCount).toBe(2);
- messagesExpire.stopMessagesExpiration();
- });
- });
|