Files
MetonaSqlark/tests/engine/aria-page-core.test.ts
T
thzxx 334067d89e
CI / test (18.x) (push) Successful in 10m10s
CI / test (20.x) (push) Successful in 10m10s
CI / test (22.x) (push) Successful in 10m6s
CI / e2e (push) Successful in 9m51s
CI / test (24.x) (push) Successful in 10m28s
release: v0.5.1 — 存储后端生产级硬化(CRC-32/全库加密/WAL分片/页面化存储/多标签页锁/e2e)+ 深度审查修复(假实现接线/死代码清理)
2026-08-10 12:07:00 +08:00

63 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* AriaEngine Page — 页面核心逻辑测试
*
* v0.4.5: 页面层精简后仅保留生产代码实际使用的函数:
* - initPageHeaderFileManager 创建空页面)
* - createPageBufferPool 分配新页面)
* - PAGE_HEADER_SIZE / PAGE_SIZE 常量
* 页面内容为 SSTable 原始字节切片(PageSSTableStore 管理),无行级 slot 结构。
*/
import { createPage } from '../../src/engine/aria/page/format';
import { initPageHeader } from '../../src/engine/aria/page/header';
import { PAGE_SIZE, PAGE_HEADER_SIZE, PageType } from '../../src/engine/aria/types';
describe('AriaEngine — Page 核心', () => {
it('initPageHeader 初始化 4KB 页面头部字段', () => {
const buf = new ArrayBuffer(PAGE_SIZE);
initPageHeader(buf, 42, PageType.DATA);
const view = new DataView(buf);
expect(view.getUint32(0, false)).toBe(42); // page_id
expect(view.getUint8(4)).toBe(PageType.DATA); // type
expect(view.getUint16(5, false)).toBe(PAGE_HEADER_SIZE); // free_start
expect(view.getUint16(7, false)).toBe(PAGE_SIZE); // free_end
expect(view.getUint16(9, false)).toBe(0); // slot_count
expect(view.getUint8(15)).toBe(0); // reserved
});
it('initPageHeader 支持不同页面类型', () => {
const buf = new ArrayBuffer(PAGE_SIZE);
initPageHeader(buf, 1, PageType.META);
expect(new DataView(buf).getUint8(4)).toBe(PageType.META);
});
it('createPage 创建脏页面(pins=0,初始化头部)', () => {
const page = createPage(7, PageType.DATA);
expect(page.pageId).toBe(7);
expect(page.type).toBe(PageType.DATA);
expect(page.data.byteLength).toBe(PAGE_SIZE);
expect(page.dirty).toBe(true);
expect(page.pins).toBe(0);
// 头部已初始化
expect(new DataView(page.data).getUint32(0, false)).toBe(7);
expect(new DataView(page.data).getUint8(4)).toBe(PageType.DATA);
});
it('页面数据区从头部之后开始(跳过 16 字节头)', () => {
const page = createPage(1, PageType.DATA);
// 头部之后写入数据,头部字段不受影响
const view = new Uint8Array(page.data);
view[PAGE_HEADER_SIZE] = 0xAB;
view[PAGE_HEADER_SIZE + 1] = 0xCD;
expect(view[PAGE_HEADER_SIZE]).toBe(0xAB);
expect(view[PAGE_HEADER_SIZE + 1]).toBe(0xCD);
// 头部字段保持
expect(new DataView(page.data).getUint32(0, false)).toBe(1);
});
it('createPage 的 dirty 标记在写入后保持(PageSSTableStore 依赖)', () => {
const page = createPage(2, PageType.DATA);
new Uint8Array(page.data)[100] = 0x01;
expect(page.dirty).toBe(true);
});
});