zerobyte/app/server/modules/backends/utils/__tests__/backend-utils.test.ts
2026-03-15 12:03:27 +01:00

40 lines
1.3 KiB
TypeScript

import * as fs from "node:fs/promises";
import { afterEach, describe, expect, mock, spyOn, test } from "bun:test";
import * as mountinfo from "../../../../utils/mountinfo";
import { assertMounted } from "../backend-utils";
afterEach(() => {
mock.restore();
});
describe("assertMountedFilesystem", () => {
test("throws when the path is not accessible", async () => {
spyOn(fs, "access").mockRejectedValueOnce(new Error("missing"));
await expect(assertMounted("/tmp/volume", (fstype) => fstype.startsWith("nfs"))).rejects.toThrow(
"Volume is not mounted",
);
});
test("throws when the mount filesystem does not match", async () => {
spyOn(fs, "access").mockResolvedValueOnce(undefined);
spyOn(mountinfo, "getMountForPath").mockResolvedValueOnce({
mountPoint: "/tmp/volume",
fstype: "cifs",
});
await expect(assertMounted("/tmp/volume", (fstype) => fstype.startsWith("nfs"))).rejects.toThrow(
"Path /tmp/volume is not mounted as correct fstype (found cifs).",
);
});
test("accepts a matching mounted filesystem", async () => {
spyOn(fs, "access").mockResolvedValueOnce(undefined);
spyOn(mountinfo, "getMountForPath").mockResolvedValueOnce({
mountPoint: "/tmp/volume",
fstype: "nfs4",
});
await expect(assertMounted("/tmp/volume", (fstype) => fstype.startsWith("nfs"))).resolves.toBeUndefined();
});
});