Test the live-photo writer's fsyncs (closes #130)
check / check (push) Successful in 47s

A test checks that the live-photo writer fsyncs the image's and the
video's temp files before renaming either into place, and fsyncs the
directory after both renames, as the writeAtomic test does for one file.

Model: opus-5-5
This commit is contained in:
2026-09-28 16:12:43 +00:00
parent 9e6deb21eb
commit d06899cc29
2 changed files with 23 additions and 0 deletions
+18
View File
@@ -1909,6 +1909,24 @@ describe("downloadFile live photos", () => {
]);
});
it("fsyncs each part's temp file before the renames and the directory after", async () => {
const t = setup(livePhotoZip(), livePhoto);
await t.run();
// The same durability contract as `writeAtomic`, for two files: both
// temp files are on disk before either is renamed into place, and the
// directory is fsynced once both renames are done.
const [imageTmp, videoTmp] = renameHook.calls.map((c) => c.from);
expect(durabilityHook.events).toEqual([
`sync:w:${imageTmp}`,
`sync:w:${videoTmp}`,
`rename:${join(t.dir, "f.heic")}`,
`rename:${join(t.dir, "f.mov")}`,
`sync:r:${t.dir}`,
]);
});
it("stores neither part when the video cannot be renamed into place", async () => {
const t = setup(livePhotoZip(), livePhoto);
renameHook.failWith = new Error("simulated rename failure");