2023-02-14 20:49:59 +01:00

97 lines
2.4 KiB
TypeScript

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();
});
});