Path: blob/master/src/packages/backend/conat/test/cluster/converge.test.ts
1712 views
/*12pnpm test `pwd`/converge.test.ts345*/67import {8before,9after,10waitForConsistentState,11delay,12} from "@cocalc/backend/conat/test/setup";13import { createClusterNode } from "./util";1415beforeAll(before);1617const TIMEOUT = 30_000;18jest.setTimeout(TIMEOUT);1920const clusterSize = 8;21describe(`explicitly build a cluster with ${clusterSize} nodes and ensure state converges`, () => {22const servers: any[] = [],23clients: any[] = [];24it(`create ${clusterSize} distinct servers with cluster support enabled`, async () => {25for (let i = 0; i < clusterSize; i++) {26const { server, client } = await createClusterNode({27clusterName: "my-cluster",28id: `node-${i}`,29});30expect(server.options.id).toBe(`node-${i}`);31expect(server.options.clusterName).toBe("my-cluster");32servers.push(server);33clients.push(client);34}35});3637it("link them all together in a complete digraph", async () => {38for (let i = 0; i < servers.length; i++) {39for (let j = 0; j < servers.length; j++) {40if (i != j) {41await servers[i].join(servers[j].address());42await servers[j].join(servers[i].address());43}44}45}46});4748it("check that interest data is *eventually* consistent", async () => {49await waitForConsistentState(servers, TIMEOUT);50});5152it("check again that interest data is *eventually* consistent", async () => {53await delay(1000);54await waitForConsistentState(servers, TIMEOUT);55});56});5758afterAll(after);596061