@rotorsoft/act-tck 1.19.3 → 1.20.1
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 +68 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1603,6 +1603,74 @@ var runStoreTck = (options) => {
|
|
|
1603
1603
|
expect8(await store.defer([], Date.now())).toBe(0);
|
|
1604
1604
|
});
|
|
1605
1605
|
});
|
|
1606
|
+
describe8("ack finalize (due-marked leases)", () => {
|
|
1607
|
+
it7("defers a due-marked lease instead of acking it", async () => {
|
|
1608
|
+
const s = `ackdefer-${uid()}`;
|
|
1609
|
+
const ctl = `ackdefer-ctl-${uid()}`;
|
|
1610
|
+
await store.subscribe([{ stream: s }, { stream: ctl }]);
|
|
1611
|
+
await store.commit(
|
|
1612
|
+
s,
|
|
1613
|
+
[inc(1)],
|
|
1614
|
+
make_meta({ stream: s })
|
|
1615
|
+
);
|
|
1616
|
+
const [ctl_head] = await store.commit(
|
|
1617
|
+
ctl,
|
|
1618
|
+
[inc(1)],
|
|
1619
|
+
make_meta({ stream: ctl })
|
|
1620
|
+
);
|
|
1621
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1622
|
+
const s_lease = leased.find((l) => l.stream === s);
|
|
1623
|
+
const ctl_lease = leased.find((l) => l.stream === ctl);
|
|
1624
|
+
const acked = await store.ack([
|
|
1625
|
+
{ ...ctl_lease, at: ctl_head.id },
|
|
1626
|
+
{ ...s_lease, due: Date.now() + 36e5 }
|
|
1627
|
+
]);
|
|
1628
|
+
expect8(acked.find((l) => l.stream === ctl)).toBeDefined();
|
|
1629
|
+
expect8(acked.find((l) => l.stream === s)).toBeUndefined();
|
|
1630
|
+
await store.commit(
|
|
1631
|
+
ctl,
|
|
1632
|
+
[inc(2)],
|
|
1633
|
+
make_meta({ stream: ctl })
|
|
1634
|
+
);
|
|
1635
|
+
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1636
|
+
expect8(again.find((l) => l.stream === ctl)).toBeDefined();
|
|
1637
|
+
expect8(again.find((l) => l.stream === s)).toBeUndefined();
|
|
1638
|
+
});
|
|
1639
|
+
it7("holds the watermark and resets retry on a due-marked lease", async () => {
|
|
1640
|
+
const s = `ackdefer-past-${uid()}`;
|
|
1641
|
+
await store.subscribe([{ stream: s }]);
|
|
1642
|
+
await store.commit(
|
|
1643
|
+
s,
|
|
1644
|
+
[inc(1)],
|
|
1645
|
+
make_meta({ stream: s })
|
|
1646
|
+
);
|
|
1647
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1648
|
+
const mine = leased.find((l) => l.stream === s);
|
|
1649
|
+
await store.ack([{ ...mine, due: Date.now() - 1e3 }]);
|
|
1650
|
+
const again = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1651
|
+
const re = again.find((l) => l.stream === s);
|
|
1652
|
+
expect8(re).toBeDefined();
|
|
1653
|
+
expect8(re.at).toBe(mine.at);
|
|
1654
|
+
expect8(re.retry).toBe(0);
|
|
1655
|
+
await store.ack([{ ...re, at: 1e6 }]);
|
|
1656
|
+
});
|
|
1657
|
+
it7("ignores due-marked entries from a non-holder", async () => {
|
|
1658
|
+
const s = `ackdefer-owner-${uid()}`;
|
|
1659
|
+
await store.subscribe([{ stream: s }]);
|
|
1660
|
+
await store.commit(
|
|
1661
|
+
s,
|
|
1662
|
+
[inc(1)],
|
|
1663
|
+
make_meta({ stream: s })
|
|
1664
|
+
);
|
|
1665
|
+
const leased = await store.claim(100, 100, `w-${uid()}`, 1e5);
|
|
1666
|
+
const mine = leased.find((l) => l.stream === s);
|
|
1667
|
+
await store.ack([
|
|
1668
|
+
{ ...mine, by: `stale-${uid()}`, due: Date.now() + 36e5 }
|
|
1669
|
+
]);
|
|
1670
|
+
const acked = await store.ack([{ ...mine, at: 1e6 }]);
|
|
1671
|
+
expect8(acked.find((l) => l.stream === s)).toBeDefined();
|
|
1672
|
+
});
|
|
1673
|
+
});
|
|
1606
1674
|
describe8("reset", () => {
|
|
1607
1675
|
it7("rewinds a stream watermark to -1", async () => {
|
|
1608
1676
|
const s = `reset-${uid()}`;
|