index.spec.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { describe, expect, it } from "@jest/globals";
  2. import { Client } from "../../../src/models/client.ts";
  3. import { Realm } from "../../../src/models/realm.ts";
  4. import type { IMessage } from "../../../src/index.js";
  5. import { MessagesExpire } from "../../../src/services/messagesExpire/index.ts";
  6. import { MessageHandler } from "../../../src/messageHandler/index.ts";
  7. import { MessageType } from "../../../src/enums.ts";
  8. import { wait } from "../../utils.ts";
  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 = {
  23. cleanup_out_msgs: checkInterval,
  24. expire_timeout: expireTimeout,
  25. };
  26. const messagesExpire = new MessagesExpire({
  27. realm,
  28. config,
  29. messageHandler,
  30. });
  31. const client = new Client({ id: "id", token: "" });
  32. realm.setClient(client, "id");
  33. realm.addMessageToQueue(client.getId(), createTestMessage("dst"));
  34. messagesExpire.startMessagesExpiration();
  35. await wait(checkInterval * 2);
  36. expect(
  37. realm.getMessageQueueById(client.getId())?.getMessages().length,
  38. ).toBe(1);
  39. await wait(expireTimeout);
  40. expect(realm.getMessageQueueById(client.getId())).toBeUndefined();
  41. messagesExpire.stopMessagesExpiration();
  42. });
  43. it("should fire EXPIRE message", async () => {
  44. const realm = new Realm();
  45. const messageHandler = new MessageHandler(realm);
  46. const checkInterval = 10;
  47. const expireTimeout = 50;
  48. const config = {
  49. cleanup_out_msgs: checkInterval,
  50. expire_timeout: expireTimeout,
  51. };
  52. const messagesExpire = new MessagesExpire({
  53. realm,
  54. config,
  55. messageHandler,
  56. });
  57. const client = new Client({ id: "id", token: "" });
  58. realm.setClient(client, "id");
  59. realm.addMessageToQueue(client.getId(), createTestMessage("dst1"));
  60. realm.addMessageToQueue(client.getId(), createTestMessage("dst2"));
  61. let handledCount = 0;
  62. messageHandler.handle = (client, message): boolean => {
  63. expect(client).toBeUndefined();
  64. expect(message.type).toBe(MessageType.EXPIRE);
  65. handledCount++;
  66. return true;
  67. };
  68. messagesExpire.startMessagesExpiration();
  69. await wait(checkInterval * 2);
  70. await wait(expireTimeout);
  71. expect(handledCount).toBe(2);
  72. messagesExpire.stopMessagesExpiration();
  73. });
  74. });