import assert from 'node:assert/strict'; import {createHash} from 'node:crypto'; import {mkdirSync, writeFileSync} from 'node:fs'; import {join} from 'node:path'; import {makeTurkFsFormatDisk} from '../turkfs-format-fixture.mjs'; const root = process.cwd(); const block = 512; const disk = makeTurkFsFormatDisk(); assert.equal(disk.length, 2048 * block); const rootEntry = 17 * block + 4 * 32; const inode = 18 * block + 4 * 32; assert.ok(disk.subarray(rootEntry, rootEntry + 32).every(byte => byte === 0)); assert.ok(disk.subarray(inode, inode + 32).every(byte => byte === 0)); assert.equal(disk[24 * block], 0); disk.writeUInt32LE(5, 16 * block + 32); disk[rootEntry] = 1; disk[rootEntry + 1] = 3; disk.writeUInt32LE(5, rootEntry + 4); disk.write('ONE', rootEntry + 8, 'ascii'); disk.writeUInt32LE(5, inode); disk.writeBigUInt64LE(1n, inode + 8); disk.writeBigUInt64LE(24n, inode + 16); disk[24 * block] = 0x42; const sha256 = bytes => createHash('sha256').update(bytes).digest('hex'); const files = [ {name: 'README', bytes: disk.subarray(0, 0)}, {name: 'ONE', bytes: disk.subarray(24 * block, 24 * block + 1)}, {name: 'TAIL', bytes: disk.subarray(22 * block, 22 * block + 513)}, ].map(row => ({name: row.name, bytes: row.bytes.length, sha256: sha256(row.bytes)})); const directory = join(root, 'userspace/tests/fixtures'); mkdirSync(directory, {recursive: true}); const image = join(directory, 'core-tools.raw'); const manifest = join(directory, 'core-tools.json'); writeFileSync(image, disk); writeFileSync(manifest, JSON.stringify({schema: 'turkos-k1290-cat-fixture/v1', image: 'core-tools.raw', bytes: disk.length, sha256: sha256(disk), files, source: 'scripts/turkfs-format-fixture.mjs + one-byte ONE file at LBA 24'}, null, 2) + '\n'); console.log(JSON.stringify({image, manifest, sha256: sha256(disk), files}));