@fedify/amqp 2.0.0-dev.221 → 2.0.0-dev.228
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deno.json +1 -1
- package/package.json +4 -3
- package/src/mq.test.ts +23 -101
package/deno.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/amqp",
|
|
3
|
-
"version": "2.0.0-dev.
|
|
3
|
+
"version": "2.0.0-dev.228+5c4cd765",
|
|
4
4
|
"description": "AMQP/RabbitMQ driver for Fedify",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fedify",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"amqplib": "^0.10.9",
|
|
58
|
-
"@fedify/fedify": "^2.0.0-dev.
|
|
58
|
+
"@fedify/fedify": "^2.0.0-dev.228+5c4cd765"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@alinea/suite": "^0.6.3",
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
"@std/async": "npm:@jsr/std__async@^1.0.13",
|
|
65
65
|
"@types/amqplib": "^0.10.7",
|
|
66
66
|
"tsdown": "^0.12.9",
|
|
67
|
-
"typescript": "^5.9.3"
|
|
67
|
+
"typescript": "^5.9.3",
|
|
68
|
+
"@fedify/testing": "^2.0.0-dev.228+5c4cd765"
|
|
68
69
|
},
|
|
69
70
|
"scripts": {
|
|
70
71
|
"build": "tsdown",
|
package/src/mq.test.ts
CHANGED
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import { suite } from "@alinea/suite";
|
|
2
2
|
import { AmqpMessageQueue } from "@fedify/amqp/mq";
|
|
3
|
-
import
|
|
3
|
+
import { getRandomKey, testMessageQueue, waitFor } from "@fedify/testing";
|
|
4
4
|
import { assert, assertEquals, assertFalse, assertGreater } from "@std/assert";
|
|
5
5
|
import { delay } from "@std/async/delay";
|
|
6
6
|
// @deno-types="npm:@types/amqplib"
|
|
7
7
|
import { type ChannelModel, connect } from "amqplib";
|
|
8
8
|
import process from "node:process";
|
|
9
9
|
|
|
10
|
-
let Temporal: typeof temporal.Temporal;
|
|
11
|
-
if ("Temporal" in globalThis) {
|
|
12
|
-
Temporal = globalThis.Temporal;
|
|
13
|
-
} else {
|
|
14
|
-
Temporal = temporal.Temporal;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
10
|
const AMQP_URL = process.env.AMQP_URL;
|
|
18
11
|
const test = AMQP_URL ? suite(import.meta) : suite(import.meta).skip;
|
|
19
12
|
|
|
@@ -21,86 +14,28 @@ function getConnection(): Promise<ChannelModel> {
|
|
|
21
14
|
return connect(AMQP_URL!);
|
|
22
15
|
}
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
messages2.push(message);
|
|
47
|
-
allMessages.push(message);
|
|
48
|
-
}, { signal: controller.signal });
|
|
49
|
-
|
|
50
|
-
await mq.enqueue("Hello, world!");
|
|
51
|
-
|
|
52
|
-
await waitFor(() => allMessages.length > 0, 15_000);
|
|
53
|
-
|
|
54
|
-
assertEquals(allMessages.includes("Hello, world!"), true);
|
|
55
|
-
|
|
56
|
-
// enqueue() with delay
|
|
57
|
-
const started = Date.now();
|
|
58
|
-
await mq.enqueue(
|
|
59
|
-
"Delayed message",
|
|
60
|
-
{ delay: Temporal.Duration.from({ seconds: 3 }) },
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
await waitFor(() => allMessages.includes("Delayed message"), 15_000);
|
|
64
|
-
|
|
65
|
-
// listen() with delay
|
|
66
|
-
assertEquals(allMessages.includes("Delayed message"), true);
|
|
67
|
-
assertGreater(Date.now() - started, 3_000);
|
|
68
|
-
|
|
69
|
-
await mq.enqueueMany(["Message 1", "Message 2", "Message 3"]);
|
|
70
|
-
|
|
71
|
-
await waitFor(() =>
|
|
72
|
-
allMessages.includes("Message 1") &&
|
|
73
|
-
allMessages.includes("Message 2") &&
|
|
74
|
-
allMessages.includes("Message 3"), 15_000);
|
|
75
|
-
|
|
76
|
-
// listen() after enqueueMany()
|
|
77
|
-
assertEquals(allMessages.includes("Message 1"), true);
|
|
78
|
-
assertEquals(allMessages.includes("Message 2"), true);
|
|
79
|
-
assertEquals(allMessages.includes("Message 3"), true);
|
|
80
|
-
|
|
81
|
-
// enqueueMany() with delay
|
|
82
|
-
const manyStarted = Date.now();
|
|
83
|
-
await mq.enqueueMany(
|
|
84
|
-
["Delayed batch 1", "Delayed batch 2"],
|
|
85
|
-
{ delay: Temporal.Duration.from({ seconds: 3 }) },
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
await waitFor(() =>
|
|
89
|
-
allMessages.includes("Delayed batch 1") &&
|
|
90
|
-
allMessages.includes("Delayed batch 2"), 15_000);
|
|
91
|
-
|
|
92
|
-
// listen() after enqueueMany() with delay
|
|
93
|
-
assertEquals(allMessages.includes("Delayed batch 1"), true);
|
|
94
|
-
assertEquals(allMessages.includes("Delayed batch 2"), true);
|
|
95
|
-
assertGreater(Date.now() - manyStarted, 3_000);
|
|
96
|
-
|
|
97
|
-
controller.abort();
|
|
98
|
-
await listening;
|
|
99
|
-
await listening2;
|
|
100
|
-
|
|
101
|
-
await conn.close();
|
|
102
|
-
await conn2.close();
|
|
103
|
-
});
|
|
17
|
+
const connections: ChannelModel[] = [];
|
|
18
|
+
const queue = getRandomKey("queue");
|
|
19
|
+
const delayedQueuePrefix = getRandomKey("delayed") + "_";
|
|
20
|
+
|
|
21
|
+
test(
|
|
22
|
+
"AmqpMessageQueue",
|
|
23
|
+
{ sanitizeOps: false, sanitizeExit: false, sanitizeResources: false },
|
|
24
|
+
() =>
|
|
25
|
+
testMessageQueue(
|
|
26
|
+
async () => {
|
|
27
|
+
const conn = await getConnection();
|
|
28
|
+
connections.push(conn);
|
|
29
|
+
return new AmqpMessageQueue(conn, { queue, delayedQueuePrefix });
|
|
30
|
+
},
|
|
31
|
+
async ({ controller }) => {
|
|
32
|
+
controller.abort();
|
|
33
|
+
for (const conn of connections) {
|
|
34
|
+
await conn.close();
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
),
|
|
38
|
+
);
|
|
104
39
|
|
|
105
40
|
test(
|
|
106
41
|
"AmqpMessageQueue [nativeRetrial: false]",
|
|
@@ -171,16 +106,3 @@ test(
|
|
|
171
106
|
assertGreater(i, 1);
|
|
172
107
|
},
|
|
173
108
|
);
|
|
174
|
-
|
|
175
|
-
async function waitFor(
|
|
176
|
-
predicate: () => boolean,
|
|
177
|
-
timeoutMs: number,
|
|
178
|
-
): Promise<void> {
|
|
179
|
-
const started = Date.now();
|
|
180
|
-
while (!predicate()) {
|
|
181
|
-
await delay(500);
|
|
182
|
-
if (Date.now() - started > timeoutMs) {
|
|
183
|
-
throw new Error("Timeout");
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|