UNPKG

@dstanesc/o-o-o-o-o-o-o

Version:

O-O-O-O-O-O-O is a collection of content addressed persistent data structures

170 lines 6.96 kB
import { linkCodecFactory, blockCodecFactory, valueCodecFactory, } from '../codecs'; import { memoryBlockStoreFactory } from '../block-store'; import { Status } from '../types'; import { EdgeDecoder, EdgeEncoder, VersionDecoder, VersionEncoder, IndexDecoder, IndexEncoder, PropDecoder, PropEncoder, VertexDecoder, VertexEncoder, PropValueEncoder, PropValueDecoder, } from '../serde'; import * as assert from 'assert'; import { CID } from 'multiformats/cid'; import base64 from 'base64-js'; const { encode: linkEncode, decode: linkDecode } = linkCodecFactory(); const { encode: blockEncode, decode: blockDecode } = blockCodecFactory(); const { encode: valueEncode, decode: valueDecode } = valueCodecFactory(); const { put: blockPut, get: blockGet } = memoryBlockStoreFactory(); describe('Serde validation with', function () { test('basic write and read, vertices', async () => { const v1 = { status: Status.CREATED, offset: 0 }; const v2 = { status: Status.UPDATED, offset: 25, type: 77, nextProp: 92, nextEdge: 90, }; const v3 = { status: Status.DELETED, offset: 50 }; const bytes = new VertexEncoder([v1, v2, v3]).write(); const vertices = new VertexDecoder(bytes).read(); const v3p = { status: Status.DELETED, offset: 50 }; assert.deepEqual([v1, v2, v3p], vertices); }); test('basic write and read, edges', async () => { const e1 = { status: Status.CREATED, offset: 0, source: 0, target: 20, sourceNext: 10, sourcePrev: 25, targetNext: 99, targetPrev: 77, nextProp: 25, }; const e2 = { status: Status.CREATED, offset: 45, type: 22, source: 0, target: 20, targetNext: 99, targetPrev: 77, nextProp: 25, }; const e3 = { status: Status.CREATED, offset: 90, type: 22, source: 0, target: 2000, }; const bytes = new EdgeEncoder([e1, e2, e3]).write(); const e3p = { status: Status.CREATED, offset: 90, type: 22, source: 0, target: 2000, }; const edges = new EdgeDecoder(bytes).read(); assert.deepEqual([e1, e2, e3p], edges); }); test('basic write and read, props', async () => { const p1 = { status: Status.CREATED, offset: 0, key: 1, value: { some: 'text' }, nextProp: 111, }; const p2 = { status: Status.CREATED, offset: 56, type: 121, key: 1, value: 222, }; const p3 = { status: Status.CREATED, offset: 112, type: 128, key: 7, value: 'Hello World', nextProp: 888, }; const { refs, buf } = new PropValueEncoder(0, [p1, p2, p3], valueEncode).write(); const bytes = await new PropEncoder([p1, p2, p3], refs).write(); const props = await new PropDecoder(bytes, (valueRef) => { const decoder = new PropValueDecoder(buf, valueDecode); decoder.skipBytes(valueRef.ref); return decoder.readValue(valueRef); }).read(); assert.deepEqual([p1, p2, p3], props); }); test('basic write and read, indices', async () => { const i1 = { status: Status.CREATED, offset: 0, key: 101, value: await linkEncode(new TextEncoder().encode('Some text')), nextIndex: 111, }; const i2 = { status: Status.CREATED, offset: 56, type: 121, key: 0, value: await linkEncode(new TextEncoder().encode('Some other text')), }; const i3 = { status: Status.CREATED, offset: 112, type: 128, key: 1, value: await linkEncode(new TextEncoder().encode('Some more text')), nextIndex: 888, }; const bytes = await new IndexEncoder([i1, i2, i3]).write(); const indices = await new IndexDecoder(bytes, linkDecode).read(); assert.deepEqual([i1, i2, i3], indices); }); test('basic write and read, versions', async () => { const v1 = { root: CID.parse('bafkreidhv2kilqj6eydivvatngsrtbcbifiij33tnq6zww7u34kit536q4'), details: { comment: 'First commit', tags: ['tag0', 'tag1'], timestamp: 123456789, }, }; const publicKeyJWK = { key_ops: ['verify'], ext: true, kty: 'RSA', n: 't8iYfsaJOvQPYdbd7rhKf5g8ta8un4LUnwCgjfDcgQbQWxV6pEwh40Rh2rTZCBrTr4S00LsNDwhGP4lb4bpATPvmtGFxeBPig6dXmjJr37rVB1w236zcl8AsrNX2qHe3uVeZVvg6ZXhTjV7nM_MurOHxDbRzWSIc2xRqnrPIey6ZA5xAe_ay3Gt82QC_d4x4jU9vt6yQgoUv9qteJHH-7eFNk0KlzZMO9KygYnwCKBRxMIanil6KCb44MNKuqWlxWmxaD7Oq7rnTvaIRWtDIfRdEhRUU4SdNS-pMEJjxlU1xs_Ofbn4i2RjZI7ebhMDuuNSJ6YA5mTTSINf-PjNdpQ', e: 'AQAB', alg: 'PS256', }; const v2 = { root: CID.parse('bafkreicklvs2aaeqfvs6f2pgcki2gont35chka2loq7mlah7yu4tj6bsvy'), parent: CID.parse('bafkreidhv2kilqj6eydivvatngsrtbcbifiij33tnq6zww7u34kit536q4'), mergeParent: CID.parse('bafkreiegljjns2rqb3z5mtdyvq2u6u2cvsahyez6bqsdjibo6737vrqhbi'), details: { comment: 'Second commit', tags: ['tag2'], timestamp: 123456789, author: JSON.stringify(publicKeyJWK), signature: base64.toByteArray('Y/abSmVYftmvvBuSkVL6S9U8ilvRrSqLJZ7pl2P1qJP/WocJUFXWlZcaiEKMoImH6KNC8I4nrJVP17hUtFM88hg552sp+EBV5V6hOkViHAiZfY6f3hQzaXzozvRlHOGt/UZKKr8lbCYdncASlob/OIsMmbulXKtngnWA48BsUtP7CoKXKKkqmBl/5dvHaAgnZ6voDKssSKlrFUcrd6qOgPUN+aBSv/9DqBTNhOT+JF3MJ3HRGplt648DatCA/eLyXOJZTRtVeVbRO+bqEaLztZ+L/4X4NQoJ1kL7QmwSPAx8qDBJSVBiDtoLG5yjf+u2dILaFjgEBskwtPIJ1ETM4Q=='), }, }; const v3 = { root: CID.parse('bafkreiguifcsbkfb7jlxr7inlp5fqukmve7mv2po234jj73pp7nryvbcxu'), parent: CID.parse('bafkreicklvs2aaeqfvs6f2pgcki2gont35chka2loq7mlah7yu4tj6bsvy'), details: { comment: 'Third commit', tags: ['tag3'], timestamp: 123456789, }, }; const bytes = new VersionEncoder(CID.parse('bafkreibygummtcvcgmld7re3s4kjfoaf4z3zgxsdsqdmh3baom4suvgnem'), [v1, v2, v3], valueEncode).write(); const { id, versions } = new VersionDecoder(bytes, linkDecode, valueDecode).read(); assert.deepEqual([v1, v2, v3], versions); }); }); //# sourceMappingURL=serde.test.js.map