Path: blob/master/src/packages/backend/conat/test/sync/binary.test.ts
1451 views
/*1Test using binary data with kv and stream.23You can just store binary directly in kv and stream, since MsgPack4handles buffers just fine.56DEVELOPMENT:78pnpm test ./binary.test.ts9*/1011import { dstream, dkv } from "@cocalc/backend/conat/sync";12import { before, after, connect } from "@cocalc/backend/conat/test/setup";13import { wait } from "@cocalc/backend/conat/test/util";1415beforeAll(before);1617let maxPayload;1819describe("test binary data with a dstream", () => {20let s,21name = `${Math.random()}`;2223// binary values come back as Uint8Array with streams24const data10 = Uint8Array.from(Buffer.from("x".repeat(10)));25it("creates a binary dstream and writes/then reads binary data to/from it", async () => {26s = await dstream<Buffer>({ name });27expect(s.name).toBe(name);28s.publish(data10);29expect(s.get(0).length).toEqual(data10.length);30await s.save();31s.close();32s = await dstream({ name });33expect(s.get(0).length).toEqual(data10.length);34});3536it("sanity check on the max payload", async () => {37const client = connect();38await wait({ until: () => client.info != null });39maxPayload = client.info?.max_payload ?? 0;40expect(maxPayload).toBeGreaterThan(500000);41});4243it("writes large binary data to the dstream to test chunking", async () => {44s = await dstream({ name });45const data = Uint8Array.from(Buffer.from("x".repeat(maxPayload * 1.5)));46s.publish(data);47expect(s.get(s.length - 1).length).toEqual(data.length);48await s.save();49s.close();50s = await dstream({ name });51expect(s.get(s.length - 1).length).toEqual(data.length);52});5354it("clean up", async () => {55await s.delete({ all: true });56await s.close();57});58});5960describe("test binary data with a dkv", () => {61let s,62name = `${Math.random()}`;6364// binary values come back as buffer with dkv65const data10 = Buffer.from("x".repeat(10));6667it("creates a binary dkv and writes/then reads binary data to/from it", async () => {68s = await dkv({ name });69expect(s.name).toBe(name);70s.x = data10;71expect(s.x).toEqual(data10);72expect(s.x.length).toEqual(data10.length);73await s.save();74s.close();75s = await dkv({ name });76await wait({ until: () => s.has("x") });77expect(s.x.length).toEqual(data10.length);78expect(s.x).toEqual(data10);79});8081it("writes large binary data to the dkv to test chunking", async () => {82s = await dkv({ name });83const data = Uint8Array.from(Buffer.from("x".repeat(maxPayload * 1.5)));84s.y = data;85expect(s.y.length).toEqual(data.length);86await s.save();87s.close();88s = await dkv({ name });89expect(s.y.length).toEqual(data.length);90});9192it("clean up", async () => {93await s.clear();94s.close();95});96});9798afterAll(after);99100101