@rotorsoft/act-tck 1.17.1 → 1.19.0
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/dist/.tsbuildinfo +1 -1
- package/dist/@types/store-tck.d.ts.map +1 -1
- package/dist/index.cjs +98 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +98 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1416,6 +1416,104 @@ var runStoreTck = (options) => {
|
|
|
1416
1416
|
expect8(blocked).toHaveLength(0);
|
|
1417
1417
|
});
|
|
1418
1418
|
});
|
|
1419
|
+
describe8("defer", () => {
|
|
1420
|
+
it7("hides a stream from claim until its deferred_at passes", async () => {
|
|
1421
|
+
const s = `defer-${uid()}`;
|
|
1422
|
+
const ctl = `defer-ctl-${uid()}`;
|
|
1423
|
+
await store.subscribe([{ stream: s }, { stream: ctl }]);
|
|
1424
|
+
for (const st of [s, ctl])
|
|
1425
|
+
await store.commit(
|
|
1426
|
+
st,
|
|
1427
|
+
[inc(1)],
|
|
1428
|
+
make_meta({ stream: st })
|
|
1429
|
+
);
|
|
1430
|
+
expect8(await store.defer([s], Date.now() + 36e5)).toBe(1);
|
|
1431
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1432
|
+
expect8(leased.find((l) => l.stream === ctl)).toBeDefined();
|
|
1433
|
+
expect8(leased.find((l) => l.stream === s)).toBeUndefined();
|
|
1434
|
+
});
|
|
1435
|
+
it7("makes a stream claimable once the deferred_at is in the past", async () => {
|
|
1436
|
+
const s = `defer-past-${uid()}`;
|
|
1437
|
+
await store.subscribe([{ stream: s }]);
|
|
1438
|
+
await store.commit(
|
|
1439
|
+
s,
|
|
1440
|
+
[inc(1)],
|
|
1441
|
+
make_meta({ stream: s })
|
|
1442
|
+
);
|
|
1443
|
+
expect8(await store.defer([s], Date.now() - 1e3)).toBe(1);
|
|
1444
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1445
|
+
const mine = leased.find((l) => l.stream === s);
|
|
1446
|
+
expect8(mine).toBeDefined();
|
|
1447
|
+
await store.ack(
|
|
1448
|
+
leased.filter((l) => l.stream !== s).concat(mine)
|
|
1449
|
+
);
|
|
1450
|
+
});
|
|
1451
|
+
it7("does not bump retry while a stream is deferred", async () => {
|
|
1452
|
+
const s = `defer-retry-${uid()}`;
|
|
1453
|
+
await store.subscribe([{ stream: s }]);
|
|
1454
|
+
await store.commit(
|
|
1455
|
+
s,
|
|
1456
|
+
[inc(1)],
|
|
1457
|
+
make_meta({ stream: s })
|
|
1458
|
+
);
|
|
1459
|
+
await store.defer([s], Date.now() + 36e5);
|
|
1460
|
+
await store.claim(100, 100, `w1-${uid()}`, 1e5);
|
|
1461
|
+
await store.claim(100, 100, `w2-${uid()}`, 1e5);
|
|
1462
|
+
await store.defer([s], Date.now() - 1e3);
|
|
1463
|
+
const leased = await store.claim(100, 100, `w3-${uid()}`, 1e5);
|
|
1464
|
+
const mine = leased.find((l) => l.stream === s);
|
|
1465
|
+
expect8(mine).toBeDefined();
|
|
1466
|
+
expect8(mine.retry).toBe(0);
|
|
1467
|
+
await store.ack(
|
|
1468
|
+
leased.filter((l) => l.stream !== s).concat(mine)
|
|
1469
|
+
);
|
|
1470
|
+
});
|
|
1471
|
+
it7("reset clears a pending defer", async () => {
|
|
1472
|
+
const s = `defer-reset-${uid()}`;
|
|
1473
|
+
await store.subscribe([{ stream: s }]);
|
|
1474
|
+
await store.commit(
|
|
1475
|
+
s,
|
|
1476
|
+
[inc(1)],
|
|
1477
|
+
make_meta({ stream: s })
|
|
1478
|
+
);
|
|
1479
|
+
await store.defer([s], Date.now() + 36e5);
|
|
1480
|
+
expect8(await store.reset([s])).toBe(1);
|
|
1481
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1482
|
+
expect8(leased.find((l) => l.stream === s)).toBeDefined();
|
|
1483
|
+
});
|
|
1484
|
+
it7("defers streams matching a filter and counts matches", async () => {
|
|
1485
|
+
const tag = uid();
|
|
1486
|
+
const a = `deferfilter-${tag}-a`;
|
|
1487
|
+
const b = `deferfilter-${tag}-b`;
|
|
1488
|
+
await store.subscribe([{ stream: a }, { stream: b }]);
|
|
1489
|
+
for (const s of [a, b])
|
|
1490
|
+
await store.commit(
|
|
1491
|
+
s,
|
|
1492
|
+
[inc(1)],
|
|
1493
|
+
make_meta({ stream: s })
|
|
1494
|
+
);
|
|
1495
|
+
const ctl = `defer-filterctl-${tag}`;
|
|
1496
|
+
await store.subscribe([{ stream: ctl }]);
|
|
1497
|
+
await store.commit(
|
|
1498
|
+
ctl,
|
|
1499
|
+
[inc(1)],
|
|
1500
|
+
make_meta({ stream: ctl })
|
|
1501
|
+
);
|
|
1502
|
+
const n = await store.defer(
|
|
1503
|
+
{ stream: `^deferfilter-${tag}-`, stream_exact: false },
|
|
1504
|
+
Date.now() + 36e5
|
|
1505
|
+
);
|
|
1506
|
+
expect8(n).toBe(2);
|
|
1507
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1508
|
+
expect8(leased.find((l) => l.stream === ctl)).toBeDefined();
|
|
1509
|
+
expect8(leased.find((l) => l.stream === a)).toBeUndefined();
|
|
1510
|
+
expect8(leased.find((l) => l.stream === b)).toBeUndefined();
|
|
1511
|
+
});
|
|
1512
|
+
it7("returns 0 for unknown streams and empty input", async () => {
|
|
1513
|
+
expect8(await store.defer([`missing-${uid()}`], Date.now())).toBe(0);
|
|
1514
|
+
expect8(await store.defer([], Date.now())).toBe(0);
|
|
1515
|
+
});
|
|
1516
|
+
});
|
|
1419
1517
|
describe8("reset", () => {
|
|
1420
1518
|
it7("rewinds a stream watermark to -1", async () => {
|
|
1421
1519
|
const s = `reset-${uid()}`;
|