pzp-db/test/log/basic.test.js

80 lines
2.1 KiB
JavaScript

const test = require('node:test')
const assert = require('node:assert')
const fs = require('node:fs')
const p = require('node:util').promisify
const Log = require('../../lib/log')
test('Log basics', async function (t) {
await t.test('Log handles basic binary records', async function (t) {
const file = '/tmp/pzp-db-log-test-basic-binary.log'
try {
fs.unlinkSync(file)
} catch (_) {}
const log = Log(file, { blockSize: 2 * 1024 })
const msg1 = Buffer.from('testing')
const msg2 = Buffer.from('testing2')
const offset1 = await p(log.append)(msg1)
assert.equal(offset1, 0)
const offset2 = await p(log.append)(msg2)
assert.equal(offset2, msg1.length + 4)
const b1 = await p(log._get)(offset1)
assert.equal(b1.toString(), msg1.toString())
const b2 = await p(log._get)(offset2)
assert.equal(b2.toString(), msg2.toString())
await p(log.close)()
})
const json1 = { text: 'testing' }
const json2 = { test: 'testing2' }
await t.test('Log handles basic json records', async function (t) {
const file = '/tmp/pzp-db-log-test-basic-json.log'
try {
fs.unlinkSync(file)
} catch (_) {}
const log = Log(file, {
blockSize: 2 * 1024,
codec: require('flumecodec/json'),
})
const offset1 = await p(log.append)(json1)
assert.equal(offset1, 0)
const offset2 = await p(log.append)(json2)
assert.equal(offset2, 22)
const rec1 = await p(log._get)(offset1)
assert.deepEqual(rec1, json1)
const rec2 = await p(log._get)(offset2)
assert.deepEqual(rec2, json2)
await p(log.close)()
})
await t.test('Log handles basic json record re-reading', async function (t) {
const file = '/tmp/pzp-db-log-test-basic-json.log'
const log = Log(file, {
blockSize: 2 * 1024,
codec: require('flumecodec/json'),
})
await p(log.onDrain)()
assert.equal(log.lastRecOffset.value, 22)
const rec1 = await p(log._get)(0)
assert.deepEqual(rec1, json1)
const rec2 = await p(log._get)(22)
assert.deepEqual(rec2, json2)
await p(log.close)()
})
})