mirror of
https://github.com/Ryder-Sun/Meldwork.git
synced 2026-11-07 06:56:03 -10:00
Implement frozen concurrent responses, Agent-negotiated V4 discussion work, strict durable receipts and recovery, validated runtime phase UI, and the animated return-to-bottom control. Prepare the 0.1.2 prerelease metadata and documentation.\n\nChecks before commit: frontend 299/299; desktop 1270/1270; deterministic eval 6 cases/18 results; web and desktop renderer builds; desktop pack; staged and unstaged diff checks.
51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
const test = require('node:test')
|
|
const assert = require('node:assert/strict')
|
|
const fs = require('node:fs')
|
|
const os = require('node:os')
|
|
const path = require('node:path')
|
|
|
|
const { atomicWritePrivateFile } = require('../../src/security/private-file.cjs')
|
|
|
|
function fixture(t) {
|
|
const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'meldwork-private-file-'))
|
|
t.after(() => fs.rmSync(directory, { recursive: true, force: true }))
|
|
return directory
|
|
}
|
|
|
|
test('private file writes replace contents atomically with restrictive permissions', (t) => {
|
|
const directory = fixture(t)
|
|
const filename = path.join(directory, 'nested', 'private.json')
|
|
|
|
atomicWritePrivateFile(filename, 'first')
|
|
atomicWritePrivateFile(filename, 'second')
|
|
|
|
assert.equal(fs.readFileSync(filename, 'utf8'), 'second')
|
|
assert.equal(fs.statSync(filename).mode & 0o777, 0o600)
|
|
assert.deepEqual(fs.readdirSync(path.dirname(filename)), ['private.json'])
|
|
})
|
|
|
|
test('private file writes remove their temporary file when replacement fails', (t) => {
|
|
const directory = fixture(t)
|
|
const filename = path.join(directory, 'occupied')
|
|
fs.mkdirSync(filename)
|
|
|
|
assert.throws(() => atomicWritePrivateFile(filename, 'blocked'))
|
|
assert.deepEqual(fs.readdirSync(directory), ['occupied'])
|
|
})
|
|
|
|
test('permission failures leave the previous destination unchanged', (t) => {
|
|
const directory = fixture(t)
|
|
const filename = path.join(directory, 'private.json')
|
|
atomicWritePrivateFile(filename, 'first')
|
|
const chmodSync = fs.chmodSync
|
|
fs.chmodSync = () => { throw new Error('CHMOD_FAILED') }
|
|
t.after(() => { fs.chmodSync = chmodSync })
|
|
|
|
assert.throws(
|
|
() => atomicWritePrivateFile(filename, 'second'),
|
|
{ message: 'CHMOD_FAILED' },
|
|
)
|
|
assert.equal(fs.readFileSync(filename, 'utf8'), 'first')
|
|
assert.deepEqual(fs.readdirSync(directory), ['private.json'])
|
|
})
|