Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/cocalc
Path: blob/master/src/packages/backend/conat/test/sync/dstream-stress.test.ts
1712 views
1
import { dstream } from "@cocalc/backend/conat/sync";
2
import { before, after, client, wait } from "@cocalc/backend/conat/test/setup";
3
4
const log = process.env.VERBOSE ? console.log : (..._args) => {};
5
6
beforeAll(before);
7
8
jest.setTimeout(10000);
9
10
describe("a stress test", () => {
11
const name = `test-${Math.random()}`;
12
const pushCount = 2000;
13
let s;
14
it(`creates an ephemeral stream and pushes ${pushCount} messages`, async () => {
15
const start = Date.now();
16
s = await dstream({
17
client,
18
name,
19
noAutosave: true,
20
ephemeral: true,
21
});
22
for (let i = 0; i < pushCount; i++) {
23
s.push({ i });
24
}
25
expect(s.length).toBe(pushCount);
26
// NOTE: warning -- this is **MUCH SLOWER**, e.g., 10x slower,
27
// running under jest, hence why count is small.
28
await s.save();
29
expect(s.length).toBe(pushCount);
30
log(
31
"write",
32
Math.round((1000 * pushCount) / (Date.now() - start)),
33
"messages per second",
34
);
35
});
36
37
it("deletes all of the messages we just wrote", async () => {
38
const start = Date.now();
39
await s.delete({ seqs: s.seqs() });
40
await s.save();
41
await wait({ until: () => s.length == 0 });
42
expect(s.length).toBe(0);
43
log(
44
"delete",
45
Math.round((1000 * pushCount) / (Date.now() - start)),
46
"messages per second",
47
);
48
});
49
});
50
51
afterAll(after);
52
53