release: v0.5.1 — 存储后端生产级硬化(CRC-32/全库加密/WAL分片/页面化存储/多标签页锁/e2e)+ 深度审查修复(假实现接线/死代码清理)
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

This commit is contained in:
thzxx
2026-08-10 12:07:00 +08:00
parent cff98b0903
commit 334067d89e
88 changed files with 15713 additions and 10626 deletions
+62
View File
@@ -0,0 +1,62 @@
/**
* 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);
});
});