fix(add): empty string is real data, not a missing field
validateAddParams() treated '' as falsy and rejected it with "Missing
required field 'data'" — so a legitimate empty file's first write always
failed. Only null/undefined data (with no vector either) is genuinely
absent; '' is real content. Fixed the check, plus the identical bug in
validateUpdateParams() (truncating a file to empty via overwrite hit the
same falsy check) and in update()/transact()'s update planner, where a
plain `Boolean(params.data)`/truthy check on the resolved vector would have
silently skipped both the deferred-embed marker and the eager re-embed for
an emptied value — a stale vector with no path to ever correct itself.
Verified end-to-end: vfs.writeFile('/empty.txt', '') now succeeds,
readFile() returns '', the file lists, and stat() reports size 0; the
existing "should reject empty string as data" tests (unit + integration)
asserted the old buggy behavior and are updated to assert the fixed
contract instead.
This commit is contained in:
parent
fc516da6eb
commit
258e9042af
6 changed files with 128 additions and 20 deletions
|
|
@ -53,6 +53,35 @@ describe('VirtualFileSystem - Production Tests', () => {
|
|||
expect(exists).toBe(true)
|
||||
})
|
||||
|
||||
it('should write and read an empty (0-byte) file end-to-end', async () => {
|
||||
// Pin: validateAddParams() used to treat '' as a missing 'data' field
|
||||
// (falsy check), so a legitimate empty file's FIRST write threw
|
||||
// "Missing required field 'data'". '' is real content, not an absent
|
||||
// field — only null/undefined is absent.
|
||||
const path = '/empty.txt'
|
||||
|
||||
await vfs.writeFile(path, '')
|
||||
|
||||
const result = await vfs.readFile(path)
|
||||
expect(result.toString()).toBe('')
|
||||
|
||||
const exists = await vfs.exists(path)
|
||||
expect(exists).toBe(true)
|
||||
|
||||
const stats = await vfs.stat(path)
|
||||
expect(stats.size).toBe(0)
|
||||
expect(stats.isFile()).toBe(true)
|
||||
|
||||
// The file lists like any other.
|
||||
const entries = await vfs.readdir('/') as string[]
|
||||
expect(entries).toContain('empty.txt')
|
||||
|
||||
// Overwriting it back to empty (truncate) must also succeed.
|
||||
await vfs.writeFile(path, 'not empty anymore')
|
||||
await vfs.writeFile(path, '')
|
||||
expect((await vfs.readFile(path)).toString()).toBe('')
|
||||
})
|
||||
|
||||
it('should handle binary files', async () => {
|
||||
const binaryData = Buffer.from([0x00, 0x01, 0x02, 0xFF])
|
||||
const path = '/binary.dat'
|
||||
|
|
|
|||
Reference in a new issue